cecli-dev 0.99.1__tar.gz → 0.99.2__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 (613) hide show
  1. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/PKG-INFO +1 -1
  2. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/__init__.py +1 -1
  3. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/_version.py +3 -3
  4. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/agent_coder.py +2 -2
  5. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/base_coder.py +31 -8
  6. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/monorepo/project.py +1 -0
  7. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/monorepo/workspace.py +11 -0
  8. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/skills.py +33 -1
  9. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/io.py +25 -13
  10. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/main.py +1 -1
  11. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/agent.yml +12 -13
  12. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/base.yml +1 -1
  13. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/repo.py +105 -12
  14. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/resources/model-metadata.json +1343 -195
  15. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/utils/base_tool.py +3 -1
  16. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/agent-mode.md +1 -0
  17. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/skills.md +113 -6
  18. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/workspaces.md +1 -0
  19. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli_dev.egg-info/PKG-INFO +1 -1
  20. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli_dev.egg-info/SOURCES.txt +1 -0
  21. cecli_dev-0.99.2/tests/helpers/monorepo/test_ignore_logic.py +103 -0
  22. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.dockerignore +0 -0
  23. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.flake8 +0 -0
  24. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.gitattributes +0 -0
  25. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  26. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/check_pypi_version.yml +0 -0
  27. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/docker-build-test.yml +0 -0
  28. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/docker-release.yml +0 -0
  29. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/issues.yml +0 -0
  30. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/pages.yml +0 -0
  31. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/pre-commit.yml +0 -0
  32. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/release.yml +0 -0
  33. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/ubuntu-tests.yml +0 -0
  34. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/windows-tests.yml +0 -0
  35. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/windows_check_pypi_version.yml +0 -0
  36. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.gitignore +0 -0
  37. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.pre-commit-config.yaml +0 -0
  38. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/CHANGELOG.md +0 -0
  39. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/CNAME +0 -0
  40. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/CONTRIBUTING.md +0 -0
  41. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/HISTORY.md +0 -0
  42. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/LICENSE.txt +0 -0
  43. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/MANIFEST.in +0 -0
  44. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/README.md +0 -0
  45. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/Dockerfile +0 -0
  46. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/README.md +0 -0
  47. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/__init__.py +0 -0
  48. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/benchmark.py +0 -0
  49. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/benchmark_classic.py +0 -0
  50. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/clone-exercism.sh +0 -0
  51. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/cpp-test.sh +0 -0
  52. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/docker.sh +0 -0
  53. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/docker_build.sh +0 -0
  54. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/install-docker-ubuntu.sh +0 -0
  55. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/npm-test.sh +0 -0
  56. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/over_time.py +0 -0
  57. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/plot.sh +0 -0
  58. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/plots.py +0 -0
  59. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/problem_stats.py +0 -0
  60. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/prompts.py +0 -0
  61. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/refactor_tools.py +0 -0
  62. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/rsync.sh +0 -0
  63. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/rungrid.py +0 -0
  64. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/swe-bench-lite.txt +0 -0
  65. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/swe-bench.txt +0 -0
  66. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/swe_bench.py +0 -0
  67. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/test_benchmark.py +0 -0
  68. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/variations.1.sh +0 -0
  69. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/variations.2.sh +0 -0
  70. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/variations.3.sh +0 -0
  71. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/variations.4.sh +0 -0
  72. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/__main__.py +0 -0
  73. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/args.py +0 -0
  74. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/args_formatter.py +0 -0
  75. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/change_tracker.py +0 -0
  76. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/__init__.py +0 -0
  77. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/architect_coder.py +0 -0
  78. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/ask_coder.py +0 -0
  79. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/chat_chunks.py +0 -0
  80. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/context_coder.py +0 -0
  81. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/copypaste_coder.py +0 -0
  82. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/editblock_coder.py +0 -0
  83. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/editblock_fenced_coder.py +0 -0
  84. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/editblock_func_coder.py +0 -0
  85. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/editor_diff_fenced_coder.py +0 -0
  86. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/editor_editblock_coder.py +0 -0
  87. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/editor_whole_coder.py +0 -0
  88. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/hashline_coder.py +0 -0
  89. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/help_coder.py +0 -0
  90. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/patch_coder.py +0 -0
  91. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/search_replace.py +0 -0
  92. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/shell.py +0 -0
  93. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/single_wholefile_func_coder.py +0 -0
  94. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/udiff_coder.py +0 -0
  95. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/udiff_simple.py +0 -0
  96. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/wholefile_coder.py +0 -0
  97. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/wholefile_func_coder.py +0 -0
  98. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/__init__.py +0 -0
  99. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/add.py +0 -0
  100. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/agent.py +0 -0
  101. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/agent_model.py +0 -0
  102. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/architect.py +0 -0
  103. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/ask.py +0 -0
  104. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/chat_mode.py +0 -0
  105. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/clear.py +0 -0
  106. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/code.py +0 -0
  107. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/command_prefix.py +0 -0
  108. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/commit.py +0 -0
  109. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/compact.py +0 -0
  110. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/context.py +0 -0
  111. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/context_blocks.py +0 -0
  112. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/context_management.py +0 -0
  113. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/copy.py +0 -0
  114. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/copy_context.py +0 -0
  115. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/core.py +0 -0
  116. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/diff.py +0 -0
  117. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/drop.py +0 -0
  118. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/editor.py +0 -0
  119. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/editor_model.py +0 -0
  120. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/exit.py +0 -0
  121. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/git.py +0 -0
  122. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/hashline.py +0 -0
  123. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/help.py +0 -0
  124. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/history_search.py +0 -0
  125. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/hooks.py +0 -0
  126. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/lint.py +0 -0
  127. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/list_sessions.py +0 -0
  128. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/load.py +0 -0
  129. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/load_hook.py +0 -0
  130. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/load_mcp.py +0 -0
  131. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/load_session.py +0 -0
  132. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/load_skill.py +0 -0
  133. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/ls.py +0 -0
  134. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/map.py +0 -0
  135. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/map_refresh.py +0 -0
  136. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/model.py +0 -0
  137. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/models.py +0 -0
  138. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/multiline_mode.py +0 -0
  139. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/paste.py +0 -0
  140. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/quit.py +0 -0
  141. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/read_only.py +0 -0
  142. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/read_only_stub.py +0 -0
  143. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/reasoning_effort.py +0 -0
  144. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/remove_hook.py +0 -0
  145. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/remove_mcp.py +0 -0
  146. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/remove_skill.py +0 -0
  147. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/report.py +0 -0
  148. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/reset.py +0 -0
  149. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/rules.py +0 -0
  150. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/run.py +0 -0
  151. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/save.py +0 -0
  152. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/save_session.py +0 -0
  153. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/settings.py +0 -0
  154. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/terminal_data/linux.keytab +0 -0
  155. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/terminal_setup.py +0 -0
  156. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/test.py +0 -0
  157. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/think_tokens.py +0 -0
  158. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/tokens.py +0 -0
  159. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/undo.py +0 -0
  160. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/utils/__init__.py +0 -0
  161. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/utils/base_command.py +0 -0
  162. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/utils/helpers.py +0 -0
  163. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/utils/registry.py +0 -0
  164. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/utils/save_load_manager.py +0 -0
  165. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/voice.py +0 -0
  166. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/weak_model.py +0 -0
  167. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/web.py +0 -0
  168. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/workspace.py +0 -0
  169. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/deprecated_args.py +0 -0
  170. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/diffs.py +0 -0
  171. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/dump.py +0 -0
  172. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/editor.py +0 -0
  173. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/exceptions.py +0 -0
  174. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/format_settings.py +0 -0
  175. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/help.py +0 -0
  176. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/help_pats.py +0 -0
  177. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/__init__.py +0 -0
  178. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/background_commands.py +0 -0
  179. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/command_parser.py +0 -0
  180. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/conversation/__init__.py +0 -0
  181. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/conversation/base_message.py +0 -0
  182. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/conversation/files.py +0 -0
  183. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/conversation/integration.py +0 -0
  184. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/conversation/manager.py +0 -0
  185. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/conversation/service.py +0 -0
  186. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/conversation/tags.py +0 -0
  187. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/conversation/utils.py +0 -0
  188. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/copypaste.py +0 -0
  189. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/coroutines.py +0 -0
  190. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/file_searcher.py +0 -0
  191. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/hashline.py +0 -0
  192. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/hashpos/__init__.py +0 -0
  193. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/hashpos/hashpos.py +0 -0
  194. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/model_providers.py +0 -0
  195. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/monorepo/__init__.py +0 -0
  196. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/monorepo/config.py +0 -0
  197. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/monorepo/worktree.py +0 -0
  198. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/nested.py +0 -0
  199. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/plugin_manager.py +0 -0
  200. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/profiler.py +0 -0
  201. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/requests.py +0 -0
  202. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/responses.py +0 -0
  203. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/similarity.py +0 -0
  204. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/history.py +0 -0
  205. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/hooks/__init__.py +0 -0
  206. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/hooks/base.py +0 -0
  207. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/hooks/integration.py +0 -0
  208. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/hooks/manager.py +0 -0
  209. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/hooks/registry.py +0 -0
  210. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/hooks/types.py +0 -0
  211. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/interruptible_input.py +0 -0
  212. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/linter.py +0 -0
  213. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/llm.py +0 -0
  214. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/mcp/__init__.py +0 -0
  215. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/mcp/manager.py +0 -0
  216. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/mcp/oauth.py +0 -0
  217. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/mcp/server.py +0 -0
  218. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/mcp/utils.py +0 -0
  219. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/mdstream.py +0 -0
  220. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/models.py +0 -0
  221. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/onboarding.py +0 -0
  222. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/__init__.py +0 -0
  223. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/architect.yml +0 -0
  224. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/ask.yml +0 -0
  225. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/context.yml +0 -0
  226. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/copypaste.yml +0 -0
  227. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/editblock.yml +0 -0
  228. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/editblock_fenced.yml +0 -0
  229. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/editblock_func.yml +0 -0
  230. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/editor_diff_fenced.yml +0 -0
  231. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/editor_editblock.yml +0 -0
  232. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/editor_whole.yml +0 -0
  233. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/hashline.yml +0 -0
  234. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/help.yml +0 -0
  235. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/patch.yml +0 -0
  236. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/single_wholefile_func.yml +0 -0
  237. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/udiff.yml +0 -0
  238. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/udiff_simple.yml +0 -0
  239. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/utils/__init__.py +0 -0
  240. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/utils/registry.py +0 -0
  241. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/utils/system.py +0 -0
  242. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/wholefile.yml +0 -0
  243. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/wholefile_func.yml +0 -0
  244. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
  245. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  246. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  247. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  248. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
  249. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  250. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  251. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  252. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  253. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  254. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  255. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  256. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  257. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  258. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  259. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  260. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  261. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  262. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
  263. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
  264. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
  265. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  266. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  267. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  268. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  269. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  270. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  271. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  272. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  273. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  274. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  275. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/README.md +0 -0
  276. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
  277. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  278. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  279. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
  280. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  281. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  282. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
  283. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
  284. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
  285. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
  286. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  287. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
  288. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  289. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
  290. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  291. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
  292. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  293. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
  294. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
  295. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
  296. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
  297. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  298. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
  299. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
  300. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  301. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
  302. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/reasoning_tags.py +0 -0
  303. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/repomap.py +0 -0
  304. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/report.py +0 -0
  305. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/resources/__init__.py +0 -0
  306. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/resources/model-settings.yml +0 -0
  307. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/resources/providers.json +0 -0
  308. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/run_cmd.py +0 -0
  309. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/scrape.py +0 -0
  310. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/sendchat.py +0 -0
  311. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/sessions.py +0 -0
  312. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/special.py +0 -0
  313. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/__init__.py +0 -0
  314. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/command.py +0 -0
  315. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/command_interactive.py +0 -0
  316. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/context_manager.py +0 -0
  317. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/delete_text.py +0 -0
  318. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/finished.py +0 -0
  319. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/git_branch.py +0 -0
  320. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/git_diff.py +0 -0
  321. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/git_log.py +0 -0
  322. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/git_remote.py +0 -0
  323. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/git_show.py +0 -0
  324. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/git_status.py +0 -0
  325. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/grep.py +0 -0
  326. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/insert_text.py +0 -0
  327. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/list_changes.py +0 -0
  328. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/load_skill.py +0 -0
  329. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/ls.py +0 -0
  330. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/remove_skill.py +0 -0
  331. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/replace_text.py +0 -0
  332. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/show_context.py +0 -0
  333. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/thinking.py +0 -0
  334. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/undo_change.py +0 -0
  335. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/update_todo_list.py +0 -0
  336. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/utils/helpers.py +0 -0
  337. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/utils/output.py +0 -0
  338. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/utils/registry.py +0 -0
  339. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/view_files_matching.py +0 -0
  340. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/view_files_with_symbol.py +0 -0
  341. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/__init__.py +0 -0
  342. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/app.py +0 -0
  343. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/io.py +0 -0
  344. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/styles.tcss +0 -0
  345. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/__init__.py +0 -0
  346. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/completion_bar.py +0 -0
  347. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/file_list.py +0 -0
  348. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/footer.py +0 -0
  349. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/input_area.py +0 -0
  350. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/input_container.py +0 -0
  351. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/key_hints.py +0 -0
  352. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/output.py +0 -0
  353. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/status_bar.py +0 -0
  354. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/worker.py +0 -0
  355. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/urls.py +0 -0
  356. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/utils.py +0 -0
  357. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/versioncheck.py +0 -0
  358. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/voice.py +0 -0
  359. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/waiting.py +0 -0
  360. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/watch.py +0 -0
  361. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/watch_prompts.py +0 -0
  362. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/Gemfile +0 -0
  363. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/blame.md +0 -0
  364. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/get-started.md +0 -0
  365. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/help-tip.md +0 -0
  366. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/help.md +0 -0
  367. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/install.md +0 -0
  368. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/keys.md +0 -0
  369. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/model-warnings.md +0 -0
  370. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/multi-line.md +0 -0
  371. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/python-m-aider.md +0 -0
  372. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/recording.css +0 -0
  373. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/recording.md +0 -0
  374. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/works-best.md +0 -0
  375. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_features.scss +0 -0
  376. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_footer.scss +0 -0
  377. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_hero.scss +0 -0
  378. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_info.scss +0 -0
  379. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_layout.scss +0 -0
  380. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_reset.scss +0 -0
  381. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_testimonials.scss +0 -0
  382. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_typography.scss +0 -0
  383. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_variables.scss +0 -0
  384. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/custom/custom.scss +0 -0
  385. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/global-overrides.scss +0 -0
  386. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/adv-model-settings.md +0 -0
  387. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/aider_conf.md +0 -0
  388. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/api-keys.md +0 -0
  389. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/custom-commands.md +0 -0
  390. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/custom-system-prompts.md +0 -0
  391. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/dotenv.md +0 -0
  392. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/editor.md +0 -0
  393. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/hooks.md +0 -0
  394. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/mcp.md +0 -0
  395. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/model-aliases.md +0 -0
  396. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/options.md +0 -0
  397. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/reasoning.md +0 -0
  398. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/security.md +0 -0
  399. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/tui.md +0 -0
  400. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config.md +0 -0
  401. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/faq.md +0 -0
  402. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/git.md +0 -0
  403. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/index.md +0 -0
  404. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/install/docker.md +0 -0
  405. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/install/optional.md +0 -0
  406. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/install.md +0 -0
  407. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/languages.md +0 -0
  408. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/legal/contributor-agreement.md +0 -0
  409. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/legal/privacy.md +0 -0
  410. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/anthropic.md +0 -0
  411. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/azure.md +0 -0
  412. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/bedrock.md +0 -0
  413. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/cohere.md +0 -0
  414. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/deepseek.md +0 -0
  415. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/gemini.md +0 -0
  416. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/github.md +0 -0
  417. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/groq.md +0 -0
  418. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/lm-studio.md +0 -0
  419. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/ollama.md +0 -0
  420. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/openai-compat.md +0 -0
  421. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/openai.md +0 -0
  422. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/openrouter.md +0 -0
  423. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/other.md +0 -0
  424. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/vertex.md +0 -0
  425. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/warnings.md +0 -0
  426. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/xai.md +0 -0
  427. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms.md +0 -0
  428. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/more/analytics.md +0 -0
  429. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/more/edit-formats.md +0 -0
  430. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/more/infinite-output.md +0 -0
  431. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/more-info.md +0 -0
  432. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/repomap.md +0 -0
  433. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/scripting.md +0 -0
  434. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
  435. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
  436. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/imports.md +0 -0
  437. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
  438. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/support.md +0 -0
  439. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
  440. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/warnings.md +0 -0
  441. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting.md +0 -0
  442. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/commands.md +0 -0
  443. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/conventions.md +0 -0
  444. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/copypaste.md +0 -0
  445. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/images-urls.md +0 -0
  446. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/lint-test.md +0 -0
  447. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/modes.md +0 -0
  448. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/not-code.md +0 -0
  449. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/notifications.md +0 -0
  450. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/sessions.md +0 -0
  451. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/tips.md +0 -0
  452. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/voice.md +0 -0
  453. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/watch.md +0 -0
  454. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage.md +0 -0
  455. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/share/index.md +0 -0
  456. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli_dev.egg-info/dependency_links.txt +0 -0
  457. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli_dev.egg-info/entry_points.txt +0 -0
  458. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli_dev.egg-info/requires.txt +0 -0
  459. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli_dev.egg-info/top_level.txt +0 -0
  460. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/docker/Dockerfile +0 -0
  461. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
  462. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/pyproject.toml +0 -0
  463. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/pytest.ini +0 -0
  464. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/common-constraints.txt +0 -0
  465. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/requirements-dev.in +0 -0
  466. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/requirements-dev.txt +0 -0
  467. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/requirements-help.in +0 -0
  468. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/requirements-help.txt +0 -0
  469. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/requirements-playwright.in +0 -0
  470. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/requirements-playwright.txt +0 -0
  471. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/requirements.in +0 -0
  472. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/tree-sitter.in +0 -0
  473. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements.txt +0 -0
  474. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/30k-image.py +0 -0
  475. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/Dockerfile.jekyll +0 -0
  476. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/__init__.py +0 -0
  477. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/blame.py +0 -0
  478. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/clean_metadata.py +0 -0
  479. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/cost_analyzer.py +0 -0
  480. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/dl_icons.py +0 -0
  481. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/filter-chat-mode.js +0 -0
  482. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/generate_providers.py +0 -0
  483. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/get_contributor_list.js +0 -0
  484. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/get_hashline.py +0 -0
  485. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/history_prompts.py +0 -0
  486. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/homepage.py +0 -0
  487. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/issues.py +0 -0
  488. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/jekyll_build.sh +0 -0
  489. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/jekyll_run.sh +0 -0
  490. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/logo_svg.py +0 -0
  491. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/pip-compile.sh +0 -0
  492. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/recording_audio.py +0 -0
  493. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/redact-cast.py +0 -0
  494. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/rename_to_cecli.py +0 -0
  495. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/tmux_record.sh +0 -0
  496. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/tsl_pack_langs.py +0 -0
  497. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/update-blame.sh +0 -0
  498. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/update-docs.sh +0 -0
  499. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/update-history.py +0 -0
  500. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/versionbump.py +0 -0
  501. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/yank-old-versions.py +0 -0
  502. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/setup.cfg +0 -0
  503. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/shim.pyproject.toml +0 -0
  504. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/__init__.py +0 -0
  505. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/__init__.py +0 -0
  506. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_aws_credentials.py +0 -0
  507. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_background_commands.py +0 -0
  508. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_coder.py +0 -0
  509. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_commands.py +0 -0
  510. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_custom_commands.py +0 -0
  511. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_deprecated.py +0 -0
  512. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_editblock.py +0 -0
  513. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_editor.py +0 -0
  514. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_exceptions.py +0 -0
  515. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_find_or_blocks.py +0 -0
  516. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_hashline.py +0 -0
  517. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_history.py +0 -0
  518. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_io.py +0 -0
  519. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_linter.py +0 -0
  520. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_main.py +0 -0
  521. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_model_info_manager.py +0 -0
  522. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_model_provider_manager.py +0 -0
  523. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_models.py +0 -0
  524. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_onboarding.py +0 -0
  525. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_plugin_manager.py +0 -0
  526. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_prompts.py +0 -0
  527. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_reasoning.py +0 -0
  528. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_repo.py +0 -0
  529. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_repomap.py +0 -0
  530. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_run_cmd.py +0 -0
  531. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_sanity_check_repo.py +0 -0
  532. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_scripting.py +0 -0
  533. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_sendchat.py +0 -0
  534. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_sessions.py +0 -0
  535. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_skills.py +0 -0
  536. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_special.py +0 -0
  537. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_ssl_verification.py +0 -0
  538. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_udiff.py +0 -0
  539. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_urls.py +0 -0
  540. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_voice.py +0 -0
  541. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_watch.py +0 -0
  542. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_wholefile.py +0 -0
  543. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/coders/test_copypaste_coder.py +0 -0
  544. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/conftest.py +0 -0
  545. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/conversations/test_conversation_integration.py +0 -0
  546. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/conversations/test_conversation_system.py +0 -0
  547. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
  548. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/chat-history.md +0 -0
  549. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/arduino/test.ino +0 -0
  550. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/c/test.c +0 -0
  551. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/chatito/test.chatito +0 -0
  552. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/clojure/test.clj +0 -0
  553. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
  554. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/cpp/test.cpp +0 -0
  555. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/csharp/test.cs +0 -0
  556. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/d/test.d +0 -0
  557. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/dart/test.dart +0 -0
  558. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/elisp/test.el +0 -0
  559. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/elixir/test.ex +0 -0
  560. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/elm/test.elm +0 -0
  561. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/gleam/test.gleam +0 -0
  562. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/go/test.go +0 -0
  563. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/haskell/test.hs +0 -0
  564. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/hcl/test.tf +0 -0
  565. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/java/test.java +0 -0
  566. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/javascript/test.js +0 -0
  567. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/kotlin/test.kt +0 -0
  568. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/lua/test.lua +0 -0
  569. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/matlab/test.m +0 -0
  570. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/ocaml/test.ml +0 -0
  571. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
  572. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/php/test.php +0 -0
  573. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/pony/test.pony +0 -0
  574. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/properties/test.properties +0 -0
  575. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/python/test.py +0 -0
  576. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/ql/test.ql +0 -0
  577. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/r/test.r +0 -0
  578. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/racket/test.rkt +0 -0
  579. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/ruby/test.rb +0 -0
  580. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/rust/test.rs +0 -0
  581. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/scala/test.scala +0 -0
  582. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/solidity/test.sol +0 -0
  583. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/swift/test.swift +0 -0
  584. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/tsx/test.tsx +0 -0
  585. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/typescript/test.ts +0 -0
  586. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/udev/test.rules +0 -0
  587. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/zig/test.zig +0 -0
  588. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/sample-code-base/sample.js +0 -0
  589. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/sample-code-base/sample.py +0 -0
  590. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
  591. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/watch.js +0 -0
  592. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/watch.lisp +0 -0
  593. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/watch.py +0 -0
  594. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/watch_question.js +0 -0
  595. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/help/test_help.py +0 -0
  596. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/helpers/monorepo/test_config.py +0 -0
  597. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/helpers/monorepo/test_config_active.py +0 -0
  598. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
  599. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/helpers/monorepo/test_workspace.py +0 -0
  600. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/hooks/__init__.py +0 -0
  601. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/hooks/test_base.py +0 -0
  602. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/hooks/test_manager.py +0 -0
  603. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/hooks/test_registry.py +0 -0
  604. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/mcp/__init__.py +0 -0
  605. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/mcp/test_manager.py +0 -0
  606. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/scrape/test_playwright_disable.py +0 -0
  607. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/scrape/test_scrape.py +0 -0
  608. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/tools/test_git_branch.py +0 -0
  609. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/tools/test_git_diff.py +0 -0
  610. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/tools/test_grep.py +0 -0
  611. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/tools/test_insert_block.py +0 -0
  612. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/tools/test_registry.py +0 -0
  613. {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/tools/test_show_context.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cecli-dev
3
- Version: 0.99.1
3
+ Version: 0.99.2
4
4
  Summary: we also can't pronounce cecli
5
5
  Project-URL: Homepage, https://github.com/dwash96/cecli
6
6
  Project-URL: Documentation, https://github.com/dwash96/cecli
@@ -1,6 +1,6 @@
1
1
  from packaging import version
2
2
 
3
- __version__ = "0.99.1.dev"
3
+ __version__ = "0.99.2.dev"
4
4
  safe_version = __version__
5
5
 
6
6
  try:
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.99.1'
22
- __version_tuple__ = version_tuple = (0, 99, 1)
21
+ __version__ = version = '0.99.2'
22
+ __version_tuple__ = version_tuple = (0, 99, 2)
23
23
 
24
- __commit_id__ = commit_id = 'g587390916'
24
+ __commit_id__ = commit_id = 'g7361036c0'
@@ -95,7 +95,7 @@ class AgentCoder(Coder):
95
95
  super().__init__(*args, **kwargs)
96
96
 
97
97
  def _setup_agent(self):
98
- os.makedirs(".cecli/workspace", exist_ok=True)
98
+ os.makedirs(".cecli/temp", exist_ok=True)
99
99
 
100
100
  def _get_agent_config(self):
101
101
  """
@@ -1020,7 +1020,7 @@ I will proceed based on the tool results and updated context.""")
1020
1020
  self.model_kwargs = {
1021
1021
  "temperature": default_temp + 0.1,
1022
1022
  "frequency_penalty": default_fp + 0.2,
1023
- "presence_penalty": 0.1,
1023
+ # "presence_penalty": 0.1,
1024
1024
  }
