cecli-dev 0.96.6__tar.gz → 0.96.8__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.
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/PKG-INFO +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/__init__.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/_version.py +3 -3
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/args.py +1 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/agent_coder.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/base_coder.py +5 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/add.py +17 -8
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/context_management.py +9 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/read_only.py +15 -42
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/read_only_stub.py +15 -41
- cecli_dev-0.96.8/cecli/commands/utils/helpers.py +237 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/conversation/files.py +15 -10
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/conversation/integration.py +7 -5
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/main.py +3 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/command.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/command_interactive.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/context_manager.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/delete_block.py +1 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/delete_line.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/delete_lines.py +3 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/extract_lines.py +1 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/finished.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/git_branch.py +1 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/git_diff.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/git_log.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/git_remote.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/git_show.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/git_status.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/grep.py +1 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/indent_lines.py +1 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/insert_block.py +1 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/list_changes.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/load_skill.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/ls.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/remove_skill.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/replace_text.py +200 -109
- cecli_dev-0.96.8/cecli/tools/show_numbered_context.py +199 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/thinking.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/undo_change.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/update_todo_list.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/view_files_matching.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/view_files_with_symbol.py +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tui/app.py +16 -14
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tui/widgets/footer.py +3 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/_includes/blame.md +4 -4
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/_includes/get-started.md +5 -5
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/_includes/help.md +3 -3
- cecli_dev-0.96.8/cecli/website/_includes/install.md +4 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/_includes/model-warnings.md +6 -6
- cecli_dev-0.96.8/cecli/website/_includes/python-m-aider.md +5 -0
- cecli_dev-0.96.8/cecli/website/_includes/works-best.md +1 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/config/adv-model-settings.md +15 -15
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/config/agent-mode.md +2 -2
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/config/aider_conf.md +23 -23
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/config/api-keys.md +4 -4
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/config/custom-commands.md +3 -3
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/config/custom-system-prompts.md +8 -8
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/config/dotenv.md +26 -26
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/config/editor.md +6 -6
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/config/mcp.md +9 -9
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/config/model-aliases.md +17 -17
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/config/options.md +19 -19
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/config/reasoning.md +18 -18
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/config.md +5 -5
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/faq.md +79 -79
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/git.md +27 -27
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/index.md +2 -2
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/install/codespaces.md +2 -2
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/install/docker.md +2 -2
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/install/optional.md +20 -20
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/install.md +25 -25
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/languages.md +18 -18
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/legal/contributor-agreement.md +19 -19
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/legal/privacy.md +5 -5
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms/anthropic.md +8 -8
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms/azure.md +7 -7
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms/bedrock.md +11 -11
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms/cohere.md +5 -5
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms/deepseek.md +5 -5
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms/gemini.md +8 -8
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms/github.md +10 -10
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms/groq.md +5 -5
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms/lm-studio.md +5 -5
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms/ollama.md +8 -8
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms/openai-compat.md +5 -5
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms/openai.md +9 -9
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms/openrouter.md +7 -7
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms/other.md +8 -8
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms/vertex.md +7 -7
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms/xai.md +8 -8
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms.md +12 -12
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/more/analytics.md +24 -24
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/more/edit-formats.md +4 -4
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/more/infinite-output.md +7 -7
- cecli_dev-0.96.8/cecli/website/docs/more-info.md +8 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/recordings/auto-accept-architect.md +3 -3
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/recordings/dont-drop-original-read-files.md +3 -3
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/recordings/index.md +5 -5
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/recordings/model-accepts-settings.md +14 -14
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/recordings/tree-sitter-language-pack.md +19 -19
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/repomap.md +17 -17
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/scripting.md +12 -12
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/sessions.md +5 -5
- cecli_dev-0.96.6/cecli/website/docs/troubleshooting/aider-not-found.md → cecli_dev-0.96.8/cecli/website/docs/troubleshooting/cecli-not-found.md +6 -6
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/troubleshooting/edit-errors.md +10 -10
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/troubleshooting/imports.md +16 -16
- cecli_dev-0.96.8/cecli/website/docs/troubleshooting/models-and-keys.md +54 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/troubleshooting/support.md +19 -19
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/troubleshooting/token-limits.md +10 -10
- cecli_dev-0.96.8/cecli/website/docs/troubleshooting.md +11 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/usage/browser.md +13 -13
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/usage/caching.md +8 -8
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/usage/commands.md +8 -8
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/usage/conventions.md +12 -12
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/usage/copypaste.md +30 -30
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/usage/images-urls.md +10 -10
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/usage/lint-test.md +13 -13
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/usage/modes.md +22 -22
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/usage/not-code.md +12 -12
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/usage/notifications.md +10 -10
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/usage/tips.md +18 -18
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/usage/tutorials.md +13 -13
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/usage/voice.md +9 -9
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/usage/watch.md +30 -30
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/usage.md +19 -19
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/share/index.md +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli_dev.egg-info/PKG-INFO +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli_dev.egg-info/SOURCES.txt +1 -1
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/homepage.py +10 -39
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/tools/test_show_numbered_context.py +25 -13
- cecli_dev-0.96.6/cecli/commands/utils/helpers.py +0 -142
- cecli_dev-0.96.6/cecli/tools/show_numbered_context.py +0 -137
- cecli_dev-0.96.6/cecli/website/_includes/install.md +0 -5
- cecli_dev-0.96.6/cecli/website/_includes/python-m-aider.md +0 -5
- cecli_dev-0.96.6/cecli/website/_includes/works-best.md +0 -1
- cecli_dev-0.96.6/cecli/website/docs/more-info.md +0 -8
- cecli_dev-0.96.6/cecli/website/docs/troubleshooting/models-and-keys.md +0 -54
- cecli_dev-0.96.6/cecli/website/docs/troubleshooting.md +0 -11
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/.dockerignore +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/.flake8 +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/.gitattributes +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/.github/workflows/check_pypi_version.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/.github/workflows/docker-build-test.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/.github/workflows/docker-release.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/.github/workflows/issues.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/.github/workflows/pages.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/.github/workflows/pre-commit.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/.github/workflows/release.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/.github/workflows/ubuntu-tests.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/.github/workflows/windows-tests.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/.github/workflows/windows_check_pypi_version.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/.gitignore +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/.pre-commit-config.yaml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/CHANGELOG.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/CNAME +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/CONTRIBUTING.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/HISTORY.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/LICENSE.txt +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/MANIFEST.in +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/README.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/Dockerfile +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/README.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/__init__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/benchmark.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/benchmark_classic.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/clone-exercism.sh +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/cpp-test.sh +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/docker.sh +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/docker_build.sh +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/install-docker-ubuntu.sh +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/npm-test.sh +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/over_time.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/plot.sh +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/plots.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/problem_stats.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/prompts.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/refactor_tools.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/rsync.sh +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/rungrid.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/swe-bench-lite.txt +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/swe-bench.txt +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/swe_bench.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/benchmark/test_benchmark.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/__main__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/args_formatter.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/change_tracker.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/__init__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/architect_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/ask_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/chat_chunks.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/context_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/copypaste_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/editblock_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/editblock_fenced_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/editblock_func_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/editor_diff_fenced_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/editor_editblock_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/editor_whole_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/help_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/patch_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/search_replace.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/shell.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/single_wholefile_func_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/udiff_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/udiff_simple.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/wholefile_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/coders/wholefile_func_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/__init__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/agent.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/architect.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/ask.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/chat_mode.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/clear.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/code.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/command_prefix.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/commit.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/compact.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/context.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/context_blocks.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/copy.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/copy_context.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/core.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/diff.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/drop.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/editor.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/editor_model.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/exit.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/git.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/help.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/history_search.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/lint.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/list_sessions.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/load.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/load_mcp.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/load_session.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/load_skill.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/ls.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/map.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/map_refresh.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/model.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/models.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/multiline_mode.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/paste.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/quit.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/reasoning_effort.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/remove_mcp.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/remove_skill.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/report.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/reset.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/run.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/save.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/save_session.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/settings.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/terminal_data/linux.keytab +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/terminal_setup.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/test.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/think_tokens.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/tokens.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/undo.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/utils/__init__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/utils/base_command.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/utils/registry.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/utils/save_load_manager.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/voice.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/weak_model.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/commands/web.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/deprecated_args.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/diffs.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/dump.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/editor.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/exceptions.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/format_settings.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/help.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/help_pats.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/__init__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/background_commands.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/command_parser.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/conversation/__init__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/conversation/base_message.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/conversation/manager.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/conversation/tags.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/conversation/utils.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/copypaste.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/coroutines.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/file_searcher.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/model_providers.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/nested.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/plugin_manager.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/profiler.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/requests.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/similarity.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/helpers/skills.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/history.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/io.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/linter.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/llm.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/mcp/__init__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/mcp/manager.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/mcp/oauth.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/mcp/server.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/mcp/utils.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/mdstream.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/models.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/onboarding.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/__init__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/agent.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/architect.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/ask.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/base.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/context.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/copypaste.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/editblock.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/editblock_fenced.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/editblock_func.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/editor_diff_fenced.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/editor_editblock.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/editor_whole.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/help.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/patch.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/single_wholefile_func.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/udiff.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/udiff_simple.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/utils/__init__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/utils/registry.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/utils/system.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/wholefile.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/prompts/wholefile_func.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/README.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/reasoning_tags.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/repo.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/repomap.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/report.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/resources/__init__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/resources/model-metadata.json +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/resources/model-settings.yml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/resources/providers.json +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/run_cmd.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/scrape.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/sendchat.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/sessions.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/special.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/__init__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/utils/base_tool.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/utils/helpers.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/utils/output.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tools/utils/registry.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tui/__init__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tui/io.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tui/styles.tcss +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tui/widgets/__init__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tui/widgets/completion_bar.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tui/widgets/file_list.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tui/widgets/input_area.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tui/widgets/input_container.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tui/widgets/key_hints.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tui/widgets/output.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tui/widgets/status_bar.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/tui/worker.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/urls.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/utils.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/versioncheck.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/voice.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/waiting.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/watch.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/watch_prompts.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/Gemfile +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/_includes/help-tip.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/_includes/keys.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/_includes/multi-line.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/_includes/recording.css +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/_includes/recording.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/_includes/replit-pipx.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/_sass/custom/custom.scss +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/config/skills.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/config/tui.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/install/replit.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/llms/warnings.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli/website/docs/troubleshooting/warnings.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli_dev.egg-info/dependency_links.txt +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli_dev.egg-info/entry_points.txt +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli_dev.egg-info/requires.txt +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/cecli_dev.egg-info/top_level.txt +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/docker/Dockerfile +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/pyproject.toml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/pytest.ini +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/requirements/common-constraints.txt +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/requirements/requirements-dev.in +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/requirements/requirements-dev.txt +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/requirements/requirements-help.in +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/requirements/requirements-help.txt +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/requirements/requirements-playwright.in +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/requirements/requirements-playwright.txt +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/requirements/requirements.in +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/requirements/tree-sitter.in +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/requirements.txt +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/30k-image.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/Dockerfile.jekyll +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/__init__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/blame.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/clean_metadata.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/cost_analyzer.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/dl_icons.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/filter-chat-mode.js +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/generate_providers.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/get_contributor_list.js +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/history_prompts.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/issues.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/jekyll_build.sh +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/jekyll_run.sh +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/logo_svg.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/pip-compile.sh +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/recording_audio.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/redact-cast.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/rename_to_cecli.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/tmux_record.sh +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/tsl_pack_langs.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/update-blame.sh +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/update-docs.sh +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/update-history.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/versionbump.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/scripts/yank-old-versions.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/setup.cfg +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/shim.pyproject.toml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/__init__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/__init__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_aws_credentials.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_background_commands.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_commands.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_custom_commands.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_deprecated.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_editblock.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_editor.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_exceptions.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_find_or_blocks.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_history.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_io.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_linter.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_main.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_model_info_manager.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_model_provider_manager.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_models.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_onboarding.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_plugin_manager.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_prompts.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_reasoning.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_repo.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_repomap.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_run_cmd.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_sanity_check_repo.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_scripting.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_sendchat.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_sessions.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_skills.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_special.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_ssl_verification.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_udiff.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_urls.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_voice.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_watch.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/basic/test_wholefile.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/coders/test_copypaste_coder.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/conftest.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/chat-history.md +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/arduino/test.ino +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/c/test.c +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/chatito/test.chatito +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/clojure/test.clj +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/cpp/test.cpp +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/csharp/test.cs +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/d/test.d +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/dart/test.dart +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/elisp/test.el +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/elixir/test.ex +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/elm/test.elm +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/gleam/test.gleam +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/go/test.go +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/haskell/test.hs +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/hcl/test.tf +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/java/test.java +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/javascript/test.js +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/kotlin/test.kt +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/lua/test.lua +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/matlab/test.m +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/ocaml/test.ml +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/php/test.php +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/pony/test.pony +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/properties/test.properties +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/python/test.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/ql/test.ql +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/r/test.r +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/racket/test.rkt +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/ruby/test.rb +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/rust/test.rs +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/scala/test.scala +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/solidity/test.sol +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/swift/test.swift +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/tsx/test.tsx +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/typescript/test.ts +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/udev/test.rules +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/languages/zig/test.zig +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/sample-code-base/sample.js +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/sample-code-base/sample.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/watch.js +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/watch.lisp +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/watch.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/fixtures/watch_question.js +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/help/test_help.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/mcp/__init__.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/mcp/test_manager.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/scrape/test_playwright_disable.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/scrape/test_scrape.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/test_conversation_integration.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/test_conversation_system.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/tools/test_git_branch.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/tools/test_git_diff.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/tools/test_grep.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/tools/test_insert_block.py +0 -0
- {cecli_dev-0.96.6 → cecli_dev-0.96.8}/tests/tools/test_registry.py +0 -0
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.96.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 96,
|
|
31
|
+
__version__ = version = '0.96.8'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 96, 8)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'gd43775efe'
|
|
@@ -41,6 +41,7 @@ class AgentCoder(Coder):
|
|
|
41
41
|
|
|
42
42
|
edit_format = "agent"
|
|
43
43
|
prompt_format = "agent"
|
|
44
|
+
context_management_enabled = True
|
|
44
45
|
|
|
45
46
|
def __init__(self, *args, **kwargs):
|
|
46
47
|
self.recently_removed = {}
|
|
@@ -71,7 +72,6 @@ class AgentCoder(Coder):
|
|
|
71
72
|
}
|
|
72
73
|
self.max_tool_calls = 10000
|
|
73
74
|
self.large_file_token_threshold = 8192
|
|
74
|
-
self.context_management_enabled = True
|
|
75
75
|
self.skills_manager = None
|
|
76
76
|
self.change_tracker = ChangeTracker()
|
|
77
77
|
self.args = kwargs.get("args")
|
|
@@ -262,6 +262,7 @@ class Coder:
|
|
|
262
262
|
|
|
263
263
|
# Transfer TUI app weak reference
|
|
264
264
|
res.tui = from_coder.tui
|
|
265
|
+
res.context_management_enabled = from_coder.context_management_enabled
|
|
265
266
|
|
|
266
267
|
await res.initialize_mcp_tools()
|
|
267
268
|
|
|
@@ -2095,6 +2096,10 @@ class Coder:
|
|
|
2095
2096
|
self.io.llm_started()
|
|
2096
2097
|
|
|
2097
2098
|
if inp:
|
|
2099
|
+
# Make sure current coder actually has control of conversation system
|
|
2100
|
+
ConversationChunks.initialize_conversation_system(self)
|
|
2101
|
+
self.format_chat_chunks()
|
|
2102
|
+
|
|
2098
2103
|
# Always add user message to conversation manager
|
|
2099
2104
|
ConversationManager.add_message(
|
|
2100
2105
|
message_dict=dict(role="user", content=inp),
|
|
@@ -6,6 +6,7 @@ from typing import List
|
|
|
6
6
|
from cecli.commands.utils.base_command import BaseCommand
|
|
7
7
|
from cecli.commands.utils.helpers import (
|
|
8
8
|
format_command_result,
|
|
9
|
+
get_file_completions,
|
|
9
10
|
parse_quoted_filenames,
|
|
10
11
|
quote_filename,
|
|
11
12
|
)
|
|
@@ -82,10 +83,6 @@ class AddCommand(BaseCommand):
|
|
|
82
83
|
for matched_file in sorted(all_matched_files):
|
|
83
84
|
abs_file_path = coder.abs_root_path(matched_file)
|
|
84
85
|
|
|
85
|
-
if not abs_file_path.startswith(coder.root) and not is_image_file(matched_file):
|
|
86
|
-
io.tool_error(f"Can not add {abs_file_path}, which is not within {coder.root}")
|
|
87
|
-
continue
|
|
88
|
-
|
|
89
86
|
if (
|
|
90
87
|
coder.repo
|
|
91
88
|
and coder.repo.git_ignored_file(matched_file)
|
|
@@ -205,10 +202,22 @@ class AddCommand(BaseCommand):
|
|
|
205
202
|
@classmethod
|
|
206
203
|
def get_completions(cls, io, coder, args) -> List[str]:
|
|
207
204
|
"""Get completion options for add command."""
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
205
|
+
# Get both directory-based completions and filtered "all" completions
|
|
206
|
+
directory_completions = get_file_completions(
|
|
207
|
+
coder,
|
|
208
|
+
args=args,
|
|
209
|
+
completion_type="directory",
|
|
210
|
+
include_directories=True,
|
|
211
|
+
filter_in_chat=False,
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
all_completions = get_file_completions(
|
|
215
|
+
coder, args=args, completion_type="all", include_directories=False, filter_in_chat=True
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
# Return the joint set (union) of both completion types
|
|
219
|
+
joint_set = set(directory_completions) | set(all_completions)
|
|
220
|
+
return sorted(joint_set)
|
|
212
221
|
|
|
213
222
|
@classmethod
|
|
214
223
|
def get_help(cls) -> str:
|
|
@@ -2,6 +2,11 @@ from typing import List
|
|
|
2
2
|
|
|
3
3
|
from cecli.commands.utils.base_command import BaseCommand
|
|
4
4
|
from cecli.commands.utils.helpers import format_command_result
|
|
5
|
+
from cecli.helpers.conversation import (
|
|
6
|
+
ConversationFiles,
|
|
7
|
+
ConversationManager,
|
|
8
|
+
MessageTag,
|
|
9
|
+
)
|
|
5
10
|
|
|
6
11
|
|
|
7
12
|
class ContextManagementCommand(BaseCommand):
|
|
@@ -19,6 +24,10 @@ class ContextManagementCommand(BaseCommand):
|
|
|
19
24
|
|
|
20
25
|
# Toggle the setting
|
|
21
26
|
coder.context_management_enabled = not coder.context_management_enabled
|
|
27
|
+
ConversationManager.clear_tag(MessageTag.READONLY_FILES)
|
|
28
|
+
ConversationManager.clear_tag(MessageTag.EDIT_FILES)
|
|
29
|
+
ConversationManager.clear_tag(MessageTag.CHAT_FILES)
|
|
30
|
+
ConversationFiles.clear_file_cache()
|
|
22
31
|
|
|
23
32
|
# Report the new state
|
|
24
33
|
if coder.context_management_enabled:
|
|
@@ -7,6 +7,7 @@ from typing import List
|
|
|
7
7
|
from cecli.commands.utils.base_command import BaseCommand
|
|
8
8
|
from cecli.commands.utils.helpers import (
|
|
9
9
|
format_command_result,
|
|
10
|
+
get_file_completions,
|
|
10
11
|
parse_quoted_filenames,
|
|
11
12
|
quote_filename,
|
|
12
13
|
)
|
|
@@ -207,50 +208,22 @@ class ReadOnlyCommand(BaseCommand):
|
|
|
207
208
|
@classmethod
|
|
208
209
|
def get_completions(cls, io, coder, args) -> List[str]:
|
|
209
210
|
"""Get completion options for read-only command."""
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
if dir_part == "":
|
|
219
|
-
search_dir = Path("/")
|
|
220
|
-
path_prefix = "/"
|
|
221
|
-
else:
|
|
222
|
-
# Use os.path.expanduser for ~ support if needed, but Path handles it mostly
|
|
223
|
-
search_dir = (root / dir_part).resolve()
|
|
224
|
-
path_prefix = dir_part + "/"
|
|
225
|
-
search_prefix = file_part.lower()
|
|
226
|
-
else:
|
|
227
|
-
search_dir = root
|
|
228
|
-
search_prefix = args.lower()
|
|
229
|
-
path_prefix = ""
|
|
230
|
-
|
|
231
|
-
completions = []
|
|
232
|
-
try:
|
|
233
|
-
if search_dir.exists() and search_dir.is_dir():
|
|
234
|
-
for entry in search_dir.iterdir():
|
|
235
|
-
name = entry.name
|
|
236
|
-
if search_prefix and not name.lower().startswith(search_prefix):
|
|
237
|
-
continue
|
|
238
|
-
|
|
239
|
-
# Add trailing slash for directories
|
|
240
|
-
if entry.is_dir():
|
|
241
|
-
completions.append(path_prefix + name + "/")
|
|
242
|
-
else:
|
|
243
|
-
completions.append(path_prefix + name)
|
|
244
|
-
except (PermissionError, OSError):
|
|
245
|
-
pass
|
|
211
|
+
# Get both directory-based completions and filtered "all" completions
|
|
212
|
+
directory_completions = get_file_completions(
|
|
213
|
+
coder,
|
|
214
|
+
args=args,
|
|
215
|
+
completion_type="directory",
|
|
216
|
+
include_directories=True,
|
|
217
|
+
filter_in_chat=False,
|
|
218
|
+
)
|
|
246
219
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
if args.lower() in str(c).lower() and str(c) not in completions:
|
|
251
|
-
completions.append(str(c))
|
|
220
|
+
all_completions = get_file_completions(
|
|
221
|
+
coder, args=args, completion_type="all", include_directories=False, filter_in_chat=True
|
|
222
|
+
)
|
|
252
223
|
|
|
253
|
-
|
|
224
|
+
# Return the joint set (union) of both completion types
|
|
225
|
+
joint_set = set(directory_completions) | set(all_completions)
|
|
226
|
+
return sorted(joint_set)
|
|
254
227
|
|
|
255
228
|
@classmethod
|
|
256
229
|
def get_help(cls) -> str:
|
|
@@ -7,6 +7,7 @@ from typing import List
|
|
|
7
7
|
from cecli.commands.utils.base_command import BaseCommand
|
|
8
8
|
from cecli.commands.utils.helpers import (
|
|
9
9
|
format_command_result,
|
|
10
|
+
get_file_completions,
|
|
10
11
|
parse_quoted_filenames,
|
|
11
12
|
quote_filename,
|
|
12
13
|
)
|
|
@@ -207,49 +208,22 @@ class ReadOnlyStubCommand(BaseCommand):
|
|
|
207
208
|
@classmethod
|
|
208
209
|
def get_completions(cls, io, coder, args) -> List[str]:
|
|
209
210
|
"""Get completion options for read-only-stub command."""
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
if dir_part == "":
|
|
219
|
-
search_dir = Path("/")
|
|
220
|
-
path_prefix = "/"
|
|
221
|
-
else:
|
|
222
|
-
search_dir = (root / dir_part).resolve()
|
|
223
|
-
path_prefix = dir_part + "/"
|
|
224
|
-
search_prefix = file_part.lower()
|
|
225
|
-
else:
|
|
226
|
-
search_dir = root
|
|
227
|
-
search_prefix = args.lower()
|
|
228
|
-
path_prefix = ""
|
|
229
|
-
|
|
230
|
-
completions = []
|
|
231
|
-
try:
|
|
232
|
-
if search_dir.exists() and search_dir.is_dir():
|
|
233
|
-
for entry in search_dir.iterdir():
|
|
234
|
-
name = entry.name
|
|
235
|
-
if search_prefix and not name.lower().startswith(search_prefix):
|
|
236
|
-
continue
|
|
237
|
-
|
|
238
|
-
# Add trailing slash for directories
|
|
239
|
-
if entry.is_dir():
|
|
240
|
-
completions.append(path_prefix + name + "/")
|
|
241
|
-
else:
|
|
242
|
-
completions.append(path_prefix + name)
|
|
243
|
-
except (PermissionError, OSError):
|
|
244
|
-
pass
|
|
211
|
+
# Get both directory-based completions and filtered "all" completions
|
|
212
|
+
directory_completions = get_file_completions(
|
|
213
|
+
coder,
|
|
214
|
+
args=args,
|
|
215
|
+
completion_type="directory",
|
|
216
|
+
include_directories=True,
|
|
217
|
+
filter_in_chat=False,
|
|
218
|
+
)
|
|
245
219
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
if args.lower() in str(c).lower() and str(c) not in completions:
|
|
250
|
-
completions.append(str(c))
|
|
220
|
+
all_completions = get_file_completions(
|
|
221
|
+
coder, args=args, completion_type="all", include_directories=False, filter_in_chat=True
|
|
222
|
+
)
|
|
251
223
|
|
|
252
|
-
|
|
224
|
+
# Return the joint set (union) of both completion types
|
|
225
|
+
joint_set = set(directory_completions) | set(all_completions)
|
|
226
|
+
return sorted(joint_set)
|
|
253
227
|
|
|
254
228
|
@classmethod
|
|
255
229
|
def get_help(cls) -> str:
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import re
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import List
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class CommandError(Exception):
|
|
8
|
+
"""Custom exception for command-specific errors."""
|
|
9
|
+
|
|
10
|
+
pass
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def quote_filename(fname: str) -> str:
|
|
14
|
+
"""Quote filename if it contains spaces."""
|
|
15
|
+
if " " in fname and '"' not in fname:
|
|
16
|
+
fname = f'"{fname}"'
|
|
17
|
+
return fname
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def parse_quoted_filenames(args: str) -> List[str]:
|
|
21
|
+
"""Parse filenames from command arguments, handling quoted names."""
|
|
22
|
+
filenames = re.findall(r"\"(.+?)\"|(\S+)", args)
|
|
23
|
+
filenames = [name for sublist in filenames for name in sublist if name]
|
|
24
|
+
return filenames
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def glob_filtered_to_repo(pattern: str, root: str, repo) -> List[Path]:
|
|
28
|
+
"""
|
|
29
|
+
Glob pattern and filter results to repository files.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
pattern: Glob pattern to match
|
|
33
|
+
root: Project root directory
|
|
34
|
+
repo: GitRepo instance (may be None)
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
List of Path objects matching pattern
|
|
38
|
+
"""
|
|
39
|
+
if not pattern.strip():
|
|
40
|
+
return []
|
|
41
|
+
|
|
42
|
+
try:
|
|
43
|
+
if os.path.isabs(pattern):
|
|
44
|
+
# Handle absolute paths
|
|
45
|
+
raw_matched_files = [Path(pattern)]
|
|
46
|
+
else:
|
|
47
|
+
try:
|
|
48
|
+
raw_matched_files = list(Path(root).glob(pattern))
|
|
49
|
+
except (IndexError, AttributeError, ValueError):
|
|
50
|
+
# Handle patterns like "**/*.py" that might fail on empty dirs
|
|
51
|
+
raw_matched_files = []
|
|
52
|
+
|
|
53
|
+
# Expand directories and filter
|
|
54
|
+
matched_files = []
|
|
55
|
+
for f in raw_matched_files:
|
|
56
|
+
matched_files.extend(expand_subdir(f))
|
|
57
|
+
|
|
58
|
+
# Filter to repository files
|
|
59
|
+
matched_files = [fn.relative_to(root) for fn in matched_files if fn.is_relative_to(root)]
|
|
60
|
+
|
|
61
|
+
# if repo, filter against it
|
|
62
|
+
if repo:
|
|
63
|
+
git_files = repo.get_tracked_files()
|
|
64
|
+
matched_files = [fn for fn in matched_files if str(fn) in git_files]
|
|
65
|
+
|
|
66
|
+
return matched_files
|
|
67
|
+
except Exception as e:
|
|
68
|
+
raise CommandError(f"Error processing pattern '{pattern}': {e}")
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def get_file_completions(
|
|
72
|
+
coder,
|
|
73
|
+
args: str = "",
|
|
74
|
+
completion_type: str = "all",
|
|
75
|
+
include_directories: bool = False,
|
|
76
|
+
filter_in_chat: bool = False,
|
|
77
|
+
) -> List[str]:
|
|
78
|
+
"""
|
|
79
|
+
Get file completions for command line arguments.
|
|
80
|
+
|
|
81
|
+
This function provides unified file completion logic that can be used by
|
|
82
|
+
multiple commands (add, read-only, read-only-stub, etc.).
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
coder: Coder instance
|
|
86
|
+
args: Command arguments to complete
|
|
87
|
+
completion_type: Type of completion to perform:
|
|
88
|
+
- "all": Return all available files (default)
|
|
89
|
+
- "glob": Treat args as glob pattern and expand
|
|
90
|
+
- "directory": Perform directory-based prefix matching
|
|
91
|
+
include_directories: Whether to include directories in results
|
|
92
|
+
filter_in_chat: Whether to filter out files already in chat
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
List of completion strings (quoted if needed)
|
|
96
|
+
"""
|
|
97
|
+
from pathlib import Path
|
|
98
|
+
|
|
99
|
+
root = Path(coder.root) if hasattr(coder, "root") else Path.cwd()
|
|
100
|
+
|
|
101
|
+
if completion_type == "glob":
|
|
102
|
+
# Handle glob pattern completion
|
|
103
|
+
if not args.strip():
|
|
104
|
+
return []
|
|
105
|
+
|
|
106
|
+
try:
|
|
107
|
+
matched_files = glob_filtered_to_repo(args, str(root), coder.repo)
|
|
108
|
+
completions = [str(fn) for fn in matched_files]
|
|
109
|
+
except CommandError:
|
|
110
|
+
completions = []
|
|
111
|
+
|
|
112
|
+
elif completion_type == "directory":
|
|
113
|
+
# Handle directory-based prefix matching (like read-only commands)
|
|
114
|
+
if "/" in args:
|
|
115
|
+
# Has directory component
|
|
116
|
+
dir_part, file_part = args.rsplit("/", 1)
|
|
117
|
+
if dir_part == "":
|
|
118
|
+
search_dir = Path("/")
|
|
119
|
+
path_prefix = "/"
|
|
120
|
+
else:
|
|
121
|
+
search_dir = (root / dir_part).resolve()
|
|
122
|
+
path_prefix = dir_part + "/"
|
|
123
|
+
search_prefix = file_part.lower()
|
|
124
|
+
else:
|
|
125
|
+
search_dir = root
|
|
126
|
+
search_prefix = args.lower()
|
|
127
|
+
path_prefix = ""
|
|
128
|
+
|
|
129
|
+
completions = []
|
|
130
|
+
try:
|
|
131
|
+
if search_dir.exists() and search_dir.is_dir():
|
|
132
|
+
for entry in search_dir.iterdir():
|
|
133
|
+
name = entry.name
|
|
134
|
+
if search_prefix and not name.lower().startswith(search_prefix):
|
|
135
|
+
continue
|
|
136
|
+
|
|
137
|
+
# Add trailing slash for directories if requested
|
|
138
|
+
if entry.is_dir() and include_directories:
|
|
139
|
+
completions.append(path_prefix + name + "/")
|
|
140
|
+
elif entry.is_file():
|
|
141
|
+
completions.append(path_prefix + name)
|
|
142
|
+
except (PermissionError, OSError):
|
|
143
|
+
pass
|
|
144
|
+
|
|
145
|
+
else: # "all" completion type
|
|
146
|
+
# Get all available files
|
|
147
|
+
if filter_in_chat:
|
|
148
|
+
files = set(coder.get_all_relative_files())
|
|
149
|
+
files = files - set(coder.get_inchat_relative_files())
|
|
150
|
+
completions = list(files)
|
|
151
|
+
else:
|
|
152
|
+
completions = coder.get_all_relative_files()
|
|
153
|
+
|
|
154
|
+
# Quote filenames with spaces
|
|
155
|
+
completions = [quote_filename(fn) for fn in completions]
|
|
156
|
+
return sorted(completions)
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def validate_file_access(io, coder, file_path: str, require_in_chat: bool = False) -> bool:
|
|
160
|
+
"""
|
|
161
|
+
Validate file access permissions and state.
|
|
162
|
+
|
|
163
|
+
Args:
|
|
164
|
+
io: InputOutput instance
|
|
165
|
+
coder: Coder instance
|
|
166
|
+
file_path: File path to validate
|
|
167
|
+
require_in_chat: Whether file must be in chat context
|
|
168
|
+
|
|
169
|
+
Returns:
|
|
170
|
+
True if file is accessible
|
|
171
|
+
"""
|
|
172
|
+
abs_path = coder.abs_root_path(file_path)
|
|
173
|
+
|
|
174
|
+
if not os.path.isfile(abs_path):
|
|
175
|
+
io.tool_error(f"File not found: {file_path}")
|
|
176
|
+
return False
|
|
177
|
+
|
|
178
|
+
if require_in_chat and abs_path not in coder.abs_fnames:
|
|
179
|
+
io.tool_error(f"File not in chat: {file_path}")
|
|
180
|
+
return False
|
|
181
|
+
|
|
182
|
+
return True
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def format_command_result(
|
|
186
|
+
io, command_name: str, success_message: str, error: Exception | str = None
|
|
187
|
+
):
|
|
188
|
+
"""
|
|
189
|
+
Format command execution result consistently.
|
|
190
|
+
|
|
191
|
+
Args:
|
|
192
|
+
io: InputOutput instance
|
|
193
|
+
command_name: Name of the command
|
|
194
|
+
success_message: Message for successful execution
|
|
195
|
+
error: Exception if command failed
|
|
196
|
+
|
|
197
|
+
Returns:
|
|
198
|
+
Formatted result string
|
|
199
|
+
"""
|
|
200
|
+
if error:
|
|
201
|
+
io.tool_error(f"\nError in {command_name}: {str(error)}")
|
|
202
|
+
return f"Error: {str(error)}"
|
|
203
|
+
else:
|
|
204
|
+
io.tool_output(f"\n✅ {success_message}")
|
|
205
|
+
return f"Successfully executed {command_name}."
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def get_available_files(coder, in_chat: bool = False) -> List[str]:
|
|
209
|
+
"""
|
|
210
|
+
Get list of available files (either all files or files in chat).
|
|
211
|
+
|
|
212
|
+
Args:
|
|
213
|
+
coder: Coder instance
|
|
214
|
+
in_chat: If True, return files in chat context
|
|
215
|
+
|
|
216
|
+
Returns:
|
|
217
|
+
List of relative file paths
|
|
218
|
+
"""
|
|
219
|
+
if in_chat:
|
|
220
|
+
return coder.get_inchat_relative_files()
|
|
221
|
+
else:
|
|
222
|
+
return coder.get_all_relative_files()
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
def expand_subdir(file_path: Path) -> List[Path]:
|
|
226
|
+
"""Expand a directory path to all files within it."""
|
|
227
|
+
if file_path.is_file():
|
|
228
|
+
return [file_path]
|
|
229
|
+
|
|
230
|
+
if file_path.is_dir():
|
|
231
|
+
files = []
|
|
232
|
+
for file in file_path.rglob("*"):
|
|
233
|
+
if file.is_file():
|
|
234
|
+
files.append(file)
|
|
235
|
+
return files
|
|
236
|
+
|
|
237
|
+
return []
|
|
@@ -93,7 +93,7 @@ class ConversationFiles:
|
|
|
93
93
|
fname: str,
|
|
94
94
|
generate_stub: bool = False,
|
|
95
95
|
context_management_enabled: bool = False,
|
|
96
|
-
large_file_token_threshold: int =
|
|
96
|
+
large_file_token_threshold: int = 8192,
|
|
97
97
|
) -> Optional[str]:
|
|
98
98
|
"""
|
|
99
99
|
Get file content with optional stub generation for large files.
|
|
@@ -111,7 +111,6 @@ class ConversationFiles:
|
|
|
111
111
|
File content, stub for large files, or None if file cannot be read
|
|
112
112
|
"""
|
|
113
113
|
abs_fname = os.path.abspath(fname)
|
|
114
|
-
|
|
115
114
|
# First, ensure file is in cache (read-through cache)
|
|
116
115
|
if abs_fname not in cls._file_contents_original:
|
|
117
116
|
cls.add_file(fname)
|
|
@@ -129,14 +128,14 @@ class ConversationFiles:
|
|
|
129
128
|
if not context_management_enabled:
|
|
130
129
|
return content
|
|
131
130
|
|
|
131
|
+
coder = cls.get_coder()
|
|
132
|
+
|
|
132
133
|
# Check if file is large
|
|
133
|
-
content_length =
|
|
134
|
+
content_length = coder.main_model.token_count(content)
|
|
134
135
|
|
|
135
136
|
if content_length <= large_file_token_threshold:
|
|
136
137
|
return content
|
|
137
138
|
|
|
138
|
-
# File is large, generate stub
|
|
139
|
-
coder = cls.get_coder()
|
|
140
139
|
# Use RepoMap to generate file stub
|
|
141
140
|
return RepoMap.get_file_stub(fname, coder.io, line_numbers=True)
|
|
142
141
|
|
|
@@ -181,6 +180,7 @@ class ConversationFiles:
|
|
|
181
180
|
|
|
182
181
|
# Read current content using coder.io.read_text()
|
|
183
182
|
coder = cls.get_coder()
|
|
183
|
+
rel_fname = coder.get_rel_fname(fname)
|
|
184
184
|
try:
|
|
185
185
|
current_content = coder.io.read_text(abs_fname)
|
|
186
186
|
except Exception:
|
|
@@ -199,8 +199,8 @@ class ConversationFiles:
|
|
|
199
199
|
diff_lines = difflib.unified_diff(
|
|
200
200
|
snapshot_content.splitlines(),
|
|
201
201
|
current_content.splitlines(),
|
|
202
|
-
fromfile=f"{
|
|
203
|
-
tofile=f"{
|
|
202
|
+
fromfile=f"{rel_fname} (snapshot)",
|
|
203
|
+
tofile=f"{rel_fname} (current)",
|
|
204
204
|
lineterm="",
|
|
205
205
|
n=3,
|
|
206
206
|
)
|
|
@@ -224,20 +224,25 @@ class ConversationFiles:
|
|
|
224
224
|
Returns:
|
|
225
225
|
Diff string or None if no changes
|
|
226
226
|
"""
|
|
227
|
+
coder = cls.get_coder()
|
|
227
228
|
diff = cls.generate_diff(fname)
|
|
229
|
+
|
|
228
230
|
if diff:
|
|
229
231
|
# Store diff
|
|
230
232
|
abs_fname = os.path.abspath(fname)
|
|
231
233
|
cls._file_diffs[abs_fname] = diff
|
|
232
234
|
|
|
235
|
+
rel_fname = fname
|
|
236
|
+
|
|
237
|
+
if coder:
|
|
238
|
+
rel_fname = coder.get_rel_fname(fname)
|
|
239
|
+
|
|
233
240
|
# Add diff message to conversation
|
|
234
241
|
diff_message = {
|
|
235
242
|
"role": "user",
|
|
236
|
-
"content": f"File {
|
|
243
|
+
"content": f"File {rel_fname} has changed:\n\n{diff}",
|
|
237
244
|
}
|
|
238
245
|
|
|
239
|
-
# Determine tag based on file type
|
|
240
|
-
coder = cls.get_coder()
|
|
241
246
|
if coder and hasattr(coder, "abs_fnames"):
|
|
242
247
|
tag = (
|
|
243
248
|
MessageTag.EDIT_FILES
|
|
@@ -373,9 +373,11 @@ class ConversationChunks:
|
|
|
373
373
|
content = ConversationFiles.get_file_stub(fname)
|
|
374
374
|
if content:
|
|
375
375
|
# Add user message with file path as hash_key
|
|
376
|
+
rel_fname = coder.get_rel_fname(fname)
|
|
377
|
+
|
|
376
378
|
user_msg = {
|
|
377
379
|
"role": "user",
|
|
378
|
-
"content": f"File Contents {
|
|
380
|
+
"content": f"File Contents {rel_fname}:\n\n{content}",
|
|
379
381
|
}
|
|
380
382
|
ConversationManager.add_message(
|
|
381
383
|
message_dict=user_msg,
|
|
@@ -423,7 +425,6 @@ class ConversationChunks:
|
|
|
423
425
|
message_dict=assistant_msg,
|
|
424
426
|
tag=MessageTag.READONLY_FILES,
|
|
425
427
|
hash_key=("image_assistant", fname),
|
|
426
|
-
force=True,
|
|
427
428
|
)
|
|
428
429
|
|
|
429
430
|
return messages
|
|
@@ -469,16 +470,18 @@ class ConversationChunks:
|
|
|
469
470
|
if not content:
|
|
470
471
|
continue
|
|
471
472
|
|
|
473
|
+
rel_fname = coder.get_rel_fname(fname)
|
|
474
|
+
|
|
472
475
|
# Create user message
|
|
473
476
|
user_msg = {
|
|
474
477
|
"role": "user",
|
|
475
|
-
"content": f"File Contents {
|
|
478
|
+
"content": f"File Contents {rel_fname}:\n\n{content}",
|
|
476
479
|
}
|
|
477
480
|
|
|
478
481
|
# Create assistant message
|
|
479
482
|
assistant_msg = {
|
|
480
483
|
"role": "assistant",
|
|
481
|
-
"content": "Ok, I will
|
|
484
|
+
"content": "Ok, I will modify this file as is necessary.",
|
|
482
485
|
}
|
|
483
486
|
|
|
484
487
|
# Determine tag based on editability
|
|
@@ -526,7 +529,6 @@ class ConversationChunks:
|
|
|
526
529
|
message_dict=assistant_msg,
|
|
527
530
|
tag=MessageTag.CHAT_FILES,
|
|
528
531
|
hash_key=("image_assistant", fname),
|
|
529
|
-
force=True,
|
|
530
532
|
)
|
|
531
533
|
|
|
532
534
|
return result
|
|
@@ -181,7 +181,9 @@ async def setup_git(git_root, io):
|
|
|
181
181
|
)
|
|
182
182
|
return
|
|
183
183
|
elif cwd and await io.confirm_ask(
|
|
184
|
-
"No git repo found, create one to track cecli's changes (recommended)?",
|
|
184
|
+
"No git repo found, create one to track cecli's changes (recommended)?",
|
|
185
|
+
acknowledge=True,
|
|
186
|
+
explicit_yes_required=True,
|
|
185
187
|
):
|
|
186
188
|
git_root = str(cwd.resolve())
|
|
187
189
|
repo = await make_new_repo(git_root, io)
|
|
@@ -34,7 +34,7 @@ class Tool(BaseTool):
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
@classmethod
|
|
37
|
-
async def execute(cls, coder, command_string, background=False, stop_background=None):
|
|
37
|
+
async def execute(cls, coder, command_string, background=False, stop_background=None, **kwargs):
|
|
38
38
|
"""
|
|
39
39
|
Execute a shell command, optionally in background.
|
|
40
40
|
"""
|