cecli-dev 0.100.12rc5__tar.gz → 0.100.14__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 (708) hide show
  1. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/.github/workflows/ubuntu-tests.yml +3 -0
  2. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/.github/workflows/windows-tests.yml +3 -0
  3. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/PKG-INFO +2 -1
  4. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/README.md +15 -6
  5. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/__init__.py +1 -1
  6. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/_version.py +3 -3
  7. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/args.py +6 -0
  8. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/agent_coder.py +20 -1
  9. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/base_coder.py +76 -18
  10. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/__init__.py +3 -0
  11. cecli_dev-0.100.14/cecli/commands/agent_tree.py +95 -0
  12. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/conversation/integration.py +4 -56
  13. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/hashline.py +40 -14
  14. cecli_dev-0.100.14/cecli/helpers/hashpos/hashpos.py +237 -0
  15. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/observations/service.py +9 -3
  16. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/interruptible_input.py +8 -1
  17. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/io.py +14 -1
  18. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/main.py +15 -0
  19. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/mcp/manager.py +44 -16
  20. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/mcp/server.py +44 -0
  21. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/models.py +1 -0
  22. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/agent.yml +13 -8
  23. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/base.yml +1 -0
  24. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/subagent.yml +13 -8
  25. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/repo.py +1 -0
  26. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/edit_file.py +3 -2
  27. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/conf.md +3 -0
  28. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/options.md +8 -0
  29. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli_dev.egg-info/PKG-INFO +2 -1
  30. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli_dev.egg-info/SOURCES.txt +5 -0
  31. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli_dev.egg-info/requires.txt +1 -0
  32. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli_dev.egg-info/scm_file_list.json +825 -820
  33. cecli_dev-0.100.14/cecli_dev.egg-info/scm_version.json +8 -0
  34. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/requirements/common-constraints.txt +2 -0
  35. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/requirements/requirements.in +3 -0
  36. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/requirements.txt +4 -0
  37. cecli_dev-0.100.14/scripts/optimize_tokens.sh +67 -0
  38. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_hashline.py +27 -40
  39. cecli_dev-0.100.14/tests/basic/test_select_selector.py +140 -0
  40. cecli_dev-0.100.14/tests/basic/test_spinner.py +86 -0
  41. cecli_dev-0.100.14/tests/conftest.py +35 -0
  42. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/helpers/monorepo/test_repomap_workspace.py +2 -2
  43. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/helpers/observations/test_observation_service.py +32 -12
  44. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/mcp/test_keepalive_integration.py +9 -6
  45. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/mcp/test_keepalive_resilience.py +1 -1
  46. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/mcp/test_manager.py +6 -2
  47. cecli_dev-0.100.14/tests/mcp/test_manager_retry.py +826 -0
  48. cecli_dev-0.100.12rc5/cecli/helpers/hashpos/hashpos.py +0 -217
  49. cecli_dev-0.100.12rc5/cecli_dev.egg-info/scm_version.json +0 -8
  50. cecli_dev-0.100.12rc5/tests/conftest.py +0 -16
  51. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/.dockerignore +0 -0
  52. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/.flake8 +0 -0
  53. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/.gitattributes +0 -0
  54. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  55. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/.github/workflows/check_pypi_version.yml +0 -0
  56. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/.github/workflows/docker-build-test.yml +0 -0
  57. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/.github/workflows/docker-release.yml +0 -0
  58. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/.github/workflows/issues.yml +0 -0
  59. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/.github/workflows/pages.yml +0 -0
  60. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/.github/workflows/pre-commit.yml +0 -0
  61. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/.github/workflows/release.yml +0 -0
  62. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/.github/workflows/windows_check_pypi_version.yml +0 -0
  63. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/.gitignore +0 -0
  64. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/.pre-commit-config.yaml +0 -0
  65. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/CHANGELOG.md +0 -0
  66. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/CNAME +0 -0
  67. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/CONTRIBUTING.md +0 -0
  68. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/HISTORY.md +0 -0
  69. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/LICENSE.txt +0 -0
  70. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/MANIFEST.in +0 -0
  71. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/README.md +0 -0
  72. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/Dockerfile +0 -0
  73. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/__init__.py +0 -0
  74. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/benchmark.py +0 -0
  75. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/benchmark_classic.py +0 -0
  76. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/clone-exercism.sh +0 -0
  77. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/cpp-test.sh +0 -0
  78. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/docker.sh +0 -0
  79. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/docker_build.sh +0 -0
  80. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/install-docker-ubuntu.sh +0 -0
  81. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/npm-test.sh +0 -0
  82. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/over_time.py +0 -0
  83. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/plot.sh +0 -0
  84. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/plots.py +0 -0
  85. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/problem_stats.py +0 -0
  86. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/prompts.py +0 -0
  87. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/refactor_tools.py +0 -0
  88. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/rsync.sh +0 -0
  89. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/rungrid.py +0 -0
  90. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/swe-bench-lite.txt +0 -0
  91. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/swe-bench.txt +0 -0
  92. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/swe_bench.py +0 -0
  93. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/test_benchmark.py +0 -0
  94. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/variations.1.sh +0 -0
  95. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/variations.2.sh +0 -0
  96. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/variations.3.sh +0 -0
  97. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/benchmark/variations.4.sh +0 -0
  98. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/__main__.py +0 -0
  99. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/args_formatter.py +0 -0
  100. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/change_tracker.py +0 -0
  101. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/__init__.py +0 -0
  102. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/architect_coder.py +0 -0
  103. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/ask_coder.py +0 -0
  104. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/chat_chunks.py +0 -0
  105. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/context_coder.py +0 -0
  106. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/copypaste_coder.py +0 -0
  107. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/editblock_coder.py +0 -0
  108. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/editblock_fenced_coder.py +0 -0
  109. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/editblock_func_coder.py +0 -0
  110. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  111. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/editor_editblock_coder.py +0 -0
  112. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/editor_whole_coder.py +0 -0
  113. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/hashline_coder.py +0 -0
  114. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/help_coder.py +0 -0
  115. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/patch_coder.py +0 -0
  116. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/search_replace.py +0 -0
  117. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/shell.py +0 -0
  118. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/single_wholefile_func_coder.py +0 -0
  119. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/sub_agent_coder.py +0 -0
  120. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/udiff_coder.py +0 -0
  121. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/udiff_simple.py +0 -0
  122. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/wholefile_coder.py +0 -0
  123. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/coders/wholefile_func_coder.py +0 -0
  124. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/add.py +0 -0
  125. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/agent.py +0 -0
  126. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/agent_model.py +0 -0
  127. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/architect.py +0 -0
  128. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/ask.py +0 -0
  129. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/chat_mode.py +0 -0
  130. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/clear.py +0 -0
  131. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/code.py +0 -0
  132. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/command_prefix.py +0 -0
  133. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/commit.py +0 -0
  134. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/compact.py +0 -0
  135. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/context.py +0 -0
  136. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/context_blocks.py +0 -0
  137. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/context_management.py +0 -0
  138. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/copy.py +0 -0
  139. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/copy_context.py +0 -0
  140. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/core.py +0 -0
  141. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/diff.py +0 -0
  142. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/drop.py +0 -0
  143. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/editor.py +0 -0
  144. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/editor_model.py +0 -0
  145. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/exclude_skill.py +0 -0
  146. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/exit.py +0 -0
  147. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/git.py +0 -0
  148. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/hashline.py +0 -0
  149. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/help.py +0 -0
  150. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/history_search.py +0 -0
  151. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/hooks.py +0 -0
  152. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/hot_reload.py +0 -0
  153. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/include_skill.py +0 -0
  154. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/lint.py +0 -0
  155. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/list_mcp.py +0 -0
  156. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/list_sessions.py +0 -0
  157. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/list_skills.py +0 -0
  158. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/load.py +0 -0
  159. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/load_hook.py +0 -0
  160. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/load_mcp.py +0 -0
  161. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/load_session.py +0 -0
  162. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/load_skill.py +0 -0
  163. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/ls.py +0 -0
  164. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/map.py +0 -0
  165. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/map_refresh.py +0 -0
  166. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/merge.py +0 -0
  167. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/model.py +0 -0
  168. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/models.py +0 -0
  169. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/multiline_mode.py +0 -0
  170. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/paste.py +0 -0
  171. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/quit.py +0 -0
  172. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/read_only.py +0 -0
  173. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/read_only_stub.py +0 -0
  174. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/reap_agent.py +0 -0
  175. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/reasoning_effort.py +0 -0
  176. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/remove_hook.py +0 -0
  177. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/remove_mcp.py +0 -0
  178. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/remove_skill.py +0 -0
  179. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/report.py +0 -0
  180. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/reset.py +0 -0
  181. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/rules.py +0 -0
  182. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/run.py +0 -0
  183. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/save.py +0 -0
  184. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/save_session.py +0 -0
  185. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/settings.py +0 -0
  186. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/spawn_agent.py +0 -0
  187. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/switch_agent.py +0 -0
  188. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/terminal_data/linux.keytab +0 -0
  189. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/terminal_setup.py +0 -0
  190. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/test.py +0 -0
  191. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/think_tokens.py +0 -0
  192. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/tokens.py +0 -0
  193. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/undo.py +0 -0
  194. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/utils/__init__.py +0 -0
  195. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/utils/base_command.py +0 -0
  196. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/utils/helpers.py +0 -0
  197. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/utils/registry.py +0 -0
  198. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/utils/save_load_manager.py +0 -0
  199. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/voice.py +0 -0
  200. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/weak_model.py +0 -0
  201. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/web.py +0 -0
  202. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/commands/workspace.py +0 -0
  203. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/deprecated_args.py +0 -0
  204. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/diffs.py +0 -0
  205. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/dump.py +0 -0
  206. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/editor.py +0 -0
  207. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/exceptions.py +0 -0
  208. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/format_settings.py +0 -0
  209. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/help.py +0 -0
  210. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/help_pats.py +0 -0
  211. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/__init__.py +0 -0
  212. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/agents/__init__.py +0 -0
  213. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/agents/config.py +0 -0
  214. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/agents/service.py +0 -0
  215. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/background_commands.py +0 -0
  216. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/command_parser.py +0 -0
  217. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/conversation/__init__.py +0 -0
  218. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/conversation/base_message.py +0 -0
  219. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/conversation/files.py +0 -0
  220. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/conversation/manager.py +0 -0
  221. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/conversation/service.py +0 -0
  222. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/conversation/tags.py +0 -0
  223. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/conversation/utils.py +0 -0
  224. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/copypaste.py +0 -0
  225. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/coroutines.py +0 -0
  226. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/crypto.py +0 -0
  227. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/file_searcher.py +0 -0
  228. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/file_system/__init__.py +0 -0
  229. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/file_system/builders.py +0 -0
  230. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/file_system/ignore.py +0 -0
  231. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/file_system/ngram_index.py +0 -0
  232. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/file_system/service.py +0 -0
  233. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/file_system/trie_index.py +0 -0
  234. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/grep_ast/__init__.py +0 -0
  235. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/grep_ast/dump.py +0 -0
  236. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/grep_ast/grep_ast.py +0 -0
  237. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/grep_ast/main.py +0 -0
  238. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/grep_ast/parsers.py +0 -0
  239. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/grep_ast/tsl.py +0 -0
  240. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/hashpos/__init__.py +0 -0
  241. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/hashpos/hashpos.v1.bak +0 -0
  242. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/io_proxy.py +0 -0
  243. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/leak_detect.py +0 -0
  244. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/model_providers.py +0 -0
  245. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/monorepo/__init__.py +0 -0
  246. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/monorepo/config.py +0 -0
  247. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/monorepo/local_workspace.py +0 -0
  248. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/monorepo/project.py +0 -0
  249. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/monorepo/workspace.py +0 -0
  250. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/monorepo/worktree.py +0 -0
  251. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/nested.py +0 -0
  252. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/observations/__init__.py +0 -0
  253. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/plugin_manager.py +0 -0
  254. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/profiler.py +0 -0
  255. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/requests.py +0 -0
  256. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/responses.py +0 -0
  257. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/similarity.py +0 -0
  258. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/skills.py +0 -0
  259. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/helpers/threading.py +0 -0
  260. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/history.py +0 -0
  261. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/hooks/__init__.py +0 -0
  262. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/hooks/base.py +0 -0
  263. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/hooks/helpers.py +0 -0
  264. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/hooks/integration.py +0 -0
  265. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/hooks/manager.py +0 -0
  266. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/hooks/registry.py +0 -0
  267. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/hooks/service.py +0 -0
  268. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/hooks/types.py +0 -0
  269. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/linter.py +0 -0
  270. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/llm.py +0 -0
  271. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/mcp/__init__.py +0 -0
  272. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/mcp/oauth.py +0 -0
  273. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/mcp/utils.py +0 -0
  274. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/mdstream.py +0 -0
  275. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/onboarding.py +0 -0
  276. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/__init__.py +0 -0
  277. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/architect.yml +0 -0
  278. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/ask.yml +0 -0
  279. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/context.yml +0 -0
  280. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/copypaste.yml +0 -0
  281. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/editblock.yml +0 -0
  282. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/editblock_fenced.yml +0 -0
  283. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/editblock_func.yml +0 -0
  284. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/editor_diff_fenced.yml +0 -0
  285. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/editor_editblock.yml +0 -0
  286. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/editor_whole.yml +0 -0
  287. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/hashline.yml +0 -0
  288. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/help.yml +0 -0
  289. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/patch.yml +0 -0
  290. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/single_wholefile_func.yml +0 -0
  291. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/udiff.yml +0 -0
  292. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/udiff_simple.yml +0 -0
  293. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/utils/__init__.py +0 -0
  294. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/utils/registry.py +0 -0
  295. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/utils/system.py +0 -0
  296. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/wholefile.yml +0 -0
  297. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/prompts/wholefile_func.yml +0 -0
  298. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  299. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  300. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
  301. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  302. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  303. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  304. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  305. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  306. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  307. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  308. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  309. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  310. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  311. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  312. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  313. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  314. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  315. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  316. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  317. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  318. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  319. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  320. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  321. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  322. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  323. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  324. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  325. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  326. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  327. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  328. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  329. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  330. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/README.md +0 -0
  331. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
  332. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  333. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  334. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  335. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  336. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  337. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  338. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  339. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  340. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  341. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  342. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  343. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  344. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  345. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  346. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  347. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  348. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  349. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  350. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  351. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  352. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  353. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  354. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  355. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  356. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  357. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  358. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/reasoning_tags.py +0 -0
  359. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/repomap.py +0 -0
  360. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/report.py +0 -0
  361. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/resources/__init__.py +0 -0
  362. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/resources/model-metadata.json +0 -0
  363. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/resources/model-settings.yml +0 -0
  364. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/resources/providers.json +0 -0
  365. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/run_cmd.py +0 -0
  366. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/scrape.py +0 -0
  367. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/sendchat.py +0 -0
  368. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/sessions.py +0 -0
  369. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/special.py +0 -0
  370. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/__init__.py +0 -0
  371. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/_yield.py +0 -0
  372. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/command.py +0 -0
  373. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/command_interactive.py +0 -0
  374. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/delegate.py +0 -0
  375. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/explore_code.py +0 -0
  376. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/git_branch.py +0 -0
  377. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/git_diff.py +0 -0
  378. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/git_log.py +0 -0
  379. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/git_remote.py +0 -0
  380. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/git_show.py +0 -0
  381. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/git_status.py +0 -0
  382. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/grep.py +0 -0
  383. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/ls.py +0 -0
  384. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/read_file.py +0 -0
  385. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/resource_manager.py +0 -0
  386. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/thinking.py +0 -0
  387. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/undo_change.py +0 -0
  388. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/update_todo_list.py +0 -0
  389. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/utils/__init__.py +0 -0
  390. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/utils/base_tool.py +0 -0
  391. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/utils/helpers.py +0 -0
  392. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/utils/output.py +0 -0
  393. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/utils/registry.py +0 -0
  394. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/validations/__init__.py +0 -0
  395. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tools/validations/validations.py +0 -0
  396. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tui/__init__.py +0 -0
  397. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tui/app.py +0 -0
  398. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tui/io.py +0 -0
  399. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tui/styles.tcss +0 -0
  400. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tui/widgets/__init__.py +0 -0
  401. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tui/widgets/completion_bar.py +0 -0
  402. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tui/widgets/file_list.py +0 -0
  403. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tui/widgets/footer.py +0 -0
  404. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tui/widgets/input_area.py +0 -0
  405. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tui/widgets/input_container.py +0 -0
  406. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tui/widgets/key_hints.py +0 -0
  407. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tui/widgets/output.py +0 -0
  408. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tui/widgets/status_bar.py +0 -0
  409. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tui/widgets/subagent_pills.py +0 -0
  410. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/tui/worker.py +0 -0
  411. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/urls.py +0 -0
  412. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/utils.py +0 -0
  413. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/versioncheck.py +0 -0
  414. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/voice.py +0 -0
  415. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/waiting.py +0 -0
  416. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/watch.py +0 -0
  417. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/watch_prompts.py +0 -0
  418. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/Gemfile +0 -0
  419. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_includes/blame.md +0 -0
  420. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_includes/get-started.md +0 -0
  421. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_includes/help-tip.md +0 -0
  422. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_includes/help.md +0 -0
  423. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_includes/install.md +0 -0
  424. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_includes/keys.md +0 -0
  425. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_includes/model-warnings.md +0 -0
  426. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_includes/multi-line.md +0 -0
  427. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_includes/python-m-aider.md +0 -0
  428. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_includes/recording.css +0 -0
  429. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_includes/recording.md +0 -0
  430. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_includes/works-best.md +0 -0
  431. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_sass/_features.scss +0 -0
  432. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_sass/_footer.scss +0 -0
  433. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_sass/_hero.scss +0 -0
  434. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_sass/_info.scss +0 -0
  435. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_sass/_layout.scss +0 -0
  436. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_sass/_reset.scss +0 -0
  437. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_sass/_testimonials.scss +0 -0
  438. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_sass/_typography.scss +0 -0
  439. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_sass/_variables.scss +0 -0
  440. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_sass/custom/custom.scss +0 -0
  441. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/_sass/global-overrides.scss +0 -0
  442. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/adv-model-settings.md +0 -0
  443. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/agent-mode.md +0 -0
  444. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/api-keys.md +0 -0
  445. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/custom-commands.md +0 -0
  446. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  447. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/dotenv.md +0 -0
  448. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/editor.md +0 -0
  449. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/hooks.md +0 -0
  450. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/mcp.md +0 -0
  451. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/model-aliases.md +0 -0
  452. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/model-configuration.md +0 -0
  453. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/model-providers.md +0 -0
  454. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/reasoning.md +0 -0
  455. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/retries.md +0 -0
  456. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/security.md +0 -0
  457. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/skills.md +0 -0
  458. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/subagents.md +0 -0
  459. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/tui.md +0 -0
  460. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config/workspaces.md +0 -0
  461. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/config.md +0 -0
  462. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/git.md +0 -0
  463. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/index.md +0 -0
  464. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/install/docker.md +0 -0
  465. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/install.md +0 -0
  466. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/languages.md +0 -0
  467. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  468. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/legal/privacy.md +0 -0
  469. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms/anthropic.md +0 -0
  470. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms/azure.md +0 -0
  471. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms/bedrock.md +0 -0
  472. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms/cohere.md +0 -0
  473. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms/deepseek.md +0 -0
  474. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms/gemini.md +0 -0
  475. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms/github.md +0 -0
  476. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms/groq.md +0 -0
  477. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms/lm-studio.md +0 -0
  478. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms/ollama.md +0 -0
  479. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms/openai-compat.md +0 -0
  480. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms/openai.md +0 -0
  481. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms/openrouter.md +0 -0
  482. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms/other.md +0 -0
  483. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms/vertex.md +0 -0
  484. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms/warnings.md +0 -0
  485. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms/xai.md +0 -0
  486. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/llms.md +0 -0
  487. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/more/analytics.md +0 -0
  488. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/more/edit-formats.md +0 -0
  489. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/more/infinite-output.md +0 -0
  490. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/more-info.md +0 -0
  491. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/repomap.md +0 -0
  492. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/scripting.md +0 -0
  493. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  494. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  495. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/troubleshooting/imports.md +0 -0
  496. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  497. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/troubleshooting/support.md +0 -0
  498. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  499. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  500. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/troubleshooting.md +0 -0
  501. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/usage/commands.md +0 -0
  502. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/usage/conventions.md +0 -0
  503. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/usage/copypaste.md +0 -0
  504. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/usage/images-urls.md +0 -0
  505. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/usage/lint-test.md +0 -0
  506. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/usage/modes.md +0 -0
  507. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/usage/not-code.md +0 -0
  508. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/usage/notifications.md +0 -0
  509. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/usage/optional.md +0 -0
  510. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/usage/sessions.md +0 -0
  511. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/usage/tips.md +0 -0
  512. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/usage/voice.md +0 -0
  513. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/usage/watch.md +0 -0
  514. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/docs/usage.md +0 -0
  515. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli/website/share/index.md +0 -0
  516. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli_dev.egg-info/dependency_links.txt +0 -0
  517. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli_dev.egg-info/entry_points.txt +0 -0
  518. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/cecli_dev.egg-info/top_level.txt +0 -0
  519. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/docker/Dockerfile +0 -0
  520. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  521. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/pyproject.toml +0 -0
  522. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/pytest.ini +0 -0
  523. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/requirements/requirements-dev.in +0 -0
  524. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/requirements/requirements-dev.txt +0 -0
  525. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/requirements/requirements-help.in +0 -0
  526. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/requirements/requirements-help.txt +0 -0
  527. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/requirements/requirements-playwright.in +0 -0
  528. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/requirements/requirements-playwright.txt +0 -0
  529. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/requirements/tree-sitter.in +0 -0
  530. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/30k-image.py +0 -0
  531. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/Dockerfile.jekyll +0 -0
  532. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/__init__.py +0 -0
  533. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/blame.py +0 -0
  534. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/clean_metadata.py +0 -0
  535. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/compare-message-history.py +0 -0
  536. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/cost_analyzer.py +0 -0
  537. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/cost_calculator.py +0 -0
  538. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/dl_icons.py +0 -0
  539. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/filter-chat-mode.js +0 -0
  540. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/generate_providers.py +0 -0
  541. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/get_contributor_list.js +0 -0
  542. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/get_hashline.py +0 -0
  543. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/history_prompts.py +0 -0
  544. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/homepage.py +0 -0
  545. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/issues.py +0 -0
  546. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/jekyll_build.sh +0 -0
  547. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/jekyll_run.sh +0 -0
  548. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/logo_svg.py +0 -0
  549. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/pip-compile.sh +0 -0
  550. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/recording_audio.py +0 -0
  551. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/redact-cast.py +0 -0
  552. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/rename_to_cecli.py +0 -0
  553. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/tmux_record.sh +0 -0
  554. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/tsl_pack_langs.py +0 -0
  555. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/update-blame.sh +0 -0
  556. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/update-docs.sh +0 -0
  557. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/update-history.py +0 -0
  558. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/versionbump.py +0 -0
  559. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/scripts/yank-old-versions.py +0 -0
  560. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/setup.cfg +0 -0
  561. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/shim.pyproject.toml +0 -0
  562. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/__init__.py +0 -0
  563. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/__init__.py +0 -0
  564. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/conftest.py +0 -0
  565. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_aws_credentials.py +0 -0
  566. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_background_commands.py +0 -0
  567. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_coder.py +0 -0
  568. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_commands.py +0 -0
  569. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_custom_commands.py +0 -0
  570. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_deprecated.py +0 -0
  571. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_editblock.py +0 -0
  572. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_editor.py +0 -0
  573. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_exceptions.py +0 -0
  574. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_find_or_blocks.py +0 -0
  575. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_hashline_closure.py +0 -0
  576. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_history.py +0 -0
  577. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_io.py +0 -0
  578. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_linter.py +0 -0
  579. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_main.py +0 -0
  580. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_model_info_manager.py +0 -0
  581. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_model_provider_manager.py +0 -0
  582. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_models.py +0 -0
  583. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_onboarding.py +0 -0
  584. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_plugin_manager.py +0 -0
  585. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_prompts.py +0 -0
  586. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_reasoning.py +0 -0
  587. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_repo.py +0 -0
  588. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_repomap.py +0 -0
  589. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_run_cmd.py +0 -0
  590. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_sanity_check_repo.py +0 -0
  591. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_scripting.py +0 -0
  592. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_sendchat.py +0 -0
  593. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_session_args.py +0 -0
  594. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_session_crypto.py +0 -0
  595. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_sessions.py +0 -0
  596. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_sessions_manager.py +0 -0
  597. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_skills.py +0 -0
  598. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_special.py +0 -0
  599. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_ssl_verification.py +0 -0
  600. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_udiff.py +0 -0
  601. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_urls.py +0 -0
  602. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_voice.py +0 -0
  603. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_watch.py +0 -0
  604. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/basic/test_wholefile.py +0 -0
  605. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/coders/test_coder_switching.py +0 -0
  606. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/coders/test_copypaste_coder.py +0 -0
  607. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/commands/test_compaction.py +0 -0
  608. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/commands/test_switch_agent.py +0 -0
  609. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/conversations/test_conversation_integration.py +0 -0
  610. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/conversations/test_conversation_system.py +0 -0
  611. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  612. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/chat-history.md +0 -0
  613. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/arduino/test.ino +0 -0
  614. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/bash/test.sh +0 -0
  615. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/c/test.c +0 -0
  616. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/chatito/test.chatito +0 -0
  617. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/clojure/test.clj +0 -0
  618. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  619. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/cpp/test.cpp +0 -0
  620. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/csharp/test.cs +0 -0
  621. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/d/test.d +0 -0
  622. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/dart/test.dart +0 -0
  623. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/elisp/test.el +0 -0
  624. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/elixir/test.ex +0 -0
  625. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/elm/test.elm +0 -0
  626. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/gleam/test.gleam +0 -0
  627. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/go/test.go +0 -0
  628. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/haskell/test.hs +0 -0
  629. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/hcl/test.tf +0 -0
  630. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/java/test.java +0 -0
  631. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/javascript/test.js +0 -0
  632. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/kotlin/test.kt +0 -0
  633. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/lua/test.lua +0 -0
  634. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/matlab/test.m +0 -0
  635. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/ocaml/test.ml +0 -0
  636. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  637. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/php/test.php +0 -0
  638. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/pony/test.pony +0 -0
  639. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/properties/test.properties +0 -0
  640. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/python/test.py +0 -0
  641. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/ql/test.ql +0 -0
  642. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/r/test.r +0 -0
  643. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/racket/test.rkt +0 -0
  644. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/ruby/test.rb +0 -0
  645. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/rust/test.rs +0 -0
  646. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/scala/test.scala +0 -0
  647. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/solidity/test.sol +0 -0
  648. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/swift/test.swift +0 -0
  649. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/tsx/test.tsx +0 -0
  650. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/typescript/test.ts +0 -0
  651. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/udev/test.rules +0 -0
  652. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/languages/zig/test.zig +0 -0
  653. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/sample-code-base/sample.js +0 -0
  654. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/sample-code-base/sample.py +0 -0
  655. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  656. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/watch.js +0 -0
  657. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/watch.lisp +0 -0
  658. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/watch.py +0 -0
  659. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/fixtures/watch_question.js +0 -0
  660. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/help/test_help.py +0 -0
  661. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/helpers/monorepo/LOCAL_WORKSPACE.md +0 -0
  662. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/helpers/monorepo/test_config.py +0 -0
  663. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/helpers/monorepo/test_config_active.py +0 -0
  664. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
  665. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/helpers/monorepo/test_local_workspace.py +0 -0
  666. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/helpers/monorepo/test_workspace.py +0 -0
  667. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/hooks/__init__.py +0 -0
  668. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/hooks/test_base.py +0 -0
  669. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/hooks/test_manager.py +0 -0
  670. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/hooks/test_registry.py +0 -0
  671. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/integration/test_agent_mcp_management.py +0 -0
  672. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/integration/test_mcp_management.py +0 -0
  673. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/mcp/__init__.py +0 -0
  674. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/mcp/conftest.py +0 -0
  675. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/mcp/mock_server.py +0 -0
  676. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/mcp/test_keepalive_concurrency.py +0 -0
  677. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/mcp/test_keepalive_config.py +0 -0
  678. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/mcp/test_keepalive_logging.py +0 -0
  679. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/mcp/test_keepalive_unit.py +0 -0
  680. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/scrape/test_playwright_disable.py +0 -0
  681. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/scrape/test_scrape.py +0 -0
  682. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/subagents/__init__.py +0 -0
  683. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/subagents/conftest.py +0 -0
  684. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/subagents/test_commands.py +0 -0
  685. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/subagents/test_config.py +0 -0
  686. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/subagents/test_delegate.py +0 -0
  687. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/subagents/test_finished.py +0 -0
  688. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/subagents/test_io_proxy.py +0 -0
  689. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/subagents/test_service.py +0 -0
  690. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/subagents/test_sub_agent_coder.py +0 -0
  691. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/test_requests.py +0 -0
  692. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/tools/test_extractions.py +0 -0
  693. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/tools/test_get_lines.py +0 -0
  694. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/tools/test_git_branch.py +0 -0
  695. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/tools/test_git_diff.py +0 -0
  696. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/tools/test_grep.py +0 -0
  697. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/tools/test_insert_block.py +0 -0
  698. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/tools/test_read_range_execute.py +0 -0
  699. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/tools/test_registry.py +0 -0
  700. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/tools/test_remove_mcp_tool.py +0 -0
  701. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/tools/test_tool_arguments.py +0 -0
  702. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/tools/test_tools_load_mcp_tool.py +0 -0
  703. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/tools/validations.py +0 -0
  704. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/tui/test_app.py +0 -0
  705. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/unit/test_load_mcp.py +0 -0
  706. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/unit/test_remove_mcp.py +0 -0
  707. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/tests/unit/test_unit_load_mcp_tool.py +0 -0
  708. {cecli_dev-0.100.12rc5 → cecli_dev-0.100.14}/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: 0.100.12rc5