1025
1025
  else:
1026
1026
  temperature = nested.getter(self.model_kwargs, "temperature", default_temp)
@@ -229,6 +229,7 @@ class Coder:
229
229
  file_watcher=from_coder.file_watcher,
230
230
  mcp_manager=from_coder.mcp_manager,
231
231
  uuid=from_coder.uuid,
232
+ repo=from_coder.repo,
232
233
  )
233
234
  use_kwargs.update(update) # override to complete the switch
234
235
  use_kwargs.update(kwargs) # override passed kwargs
@@ -328,6 +329,7 @@ class Coder:
328
329
  uuid="",
329
330
  ):
330
331
  # initialize from args.map_cache_dir
332
+ self.interrupt_event = asyncio.Event()
331
333
  self.uuid = generate_unique_id()
332
334
  if uuid:
333
335
  self.uuid = uuid
@@ -1735,6 +1737,7 @@ class Coder:
1735
1737
 
1736
1738
  self.io.tool_warning("\n\n^C KeyboardInterrupt")
1737
1739
 
1740
+ self.interrupt_event.set()
1738
1741
  self.last_keyboard_interrupt = time.time()
1739
1742
 
1740
1743
  # Old summarization system removed - using context compaction logic instead
@@ -2768,6 +2771,7 @@ class Coder:
2768
2771
 