3
+ Version: 0.100.14
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"
@@ -26,6 +26,13 @@ without any human review or supervision! The LLM could generate dangerous python
26
26
  that harms your system, like this: `import os; os.system("sudo rm -rf /")`.
27
27
  Running inside a docker container helps limit the damage that could be done.
28
28
 
29
+ The current harness (`benchmark.py`) organizes the exercises as "Cats": each
30
+ exercise carries `cat.yaml` metadata, enabling per-test selection and
31
+ deterministic subsets (e.g. `--hash-re '^0'`) for spot-checking models. The
32
+ canonical exercises source is
33
+ [ErichBSchulz/cecli-cats](https://github.com/ErichBSchulz/cecli-cats), a
34
+ Cats-formatted conversion of the polyglot benchmark.
35
+
29
36
  ## Usage
30
37
 
31
38
  There are 3 main tasks involved in benchmarking:
@@ -41,8 +48,8 @@ There are 3 main tasks involved in benchmarking:
41
48
  These steps only need to be done once.
42
49
 
43
50
  ```
44
- ORG=Aider-AI
45
- REPO=aider
51
+ ORG=cecli-dev
52
+ REPO=cecli
46
53
  # Clone the main repo
47
54
  git clone https://github.com/$ORG/$REPO.git
48
55
 
@@ -50,8 +57,9 @@ git clone https://github.com/$ORG/$REPO.git
50
57
  cd $REPO
51
58
  mkdir tmp.benchmarks
52
59
 
53
- # Clone the repo with the exercises
54
- git clone https://github.com/$ORG/polyglot-benchmark tmp.benchmarks/polyglot-benchmark
60
+ # Clone the canonical exercises source for the Cats harness
61
+ git clone https://github.com/ErichBSchulz/cecli-cats tmp.benchmarks/cecli-cats
62
+
55
63
 
56
64
  # Build the docker container
57
65
  ./benchmark/docker_build.sh
@@ -69,10 +77,10 @@ Launch the docker container and run the benchmark inside it:
69
77
  ./benchmark/docker.sh
70
78
 
71
79
  # Run the benchmark:
72
- ./benchmark/benchmark.py a-helpful-name-for-this-run --model gpt-3.5-turbo --edit-format whole --threads 10 --exercises-dir polyglot-benchmark
80
+ ./benchmark/benchmark.py a-helpful-name-for-this-run --model gpt-3.5-turbo --edit-format whole --threads 10 --exercises-dir cecli-cats
73
81
 
74
82
  # Or with OpenRouter models (requires OPENROUTER_API_KEY environment variable):
75
- ./benchmark/benchmark.py openrouter-run --model openrouter/deepseek/deepseek-r1:free --edit-format whole --threads 10 --exercises-dir polyglot-benchmark
83
+ ./benchmark/benchmark.py openrouter-run --model openrouter/deepseek/deepseek-r1:free --edit-format whole --threads 10 --exercises-dir cecli-cats
76
84
  ```
77
85
 
78
86
  The above will create a folder
@@ -156,6 +164,7 @@ Note the roadmap priorities:
156
164
 
157
165
  ## Limitations
158
166
 
167
+ - `benchmark_classic.py` is deprecated (it predates the async Coder API).
159
168
  - These scripts are not intended for use by typical `cecli` end users.
160
169
  - Some of the old (?deprecated) tools are written as `bash` scripts, so it will be hard to use
161
170
  them on Windows.
@@ -1,6 +1,6 @@
1
1
  from packaging import version
2
2
 
3
- __version__ = "0.100.11.dev"
3
+ __version__ = "0.100.14.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.12rc5'
22
- __version_tuple__ = version_tuple = (0, 100, 12, 'rc5')
21
+ __version__ = version = '0.100.14'
22
+ __version_tuple__ = version_tuple = (0, 100, 14)
23
23
 
24
- __commit_id__ = commit_id = 'g7a6568913'
24
+ __commit_id__ = commit_id = 'gd2fa11692'
@@ -598,6 +598,12 @@ def get_parser(default_config_files, git_root):
598
598
  default=True,
599
599
  help="Enable/disable streaming responses (default: True)",
600
600
  )
601
+ group.add_argument(
602
+ "--spinner",
603
+ action=argparse.BooleanOptionalAction,
604
+ default=True,
605
+ help="Enable/disable the spinner while waiting for LLM responses (default: True)",
606
+ )
601
607
  group.add_argument(
602
608
  "--user-input-color",
603
609
  default="#00cc00",
@@ -305,6 +305,25 @@ class AgentCoder(Coder):
305
305
  call_result = await litellm.experimental_mcp_client.call_openai_tool(
306
306
  session=session, openai_tool=tool_call_dict
307
307
  )
308
+ except Exception as e:
309
+ if server.is_session_expired_error(e):
310
+ try:
311
+ session = await server.reconnect()
312
+ call_result = await litellm.experimental_mcp_client.call_openai_tool(
313
+ session=session, openai_tool=tool_call_dict
314
+ )
315
+ except Exception as retry_exc:
316
+ self.io.tool_warning(
317
+ f"Executing {tool_name} on {server.name} failed after reconnect:\n"
318
+ f"Error: {retry_exc}"
319
+ )
320
+ return f"Error executing tool call {tool_name}: {retry_exc}"
321
+ else:
322
+ self.io.tool_warning(
323
+ f"Executing {tool_name} on {server.name} failed:\nError: {e}"
324
+ )
325
+ return f"Error executing tool call {tool_name}: {e}"
326
+ try:
308
327
  content_parts = []
309
328
  if call_result.content:
310
329
  for item in call_result.content:
@@ -829,7 +848,7 @@ class AgentCoder(Coder):
829
848
  if lint_errors:
830
849
  lint_errors = lint_errors.replace(
831
850
  "# Fix any linting errors below, if possible.",
832
- "# Fix any linting errors below, if possible and then continue with your task.",
851
+ "# Fix the linting errors below, and then continue with your task.",
833
852
  1,
834
853
  )
835
854
  ConversationService.get_manager(self).add_message(
@@ -221,6 +221,7 @@ class Coder(metaclass=UsageMeta):
221
221
  message_tokens_sent = 0
222
222
  message_tokens_received = 0
223
223
  message_cached_tokens = 0
224
+ message_cost_deferred = None
224
225
  add_cache_headers = False
225
226
  cache_warming_thread = None
226
227
  num_cache_warming_pings = 0
@@ -1497,6 +1498,10 @@ class Coder(metaclass=UsageMeta):
1497
1498
  self.show_announcements()
1498
1499
  self.suppress_announcements_for_next_prompt = True
1499
1500
 
1501
+ if self.message_cost_deferred and not self.io.spinner_active:
1502
+ self.io.tool_output(self.message_cost_deferred)
1503
+ self.message_cost_deferred = None
1504
+
1500
1505
  await self.io.recreate_input()
1501
1506
  await self.io.input_task
1502
1507
  user_message = self.io.input_task.result()
@@ -1645,6 +1650,10 @@ class Coder(metaclass=UsageMeta):
1645
1650
  self.show_announcements()
1646
1651
  self.suppress_announcements_for_next_prompt = True
1647
1652
 
1653
+ if self.message_cost_deferred and not self.io.spinner_active:
1654
+ self.io.tool_output(self.message_cost_deferred)
1655
+ self.message_cost_deferred = None
1656
+
1648
1657
  # Stop spinner before showing announcements or getting input
1649
1658
  self.io.stop_spinner()
1650
1659
  self.copy_context()
@@ -1733,7 +1742,27 @@ class Coder(metaclass=UsageMeta):
1733
1742
  # Compacting is wasteful since /clear will clear everything
1734
1743
  # and /exit will exit the application
1735
1744
  stripped = user_message.strip()
1736
- if stripped not in ("/clear", "/reset", "/exit", "/quit"):
1745
+ is_command = self.commands.is_command(stripped)
1746
+ is_allowed_command = False
1747
+
1748
+ if is_command:
1749
+ res = self.commands.matching_commands(user_message)
1750
+ if res is not None:
1751
+ matching_commands, first_word, rest_inp = res
1752
+ if len(matching_commands) == 1:
1753
+ command = matching_commands[0]
1754
+ splits = (rest_inp or "").split()
1755
+ split_map = {
1756
+ "/agent": 1,
1757
+ "/architect": 1,
1758
+ "/ask": 1,
1759
+ "/code": 1,
1760
+ "/model": 2,
1761
+ }
1762
+ if command in split_map and len(splits) >= split_map.get(command, 0):
1763
+ is_allowed_command = True
1764
+
1765
+ if not is_command or is_allowed_command:
1737
1766
  self.compact_context_completed = False
1738
1767
  await self.compact_context_if_needed()
1739
1768
  self.compact_context_completed = True
@@ -1977,27 +2006,34 @@ class Coder(metaclass=UsageMeta):
1977
2006
  done_messages = manager.get_messages_dict(MessageTag.DONE)
1978
2007
  cur_messages = manager.get_messages_dict(MessageTag.CUR)
1979
2008
  diff_messages = manager.get_messages_dict(MessageTag.DIFFS)
2009
+ file_context_messages = manager.get_messages_dict(MessageTag.FILE_CONTEXTS)
1980
2010
  all_messages = manager.get_messages_dict()
1981
2011
 
1982
2012
  # Exclude first cur_message since that's the user's initial input
1983
2013
  done_tokens = self.summarizer.count_tokens(done_messages)
1984
2014
  cur_tokens = self.summarizer.count_tokens(cur_messages[1:] if len(cur_messages) > 1 else [])
1985
2015
  diff_tokens = self.summarizer.count_tokens(diff_messages)
2016
+ file_context_tokens = self.summarizer.count_tokens(file_context_messages)
1986
2017
  all_tokens = self.summarizer.count_tokens(all_messages)
1987
2018
 
1988
- combined_tokens = done_tokens + cur_tokens + diff_tokens
2019
+ message_tokens = done_tokens + cur_tokens
2020
+ file_tokens = diff_tokens + file_context_tokens
2021
+ combined_tokens = done_tokens + cur_tokens + diff_tokens + file_context_tokens
1989
2022
 
1990
2023
  self.context_compaction_current_ratio = all_tokens / self.context_compaction_max_tokens
1991
2024
 
1992
2025
  if force or (
1993
2026
  all_tokens >= self.context_compaction_max_tokens * 0.9
1994
2027
  and ConversationService.get_chunks(self).last_clear_count > 20
2028
+ and file_tokens / max(message_tokens, 1) > 2
1995
2029
  ):
1996
2030
  manager.clear_tag(MessageTag.LINT, ratio=0.33)
1997
2031
  manager.clear_tag(MessageTag.DIFFS, ratio=0.33)
1998
2032
  manager.clear_tag(MessageTag.FILE_CONTEXTS, ratio=0.33)
1999
2033
  ConversationService.get_files(self).clear_file_cache()
2000
2034
  ConversationService.get_chunks(self).flush_removals()
2035
+ ConversationService.get_chunks(self).reset_clear_count()
2036
+ ObservationService.get_instance(self).reset_index()
2001
2037
 
2002
2038
  if not force and combined_tokens < self.context_compaction_max_tokens:
2003
2039
  return
@@ -2031,9 +2067,9 @@ class Coder(metaclass=UsageMeta):
2031
2067
  manager.clear_tag(tag)
2032
2068
 
2033
2069
  if tag == MessageTag.DONE:
2034
- manager.add_message({"role": "user", "content": text}, tag=tag)
2035
- manager.add_message(
2036
- {
2070
+ manager.queue_message(message_dict={"role": "user", "content": text}, tag=tag)
2071
+ manager.queue_message(
2072
+ message_dict={
2037
2073
  "role": "assistant",
2038
2074
  "content": (
2039
2075
  "Ok, I will use this summary and the observations as context for"
@@ -2044,12 +2080,13 @@ class Coder(metaclass=UsageMeta):
2044
2080
  )
2045
2081
  else:
2046
2082
  if self.last_user_message:
2047
- manager.add_message(
2048
- {"role": "user", "content": self.last_user_message}, tag=tag
2083
+ manager.queue_message(
2084
+ message_dict={"role": "user", "content": self.last_user_message},
2085
+ tag=tag,
2049
2086
  )
2050
2087
 
2051
- manager.add_message(
2052
- {
2088
+ manager.queue_message(
2089
+ message_dict={
2053
2090
  "role": "assistant",
2054
2091
  "content": "Ok. I am awaiting your summary of our goals to proceed.",
2055
2092
  },
@@ -2057,8 +2094,8 @@ class Coder(metaclass=UsageMeta):
2057
2094
  force=True,
2058
2095
  )
2059
2096
 
2060
- manager.add_message(
2061
- {
2097
+ manager.queue_message(
2098
+ message_dict={
2062
2099
  "role": "user",
2063
2100
  "content": (
2064
2101
  "Here is a summary of our current goals and historical"
@@ -2068,8 +2105,8 @@ class Coder(metaclass=UsageMeta):
2068
2105
  tag=tag,
2069
2106
  )
2070
2107
 
2071
- manager.add_message(
2072
- {
2108
+ manager.queue_message(
2109
+ message_dict={
2073
2110
  "role": "assistant",
2074
2111
  "content": (
2075
2112
  "Ok, I will use this summary and proceed with our task. I will"
@@ -2102,6 +2139,9 @@ class Coder(metaclass=UsageMeta):
2102
2139
  manager.clear_tag(MessageTag.FILE_CONTEXTS)
2103
2140
  ConversationService.get_files(self).clear_file_cache()
2104
2141
  ConversationService.get_chunks(self).flush_removals()
2142
+ ConversationService.get_chunks(self).reset_clear_count()
2143
+ ObservationService.get_instance(self).reset_index()
2144
+ self.format_chat_chunks()
2105
2145
 
2106
2146
  except Exception as e:
2107
2147
  self.io.tool_warning(f"Context compaction failed: {e}")
@@ -2481,7 +2521,11 @@ class Coder(metaclass=UsageMeta):
2481
2521
  if not self.tui:
2482
2522
  spinner_text += f" • ${self.format_cost(self.total_cost)} session"
2483
2523
 
2484
- self.io.start_spinner(spinner_text, coder_uuid=getattr(self, "uuid", None))
2524
+ if self.io.spinner_active:
2525
+ self.io.start_spinner(spinner_text, coder_uuid=getattr(self, "uuid", None))
2526
+ else:
2527
+ self.message_cost_deferred = spinner_text
2528
+
2485
2529
  if self.stream:
2486
2530
  self.mdstream = True
2487
2531
  else:
@@ -2604,6 +2648,10 @@ class Coder(metaclass=UsageMeta):
2604
2648
 
2605
2649
  # Ensure any waiting spinner is stopped
2606
2650
  self.io.start_spinner("Processing Answer...", coder_uuid=getattr(self, "uuid", None))
2651
+
2652
+ if not self.io.spinner_active:
2653
+ self.partial_response_content = self.get_multi_response_content_in_progress(True)
2654
+
2607
2655
  self.remove_reasoning_content()
2608
2656
  self.multi_response_content = ""
2609
2657
 
@@ -2949,12 +2997,22 @@ class Coder(metaclass=UsageMeta):
2949
2997
  continue
2950
2998
 
2951
2999
  async def do_tool_call():
3000
+ nonlocal session
2952
3001
  from litellm import experimental_mcp_client
2953
3002
 
2954
- return await experimental_mcp_client.call_openai_tool(
2955
- session=session,
2956
- openai_tool=new_tool_call,
2957
- )
3003
+ try:
3004
+ return await experimental_mcp_client.call_openai_tool(
3005
+ session=session,
3006
+ openai_tool=new_tool_call,
3007
+ )
3008
+ except Exception as e:
3009
+ if server.is_session_expired_error(e):
3010
+ session = await server.reconnect()
3011
+ return await experimental_mcp_client.call_openai_tool(
3012
+ session=session,
3013
+ openai_tool=new_tool_call,
3014
+ )
3015
+ raise
2958
3016
 
2959
3017
  call_result, interrupted = await coroutines.interruptible(
2960
3018
  do_tool_call(), self.interrupt_event
@@ -8,6 +8,7 @@ BaseCommand pattern for modular, testable command execution.
8
8
  from .add import AddCommand
9
9
  from .agent import AgentCommand
10
10
  from .agent_model import AgentModelCommand
11
+ from .agent_tree import AgentTreeCommand
11
12
  from .architect import ArchitectCommand
12
13
  from .ask import AskCommand
13
14
  from .clear import ClearCommand
@@ -94,6 +95,7 @@ from .workspace import WorkspaceCommand
94
95
  CommandRegistry.register(AddCommand)
95
96
  CommandRegistry.register(AgentCommand)
96
97
  CommandRegistry.register(AgentModelCommand)
98
+ CommandRegistry.register(AgentTreeCommand)
97
99
  CommandRegistry.register(ArchitectCommand)
98
100
  CommandRegistry.register(AskCommand)
99
101
  CommandRegistry.register(ClearCommand)
@@ -169,6 +171,7 @@ __all__ = [
169
171
  "AddCommand",
170
172
  "AgentCommand",
171
173
  "AgentModelCommand",
174
+ "AgentTreeCommand",
172
175
  "ArchitectCommand",
173
176
  "AskCommand",
174
177
  "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)
@@ -245,62 +245,7 @@ class ConversationChunks:
245
245
  if not coder:
246
246
  return
247
247
 
248
- # Check diff message ratio and clear if too many diffs
249
- diff_messages = ConversationService.get_manager(coder).get_messages_dict(MessageTag.DIFFS)
250
- read_only_messages = ConversationService.get_manager(coder).get_messages_dict(
251
- MessageTag.READONLY_FILES
252
- )
253
- chat_messages = ConversationService.get_manager(coder).get_messages_dict(
254
- MessageTag.CHAT_FILES
255
- )
256
- edit_messages = ConversationService.get_manager(coder).get_messages_dict(
257
- MessageTag.EDIT_FILES
258
- )
259
-
260
- # Calculate token counts for token-based ratio check
261
- diff_tokens = coder.main_model.token_count(diff_messages) if diff_messages else 0
262
-
263
- # Calculate tokens for readonly, chat, and edit tag messages
264
- other_tokens = 0
265
- if read_only_messages:
266
- other_tokens += coder.main_model.token_count(read_only_messages)
267
- if chat_messages:
268
- other_tokens += coder.main_model.token_count(chat_messages)
269
- if edit_messages:
270
- other_tokens += coder.main_model.token_count(edit_messages)
271
-
272
- # Calculate message counts for message-based ratio check
273
- diff_count = len(diff_messages)
274
- other_count = len(read_only_messages) + len(chat_messages) + len(edit_messages)
275
-
276
- # Clear diff messages and file caches if EITHER:
277
- # 1. Diff tokens > 33% of other message tokens (token-based check)
278
- # 2. Diff message count ratio > 5:1 (message count-based check for periodic refresh)
279
- should_clear = False
280
-
281
- # Token-based check
282
- if diff_tokens > 0 and other_tokens > 0 and diff_tokens / other_tokens > 0.5:
283
- should_clear = True
284
-
285
- # Message count-based check (for periodic refresh)
286
- if diff_count > 0 and other_count > 0 and diff_count / other_count > 20:
287
- should_clear = True
288
-
289
248
  self.last_clear_count += 1
290
-
291
- if (
292
- should_clear
293
- and coder.context_compaction_current_ratio > 0.8
294
- and self.last_clear_count >= 20
295
- and diff_tokens + other_tokens > coder.context_compaction_max_tokens * 0.5
296
- ):
297
- self.last_clear_count = 0
298
-
299
- # Clear all diff messages
300
- ConversationService.get_manager(coder).clear_tag(MessageTag.DIFFS, 0.33)
301
- # Clear ConversationFiles caches to force regeneration
302
- ConversationService.get_files(coder).clear_file_cache(clear_contexts=False)
303
-
304
249
  # Get all tracked files (both regular and image files)
305
250
  tracked_files = ConversationService.get_files(coder).get_all_tracked_files()
306
251
 
@@ -483,7 +428,7 @@ class ConversationChunks:
483
428
  repo_messages = ConversationService.get_manager(coder).get_messages_dict(MessageTag.REPO)
484
429
  if len(repo_messages) >= 20:
485
430
  # Clear all REPO tagged messages
486
- ConversationService.get_manager(coder).clear_tag(MessageTag.REPO)
431
+ ConversationService.get_manager(coder).clear_tag(MessageTag.REPO, ratio=0.33)
487
432
  # Clear the combined repomap dict to force fresh regeneration
488
433
  if (
489
434
  hasattr(coder, "repo_map")
@@ -1017,6 +962,9 @@ class ConversationChunks:
1017
962
  def flush_removals(self):
1018
963
  self._deferred_removals.clear()
1019
964
 
965
+ def reset_clear_count(self):
966
+ self.last_clear_count = 0
967
+
1020
968
  def _cancel_post_message_injections(self, modulus=10):
1021
969
  coder = self.get_coder()
1022
970
  if not coder:
@@ -320,6 +320,16 @@ def resolve_content_to_hashline_ids(
320
320
  value_stripped = value.strip()
321
321
  return [i for i, line in enumerate(lines) if value_stripped in line]
322
322
 
323
+ def _find_multiline_match(lines, value):
324
+ """Find the start index where the full multiline value matches consecutive lines."""
325
+ value_lines = value.strip().splitlines()
326
+ if len(value_lines) <= 1:
327
+ return None
328
+ for i in range(len(lines) - len(value_lines) + 1):
329
+ if all(value_lines[j].strip() in lines[i + j] for j in range(len(value_lines))):
330
+ return i
331
+ return None
332
+
323
333
  def _resolve_to_hash_id(lines, idx, hp):
324
334
  """Generate a hash ID for the line at the given index."""
325
335
  hash_id = hp.generate_public_id(lines[idx], idx)
@@ -333,10 +343,18 @@ def resolve_content_to_hashline_ids(
333
343
  resolved_start_idx = None
334
344
 
335
345
  if start_value is not None and not _looks_like_content_id(start_value):
336
- containing_indices = _find_substring_matches(lines, start_value)
337
- if len(containing_indices) == 1:
338
- resolved_start_idx = containing_indices[0]
346
+ # For multiline values, try full multiline match first
347
+ first_line = start_value.splitlines()[0] if start_value.splitlines() else start_value
348
+ multiline_start_idx = _find_multiline_match(lines, start_value)
349
+ if multiline_start_idx is not None:
350
+ resolved_start_idx = multiline_start_idx
339
351
  resolved_start = _resolve_to_hash_id(lines, resolved_start_idx, hp)
352
+ else:
353
+ # Fall back to first line substring matching
354
+ containing_indices = _find_substring_matches(lines, first_line)
355
+ if len(containing_indices) == 1:
356
+ resolved_start_idx = containing_indices[0]
357
+ resolved_start = _resolve_to_hash_id(lines, resolved_start_idx, hp)
340
358
  elif start_value is not None and _looks_like_content_id(start_value):
341
359
  # Already a content ID - try to resolve it to find the line position
342
360
  # for proximity matching with end_value
@@ -352,18 +370,26 @@ def resolve_content_to_hashline_ids(
352
370
  resolved_end = end_value
353
371
 
354
372
  if end_value is not None and not _looks_like_content_id(end_value):
355
- containing_indices = _find_substring_matches(lines, end_value)
356
- if len(containing_indices) == 1:
357
- # Unique match - resolve directly
358
- idx = containing_indices[0]
373
+ # For multiline values, try full multiline match first
374
+ first_line = end_value.splitlines()[0] if end_value.splitlines() else end_value
375
+ multiline_end_idx = _find_multiline_match(lines, end_value)
376
+ if multiline_end_idx is not None:
377
+ idx = multiline_end_idx
359
378
  resolved_end = _resolve_to_hash_id(lines, idx, hp)
360
- elif len(containing_indices) > 1 and resolved_start_idx is not None:
361
- # Multiple matches - pick closest to start position
362
- closest_idx = min(
363
- containing_indices,
364
- key=lambda idx: abs(idx - resolved_start_idx),
365
- )
366
- resolved_end = _resolve_to_hash_id(lines, closest_idx, hp)
379
+ else:
380
+ # Fall back to first line substring matching
381
+ containing_indices = _find_substring_matches(lines, first_line)
382
+ if len(containing_indices) == 1:
383
+ # Unique match - resolve directly
384
+ idx = containing_indices[0]
385
+ resolved_end = _resolve_to_hash_id(lines, idx, hp)
386
+ elif len(containing_indices) > 1 and resolved_start_idx is not None:
387
+ # Multiple matches - pick closest to start position
388
+ closest_idx = min(
389
+ containing_indices,
390
+ key=lambda idx: abs(idx - resolved_start_idx),
391
+ )
392
+ resolved_end = _resolve_to_hash_id(lines, closest_idx, hp)
367
393
 
368
394
  return resolved_start, resolved_end
369
395