2769
2772
  def _print_tool_call_info(self, server_tool_calls):
2770
2773
  """Print information about an MCP tool call."""
2774
+ self.io.ring_bell()
2771
2775
  # self.io.tool_output("Preparing to run MCP tools", bold=False)
2772
2776
 
2773
2777
  for server, tool_calls in server_tool_calls.items():
@@ -3039,6 +3043,7 @@ class Coder:
3039
3043
  return prompts.added_files.format(fnames=", ".join(added_fnames))
3040
3044
 
3041
3045
  async def send(self, messages, model=None, functions=None, tools=None):
3046
+ self.interrupt_event.clear()
3042
3047
  self.got_reasoning_content = False
3043
3048
  self.ended_reasoning_content = False
3044
3049
 
@@ -3058,15 +3063,33 @@ class Coder:
3058
3063
  self.token_profiler.start()
3059
3064
 
3060
3065
  try:
3061
- hash_object, completion = await model.send_completion(
3062
- messages,
3063
- functions,
3064
- self.stream,
3065
- self.temperature,
3066
- # This could include any tools, but for now it is just MCP tools
3067
- tools=tools,
3068
- override_kwargs=self.model_kwargs.copy(),
3066
+ completion_task = asyncio.create_task(
3067
+ model.send_completion(
3068
+ messages,
3069
+ functions,
3070
+ self.stream,
3071
+ self.temperature,
3072
+ # This could include any tools, but for now it is just MCP tools
3073
+ tools=tools,
3074
+ override_kwargs=self.model_kwargs.copy(),
3075
+ )
3076
+ )
3077
+ interrupt_task = asyncio.create_task(self.interrupt_event.wait())
3078
+
3079
+ done, pending = await asyncio.wait(
3080
+ {completion_task, interrupt_task},
3081
+ return_when=asyncio.FIRST_COMPLETED,
3069
3082
  )
3083
+
3084
+ if interrupt_task in done:
3085
+ completion_task.cancel()
3086
+ try:
3087
+ await completion_task
3088
+ except asyncio.CancelledError:
3089
+ pass
3090
+ raise KeyboardInterrupt
3091
+
3092
+ hash_object, completion = completion_task.result()
3070
3093
  self.chat_completion_call_hashes.append(hash_object.hexdigest())
3071
3094
 
3072
3095
  if not isinstance(completion, ModelResponse):
@@ -11,6 +11,7 @@ class Project:
11
11
  self.config = config
12
12
  self.name = config["name"]
13
13
  self.repo_url = config["repo"]
14
+ self.ignore_file = config.get("ignore")
14
15
  self.base_path = workspace_path / self.name
15
16
  self.main_path = self.base_path / "main"
16
17
 
@@ -24,6 +24,17 @@ class WorkspaceManager:
24
24
  project = Project(self.path, proj_cfg)
25
25
  project.initialize()
26
26
 
27
+ # Copy ignore files to workspace root
28
+ for proj_cfg in projects_config:
29
+ ignore_file = proj_cfg.get("ignore")
30
+ if ignore_file:
31
+ ignore_path = Path(ignore_file).expanduser()
32
+ if ignore_path.exists():
33
+ import shutil
34
+
35
+ dest_path = self.path / f"{proj_cfg['name']}.ignore"
36
+ shutil.copy2(ignore_path, dest_path)
37
+
27
38
  # Write metadata
28
39
  import json
29
40
 
@@ -35,6 +35,7 @@ class SkillContent:
35
35
  references: Dict[str, Path] = field(default_factory=dict)
36
36
  scripts: Dict[str, Path] = field(default_factory=dict)
37
37
  assets: Dict[str, Path] = field(default_factory=dict)
38
+ evals: Dict[str, Path] = field(default_factory=dict)
38
39
 
39
40
 
40
41
  class SkillsManager:
@@ -227,6 +228,9 @@ class SkillsManager:
227
228
  # Load assets
228
229
  assets = self._load_assets(skill_dir)
229
230
 
231
+ # Load evals
232
+ evals = self._load_evals(skill_dir)
233
+
230
234
  return SkillContent(
231
235
  metadata=metadata,
232
236
  frontmatter=frontmatter,
@@ -234,6 +238,7 @@ class SkillsManager:
234
238
  references=references,
235
239
  scripts=scripts,
236
240
  assets=assets,
241
+ evals=evals,
237
242
  )
238
243
 
239
244
  def _load_references(self, skill_dir: Path) -> Dict[str, Path]:
@@ -286,6 +291,23 @@ class SkillsManager:
286
291
 
287
292
  return assets
288
293
 
294
+ def _load_evals(self, skill_dir: Path) -> Dict[str, Path]:
295
+ """Load eval files from the evals/ directory."""
296
+ evals = {}
297
+ evals_dir = skill_dir / "evals"
298
+
299
+ if evals_dir.exists():
300
+ for eval_file in evals_dir.glob("**/*"):
301
+ if eval_file.is_file():
302
+ try:
303
+ # Use relative path as key, store the Path object
304
+ rel_path = eval_file.relative_to(evals_dir)
305
+ evals[str(rel_path)] = eval_file
306
+ except Exception:
307
+ continue
308
+
309
+ return evals
310
+
289
311
  def get_skill_summary(self, skill_name: str) -> Optional[str]:
290
312
  """
291
313
  Get a summary of a skill for display purposes.
@@ -315,9 +337,11 @@ class SkillsManager:
315
337
  ref_count = len(skill.references)
316
338
  script_count = len(skill.scripts)
317
339
  asset_count = len(skill.assets)
340
+ eval_count = len(skill.evals)
318
341
 
319
342
  summary += (
320
- f"Resources: {ref_count} references, {script_count} scripts, {asset_count} assets\n"
343
+ f"Resources: {ref_count} references, {script_count} scripts, {asset_count} assets,"
344
+ f" {eval_count} evals\n"
321
345
  )
322
346
 
323
347
  return summary
@@ -540,6 +564,14 @@ class SkillsManager:
540
564
  result += f"- **{asset_name}**: `{asset_path}`\n"
541
565
  result += "\n"
542
566
 
567
+ # Add evals file paths
568
+ if skill_content.evals:
569
+ result += f"#### Evals ({len(skill_content.evals)} file(s))\n\n"
570
+ result += "Available eval files:\n\n"
571
+ for eval_name, eval_path in skill_content.evals.items():
572
+ result += f"- **{eval_name}**: `{eval_path}`\n"
573
+ result += "\n"
574
+
543
575
  result += "---\n\n"
544
576
 
545
577
  result += "</context>"
@@ -758,6 +758,11 @@ class InputOutput:
758
758
  print()
759
759
 
760
760
  def interrupt_input(self):
761
+ if self.coder:
762
+ coder = self.coder()
763
+ if coder and hasattr(coder, "interrupt_event"):
764
+ coder.interrupt_event.set()
765
+
761
766
  if self.prompt_session and self.prompt_session.app:
762
767
  # Store any partial input before interrupting
763
768
  self.placeholder = self.prompt_session.app.current_buffer.text
@@ -1301,6 +1306,7 @@ class InputOutput:
1301
1306
  self.user_input(f"{question} - {res}", log_only=False)
1302
1307
  else:
1303
1308
  # Ring the bell if needed
1309
+ self.notify_user_input_required()
1304
1310
  self.ring_bell()
1305
1311
  self.start_spinner("Awaiting Confirmation...", False)
1306
1312
 
@@ -1708,22 +1714,28 @@ class InputOutput:
1708
1714
 
1709
1715
  return None # Unknown system
1710
1716
 
1717
+ def _send_notification(self):
1718
+ if self.notifications_command:
1719
+ try:
1720
+ result = subprocess.run(self.notifications_command, shell=True, capture_output=True)
1721
+ if result.returncode != 0 and result.stderr:
1722
+ error_msg = result.stderr.decode("utf-8", errors="replace")
1723
+ self.tool_warning(f"Failed to run notifications command: {error_msg}")
1724
+ except Exception as e:
1725
+ self.tool_warning(f"Failed to run notifications command: {e}")
1726
+ else:
1727
+ print("\a", end="", flush=True) # Ring the bell
1728
+
1729
+ def notify_user_input_required(self):
1730
+ """Send a notification that user input is required."""
1731
+ if self.notifications:
1732
+ self._send_notification()
1733
+
1711
1734
  def ring_bell(self):
1712
1735
  """Ring the terminal bell if needed and clear the flag"""
1713
1736
  if self.bell_on_next_input and self.notifications:
1714
- if self.notifications_command:
1715
- try:
1716
- result = subprocess.run(
1717
- self.notifications_command, shell=True, capture_output=True
1718
- )
1719
- if result.returncode != 0 and result.stderr:
1720
- error_msg = result.stderr.decode("utf-8", errors="replace")
1721
- self.tool_warning(f"Failed to run notifications command: {error_msg}")
1722
- except Exception as e:
1723
- self.tool_warning(f"Failed to run notifications command: {e}")
1724
- else:
1725
- print("\a", end="", flush=True) # Ring the bell
1726
- self.bell_on_next_input = False # Clear the flag
1737
+ self._send_notification()
1738
+ self.bell_on_next_input = False
1727
1739
 
1728
1740
  def toggle_multiline_mode(self):
1729
1741
  """Toggle between normal and multiline input modes"""
@@ -610,7 +610,7 @@ async def main_async(argv=None, input=None, output=None, force_git_root=None, re
610
610
  if hasattr(args, "hooks") and args.hooks is not None:
611
611
  args.hooks = convert_yaml_to_json_string(args.hooks)
612
612
  if hasattr(args, "workspaces") and args.workspaces is not None:
613
- args.hooks = convert_yaml_to_json_string(args.workspaces)
613
+ args.workspaces = convert_yaml_to_json_string(args.workspaces)
614
614
 
615
615
  # Interpolate environment variables in all string arguments
616
616
  for key, value in vars(args).items():
@@ -18,13 +18,15 @@ main_system: |
18
18
  <context name="role_and_directives">
19
19
  ## Core Directives
20
20
  **Act Proactively**: Autonomously use discovery and management tools (`ViewFilesAtGlob`, `ViewFilesMatching`, `Ls`, `ContextManager`) to fulfill the request. Chain tool calls across multiple turns for continuous exploration.
21
- **Be Decisive**: Trust your findings. Do not repeat identical searches or ask redundant questions once a path is established.
21
+ **Be Decisive**: Trust your findings. Do not repeat identical searches or ask redundant questions.
22
22
  **Be Efficient**: Batch tool calls when tools allow you to. Respect usage limits while maximizing the utility of each turn.
23
+ **Be Persistent**: Do not take short cuts. Work through your task until completion. No task takes too long as long as you are making progress towards the goal.
23
24
  </context>
24
25
 
25
26
  <context name="file_format">
26
27
  ### 1. FILE FORMAT
27
28
  Files are provided in "hashline" format. Each line starts with a case-sensitive content hash followed by `::`.
29
+ Do not attempt to write these content hashes. They are automatically generated, maintained, and subject to change.
28
30
 
29
31
  **Example File Format :**
30
32
  il9n::#!/usr/bin/env python3
@@ -43,33 +45,30 @@ main_system: |
43
45
  5. **Finished**: Use the `Finished` tool only after verifying the solution. Briefly summarize the changes for the user.
44
46
 
45
47
  ## Todo List Management
46
- - Use `UpdateTodoList` every 3-10 tool calls to keep the state synchronized.
47
- - Break complex tasks into granular steps so they remain tractable and context-efficient
48
+ - Use `UpdateTodoList` to keep the state synchronized as you complete subtasks.
49
+ - Break complex tasks and long edits into granular steps so they remain tractable and context-efficient
48
50
 
49
- ### Editing Tools (Precision Protocol)
50
- Files use leading hashline content id prefixes inside brackets, i.e. `[{{4 char hash}}]{{line content}}`.
51
- Do not attempt to write these content ids. They are automatically generated.
51
+ ### Editing Tool Protocol
52
52
 
53
53
  **MANDATORY Two-Phase Safety Protocol**:
54
- 1. **Phase 1**: Use `ShowContext` to get the hashline-prefixed content around the pattern to modify. Capture entire functions, logical blocks and closures. You may use multiple calls.
54
+ 1. **Phase 1**: Use `ShowContext` to gather the hashline-prefixed content of the section to modify. Capture entire functions, logical blocks and closures.
55
55
  2. **Phase 2**: Execute the edit (`ReplaceText`, `InsertText`, `DeleteText`) using the verified hashlines prefixes from the `ShowContext` tool.
56
56
 
57
57
  **Atomic Scope:** Include the **entire function or logical block**. Never return partial syntax or broken closures. Do not attempt to replace just the beginning or end of a closure.
58
- **Indentation**: Preserve all whitespace (spaces, tabs, and newlines).
58
+ **Indentation**: Preserve all necessary whitespace (spaces, tabs, and newlines) and stylistic indentation.
59
59
  </context>
60
60
 
61
- Use the `.cecli/workspace` directory for all temporary, test, or scratch files.
61
+ Use the `.cecli/temp` directory for all temporary, test, or scratch files.
62
62
  Always reply to the user in {language}.
63
63
 
64
64
  system_reminder: |
65
65
  <context name="critical_reminders">
66
66
  ## Reminders
67
67
  **Strict Scope**: Stay on task. Do not alter functionality and syntax that is out of scope or pursue unrequested refactors. Do not attempt to modify large files in one shot. Work step by step.
68
- **Context Hygiene**: Remove files or skills from context using `ContextManager` or `RemoveSkill` once they are no longer needed to save tokens and prevent confusion.
68
+ **Context Hygiene**: Remove files and loaded skills from context using `ContextManager` or `RemoveSkill` once they are no longer needed to save tokens and prevent confusion.
69
69
  **Turn Management**: Tool calls trigger the next turn. Do not include tool calls in your final summary to the user. You must use `ShowContext` to view the relevant hashline range before each edit.
70
- **Sandbox**: Use `.cecli/workspace` for all verification and temporary logic.
71
- **Novelty**: Do not repeat phrases in your responses to the user. You do not need to declare you understand the task. Simply proceed. Only give status when you have new information.
72
- **Patience**: Do not take short cuts. Work through your task until completion. No task takes too long as long as you are making progress towards the goal.
70
+ **Sandbox**: Use `.cecli/temp` for all verification and temporary logic.
71
+ **Novelty**: Do not repeat phrases in your responses to the user. You do not need to declare you understand the task. Simply proceed. Only give status updates when you have new information.
73
72
 
74
73
  {lazy_prompt}
75
74
  {shell_cmd_reminder}
@@ -98,7 +98,7 @@ compaction_prompt: |
98
98
  - (e.g., "Discovered that the connection timeout error is triggered by the `RetryPolicy` class.")
99
99
  - (e.g., "Successfully refactored the `validate_input` function to handle null bytes.")
100
100
  - (e.g., "Reverted changes to `db.py` after determining the issue was in the environment config instead.")
101
- - (e.g., "Verified that the fix works in isolation using a temporary script in `.cecli/workspace`.")
101
+ - (e.g., "Verified that the fix works in isolation using a temporary script in `.cecli/temp`.")
102
102
 
103
103
  ### 3. Current Technical Context
104
104
  - **Files In-Scope**: List paths currently being edited or actively referenced.
@@ -95,6 +95,12 @@ class GitRepo:
95
95
  self.subtree_only = subtree_only
96
96
  self.git_commit_verify = git_commit_verify
97
97
  self.ignore_file_cache = {}
98
+ self.is_workspace = False
99
+ self.workspace_path = None
100
+ self.workspace_config = {}
101
+ self.workspace_ignore_specs = {}
102
+ self.workspace_ignore_ts = {}
103
+ # Workspace detection and config loading occurs later in __init__
98
104
 
99
105
  if git_dname:
100
106
  check_fnames = [git_dname]
@@ -129,27 +135,40 @@ class GitRepo:
129
135
  raise FileNotFoundError
130
136
 
131
137
  self._init_repo_path = repo_paths.pop()
132
- self.init_repo()
133
-
134
- if cecli_ignore_file:
135
- self.cecli_ignore_file = Path(cecli_ignore_file)
136
138
 
137
139
  # Detect if we're in a workspace
138
- self.workspace_path = self._detect_workspace_path(self.root)
140
+ self.workspace_path = self._detect_workspace_path(self._init_repo_path)
139
141
  if self.workspace_path:
140
- self.io.tool_output(f"Working in workspace: {self.workspace_path.name}")
142
+ self.is_workspace = True
143
+
144
+ try:
145
+ from cecli.helpers.monorepo.config import load_workspace_config
146
+
147
+ self.workspace_config = load_workspace_config(name=self.workspace_path.name)
148
+ except Exception:
149
+ self.workspace_config = {}
150
+
151
+ self.refresh_cecli_ignore()
152
+
153
+ self.init_repo()
154
+ if cecli_ignore_file:
155
+ self.cecli_ignore_file = Path(cecli_ignore_file)
141
156
 
142
157
  def init_repo(self):
143
158
  if not self.repo:
144
159
  self.repo = git.Repo(self._init_repo_path, odbt=git.GitCmdObjectDB)
145
160
  self.root = utils.safe_abs_path(self.repo.working_tree_dir)
146
161
 
162
+ if self.is_workspace:
163
+ self.root = self.workspace_path
164
+
147
165
  try:
148
166
  commit = self.repo.head.commit
149
167
  return commit
150
168
  except ANY_GIT_ERROR:
151
- self.repo = git.Repo(self._init_repo_path, odbt=git.GitCmdObjectDB)
152
- self.root = utils.safe_abs_path(self.repo.working_tree_dir)
169
+ if not self.is_workspace:
170
+ self.repo = git.Repo(self._init_repo_path, odbt=git.GitCmdObjectDB)
171
+ self.root = utils.safe_abs_path(self.repo.working_tree_dir)
153
172
 
154
173
  def _detect_workspace_path(self, start_path: str):
155
174
  """Check if current directory is within a workspace"""
@@ -612,7 +631,9 @@ class GitRepo:
612
631
  ).splitlines()
613
632
 
614
633
  for f in res:
615
- all_files.append(f"{proj_name}/main/{f}")
634
+ rel_path = f"{proj_name}/main/{f}"
635
+ if not self.ignored_file(rel_path):
636
+ all_files.append(rel_path)
616
637
  except Exception:
617
638
  continue
618
639
 
@@ -625,21 +646,39 @@ class GitRepo:
625
646
  if res:
626
647
  return res
627
648
 
628
- path = str(Path(PurePosixPath((Path(self.root) / path).relative_to(self.root))))
649
+ if self.is_workspace:
650
+ try:
651
+ # In workspace mode, try to make it relative to workspace_path first
652
+ path = str(
653
+ Path(
654
+ PurePosixPath(
655
+ (Path(self.workspace_path) / path).relative_to(self.workspace_path)
656
+ )
657
+ )
658
+ )
659
+ except ValueError:
660
+ # Fallback to standard relative_to(self.root)
661
+ path = str(Path(PurePosixPath((Path(self.root) / path).relative_to(self.root))))
662
+ else:
663
+ path = str(Path(PurePosixPath((Path(self.root) / path).relative_to(self.root))))
664
+
629
665
  self.normalized_path[orig_path] = path
630
666
  return path
631
667
 
632
668
  def refresh_cecli_ignore(self):
633
- if not self.cecli_ignore_file:
669
+ if not self.cecli_ignore_file and not self.is_workspace:
634
670
  return
635
671
 
636
672
  current_time = time.time()
637
673
  if current_time - self.cecli_ignore_last_check < 1:
638
674
  return
639
675
 
676
+ if self.is_workspace:
677
+ self._refresh_workspace_ignores()
678
+
640
679
  self.cecli_ignore_last_check = current_time
641
680
 
642
- if not self.cecli_ignore_file.is_file():
681
+ if not self.cecli_ignore_file or not self.cecli_ignore_file.is_file():
643
682
  return
644
683
 
645
684
  mtime = self.cecli_ignore_file.stat().st_mtime
@@ -652,6 +691,35 @@ class GitRepo:
652
691
  lines,
653
692
  )
654
693
 
694
+ def _refresh_workspace_ignores(self):
695
+ if not hasattr(self, "workspace_config") or not self.workspace_config:
696
+ return
697
+
698
+ if not hasattr(self, "workspace_ignore_specs"):
699
+ self.workspace_ignore_specs = {}
700
+ self.workspace_ignore_ts = {}
701
+
702
+ projects = self.workspace_config.get("projects", [])
703
+ for proj in projects:
704
+ proj_name = proj.get("name")
705
+ ignore_file = proj.get("ignore")
706
+ if not proj_name or not ignore_file:
707
+ continue
708
+
709
+ ignore_path = self.workspace_path / f"{proj_name}.ignore"
710
+ if not ignore_path.is_file():
711
+ continue
712
+
713
+ mtime = ignore_path.stat().st_mtime
714
+ if mtime != self.workspace_ignore_ts.get(proj_name):
715
+ self.workspace_ignore_ts[proj_name] = mtime
716
+ self.ignore_file_cache = {}
717
+ lines = ignore_path.read_text().splitlines()
718
+ self.workspace_ignore_specs[proj_name] = pathspec.PathSpec.from_lines(
719
+ pathspec.patterns.GitWildMatchPattern,
720
+ lines,
721
+ )
722
+
655
723
  def _get_gitignore_spec(self, dir_path):
656
724
  """Get or create a GitIgnoreSpec for a directory, caching for performance."""
657
725
  dir_path = Path(dir_path).resolve()
@@ -755,6 +823,31 @@ class GitRepo:
755
823
  if cwd_path not in fname_path.parents and fname_path != cwd_path:
756
824
  return True
757
825
 
826
+ if self.is_workspace:
827
+ # Check project-specific ignores
828
+ try:
829
+ fname_rel = self.normalize_path(fname)
830
+ parts = Path(fname_rel).parts
831
+ if parts:
832
+ proj_name = parts[0]
833
+ if (
834
+ hasattr(self, "workspace_ignore_specs")
835
+ and proj_name in self.workspace_ignore_specs
836
+ ):
837
+ # Check against project-specific spec
838
+ # The spec expects paths relative to the project root (usually proj/main/)
839
+ if len(parts) > 2 and parts[1] == "main":
840
+ proj_rel_path = str(Path(*parts[2:]))
841
+ else:
842
+ proj_rel_path = str(Path(*parts[1:]))
843
+
844
+ if self.workspace_ignore_specs[proj_name].match_file(proj_rel_path):
845
+ return True
846
+ # If not matched by project-specific ignore, continue to global ignore
847
+ # but don't return False yet as there might be a global .cecli.ignore
848
+ except (ValueError, IndexError):
849
+ pass
850
+
758
851
  if not self.cecli_ignore_file or not self.cecli_ignore_file.is_file():
759
852
  return False
760
853