cecli-dev 0.96.1__tar.gz → 0.96.3__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.1 → cecli_dev-0.96.3}/PKG-INFO +1 -2
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/__init__.py +1 -1
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/_version.py +3 -3
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/agent_coder.py +2 -5
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/architect_coder.py +23 -30
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/base_coder.py +13 -33
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/compact.py +3 -1
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/editor_model.py +13 -24
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/model.py +13 -22
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/reset.py +1 -1
- cecli_dev-0.96.3/cecli/commands/tokens.py +235 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/utils/base_command.py +13 -19
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/weak_model.py +13 -24
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/conversation/base_message.py +5 -1
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/conversation/manager.py +11 -1
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/model_providers.py +159 -148
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/requests.py +27 -31
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/skills.py +2 -2
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/llm.py +2 -1
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/main.py +8 -1
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/mcp/manager.py +6 -4
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/mcp/server.py +22 -4
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/thinking.py +1 -1
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/app.py +9 -1
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/worker.py +4 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli_dev.egg-info/PKG-INFO +1 -2
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli_dev.egg-info/requires.txt +0 -1
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/common-constraints.txt +2 -32
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/requirements.in +0 -1
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements.txt +0 -89
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_reasoning.py +1 -2
- cecli_dev-0.96.1/cecli/commands/tokens.py +0 -208
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.dockerignore +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.flake8 +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.gitattributes +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/check_pypi_version.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/docker-build-test.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/docker-release.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/issues.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/pages.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/pre-commit.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/release.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/ubuntu-tests.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/windows-tests.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.github/workflows/windows_check_pypi_version.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.gitignore +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/.pre-commit-config.yaml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/CHANGELOG.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/CNAME +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/CONTRIBUTING.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/HISTORY.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/LICENSE.txt +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/MANIFEST.in +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/README.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/Dockerfile +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/README.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/__init__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/benchmark.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/benchmark_classic.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/clone-exercism.sh +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/cpp-test.sh +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/docker.sh +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/docker_build.sh +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/install-docker-ubuntu.sh +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/npm-test.sh +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/over_time.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/plot.sh +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/plots.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/problem_stats.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/prompts.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/refactor_tools.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/rsync.sh +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/rungrid.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/swe-bench-lite.txt +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/swe-bench.txt +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/swe_bench.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/benchmark/test_benchmark.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/__main__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/args.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/args_formatter.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/change_tracker.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/__init__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/ask_coder.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/chat_chunks.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/context_coder.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/copypaste_coder.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/editblock_coder.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/editblock_fenced_coder.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/editblock_func_coder.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/editor_diff_fenced_coder.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/editor_editblock_coder.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/editor_whole_coder.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/help_coder.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/patch_coder.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/search_replace.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/shell.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/single_wholefile_func_coder.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/udiff_coder.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/udiff_simple.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/wholefile_coder.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/coders/wholefile_func_coder.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/__init__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/add.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/agent.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/architect.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/ask.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/chat_mode.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/clear.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/code.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/command_prefix.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/commit.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/context.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/context_blocks.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/context_management.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/copy.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/copy_context.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/core.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/diff.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/drop.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/editor.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/exit.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/git.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/help.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/history_search.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/lint.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/list_sessions.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/load.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/load_mcp.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/load_session.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/load_skill.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/ls.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/map.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/map_refresh.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/models.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/multiline_mode.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/paste.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/quit.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/read_only.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/read_only_stub.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/reasoning_effort.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/remove_mcp.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/remove_skill.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/report.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/run.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/save.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/save_session.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/settings.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/terminal_data/linux.keytab +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/terminal_setup.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/test.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/think_tokens.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/undo.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/utils/__init__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/utils/helpers.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/utils/registry.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/utils/save_load_manager.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/voice.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/commands/web.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/deprecated_args.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/diffs.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/dump.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/editor.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/exceptions.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/format_settings.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/help.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/help_pats.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/__init__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/background_commands.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/conversation/__init__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/conversation/files.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/conversation/integration.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/conversation/tags.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/conversation/utils.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/copypaste.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/coroutines.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/file_searcher.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/nested.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/plugin_manager.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/profiler.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/helpers/similarity.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/history.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/io.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/linter.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/mcp/__init__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/mcp/oauth.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/mcp/utils.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/mdstream.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/models.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/onboarding.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/__init__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/agent.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/architect.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/ask.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/base.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/context.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/copypaste.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/editblock.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/editblock_fenced.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/editblock_func.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/editor_diff_fenced.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/editor_editblock.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/editor_whole.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/help.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/patch.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/single_wholefile_func.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/udiff.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/udiff_simple.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/utils/__init__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/utils/registry.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/utils/system.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/wholefile.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/prompts/wholefile_func.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/README.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/reasoning_tags.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/repo.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/repomap.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/report.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/resources/__init__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/resources/model-metadata.json +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/resources/model-settings.yml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/resources/providers.json +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/run_cmd.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/scrape.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/sendchat.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/sessions.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/special.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/__init__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/command.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/command_interactive.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/context_manager.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/delete_block.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/delete_line.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/delete_lines.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/extract_lines.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/finished.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/git_branch.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/git_diff.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/git_log.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/git_remote.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/git_show.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/git_status.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/grep.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/indent_lines.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/insert_block.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/list_changes.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/load_skill.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/ls.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/remove_skill.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/replace_text.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/show_numbered_context.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/undo_change.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/update_todo_list.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/utils/base_tool.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/utils/helpers.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/utils/output.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/utils/registry.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/view_files_matching.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tools/view_files_with_symbol.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/__init__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/io.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/styles.tcss +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/widgets/__init__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/widgets/completion_bar.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/widgets/file_list.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/widgets/footer.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/widgets/input_area.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/widgets/key_hints.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/widgets/output.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/tui/widgets/status_bar.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/urls.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/utils.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/versioncheck.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/voice.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/waiting.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/watch.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/watch_prompts.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/Gemfile +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/blame.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/get-started.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/help-tip.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/help.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/install.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/keys.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/model-warnings.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/multi-line.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/python-m-aider.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/recording.css +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/recording.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/replit-pipx.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_includes/works-best.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/_sass/custom/custom.scss +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/adv-model-settings.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/agent-mode.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/aider_conf.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/api-keys.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/custom-commands.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/custom-system-prompts.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/dotenv.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/editor.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/mcp.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/model-aliases.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/options.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/reasoning.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/skills.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config/tui.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/config.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/faq.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/git.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/index.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/install/codespaces.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/install/docker.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/install/optional.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/install/replit.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/install.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/languages.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/legal/contributor-agreement.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/legal/privacy.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/anthropic.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/azure.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/bedrock.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/cohere.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/deepseek.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/gemini.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/github.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/groq.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/lm-studio.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/ollama.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/openai-compat.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/openai.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/openrouter.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/other.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/vertex.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/warnings.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms/xai.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/llms.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/more/analytics.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/more/edit-formats.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/more/infinite-output.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/more-info.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/recordings/auto-accept-architect.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/recordings/dont-drop-original-read-files.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/recordings/index.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/recordings/model-accepts-settings.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/recordings/tree-sitter-language-pack.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/repomap.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/scripting.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/sessions.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/troubleshooting/aider-not-found.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/troubleshooting/imports.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/troubleshooting/support.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/troubleshooting/warnings.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/troubleshooting.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/browser.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/caching.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/commands.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/conventions.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/copypaste.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/images-urls.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/lint-test.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/modes.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/not-code.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/notifications.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/tips.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/tutorials.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/voice.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage/watch.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/docs/usage.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli/website/share/index.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli_dev.egg-info/SOURCES.txt +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli_dev.egg-info/dependency_links.txt +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli_dev.egg-info/entry_points.txt +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/cecli_dev.egg-info/top_level.txt +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/docker/Dockerfile +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/pyproject.toml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/pytest.ini +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/requirements-dev.in +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/requirements-dev.txt +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/requirements-help.in +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/requirements-help.txt +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/requirements-playwright.in +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/requirements-playwright.txt +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/requirements/tree-sitter.in +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/30k-image.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/Dockerfile.jekyll +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/__init__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/blame.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/clean_metadata.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/cost_analyzer.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/dl_icons.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/filter-chat-mode.js +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/generate_providers.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/get_contributor_list.js +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/history_prompts.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/homepage.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/issues.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/jekyll_build.sh +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/jekyll_run.sh +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/logo_svg.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/pip-compile.sh +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/recording_audio.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/redact-cast.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/rename_to_cecli.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/tmux_record.sh +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/tsl_pack_langs.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/update-blame.sh +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/update-docs.sh +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/update-history.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/versionbump.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/scripts/yank-old-versions.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/setup.cfg +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/shim.pyproject.toml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/__init__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/__init__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_aws_credentials.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_background_commands.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_coder.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_commands.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_custom_commands.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_deprecated.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_editblock.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_editor.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_exceptions.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_find_or_blocks.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_history.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_io.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_linter.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_main.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_model_info_manager.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_model_provider_manager.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_models.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_onboarding.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_plugin_manager.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_prompts.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_repo.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_repomap.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_run_cmd.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_sanity_check_repo.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_scripting.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_sendchat.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_sessions.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_skills.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_special.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_ssl_verification.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_udiff.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_urls.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_voice.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_watch.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/basic/test_wholefile.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/coders/test_copypaste_coder.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/conftest.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/chat-history.md +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/arduino/test.ino +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/c/test.c +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/chatito/test.chatito +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/clojure/test.clj +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/cpp/test.cpp +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/csharp/test.cs +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/d/test.d +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/dart/test.dart +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/elisp/test.el +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/elixir/test.ex +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/elm/test.elm +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/gleam/test.gleam +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/go/test.go +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/haskell/test.hs +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/hcl/test.tf +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/java/test.java +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/javascript/test.js +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/kotlin/test.kt +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/lua/test.lua +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/matlab/test.m +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/ocaml/test.ml +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/php/test.php +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/pony/test.pony +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/properties/test.properties +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/python/test.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/ql/test.ql +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/r/test.r +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/racket/test.rkt +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/ruby/test.rb +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/rust/test.rs +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/scala/test.scala +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/solidity/test.sol +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/swift/test.swift +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/tsx/test.tsx +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/typescript/test.ts +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/udev/test.rules +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/languages/zig/test.zig +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/sample-code-base/sample.js +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/sample-code-base/sample.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/watch.js +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/watch.lisp +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/watch.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/fixtures/watch_question.js +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/help/test_help.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/mcp/__init__.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/mcp/test_manager.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/scrape/test_playwright_disable.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/scrape/test_scrape.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/test_conversation_integration.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/test_conversation_system.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/tools/test_git_branch.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/tools/test_git_diff.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/tools/test_grep.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/tools/test_insert_block.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/tools/test_registry.py +0 -0
- {cecli_dev-0.96.1 → cecli_dev-0.96.3}/tests/tools/test_show_numbered_context.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cecli-dev
|
|
3
|
-
Version: 0.96.
|
|
3
|
+
Version: 0.96.3
|
|
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
|
|
@@ -47,7 +47,6 @@ Requires-Dist: socksio>=1.0.0
|
|
|
47
47
|
Requires-Dist: pillow>=11.3.0
|
|
48
48
|
Requires-Dist: shtab>=1.7.2
|
|
49
49
|
Requires-Dist: oslex>=0.1.3
|
|
50
|
-
Requires-Dist: google-generativeai>=0.8.5
|
|
51
50
|
Requires-Dist: mcp>=1.24.0
|
|
52
51
|
Requires-Dist: textual>=6.0.0
|
|
53
52
|
Requires-Dist: truststore
|
|
@@ -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.3'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 96, 3)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'gc5417d2f9'
|
|
@@ -12,8 +12,6 @@ from collections import Counter, defaultdict
|
|
|
12
12
|
from datetime import datetime
|
|
13
13
|
from pathlib import Path
|
|
14
14
|
|
|
15
|
-
from litellm import experimental_mcp_client
|
|
16
|
-
|
|
17
15
|
from cecli import urls, utils
|
|
18
16
|
from cecli.change_tracker import ChangeTracker
|
|
19
17
|
from cecli.helpers import nested
|
|
@@ -29,6 +27,7 @@ from cecli.helpers.similarity import (
|
|
|
29
27
|
normalize_vector,
|
|
30
28
|
)
|
|
31
29
|
from cecli.helpers.skills import SkillsManager
|
|
30
|
+
from cecli.llm import litellm
|
|
32
31
|
from cecli.mcp import LocalServer, McpServerManager
|
|
33
32
|
from cecli.repo import ANY_GIT_ERROR
|
|
34
33
|
from cecli.tools.utils.registry import ToolRegistry
|
|
@@ -306,7 +305,7 @@ class AgentCoder(Coder):
|
|
|
306
305
|
}
|
|
307
306
|
try:
|
|
308
307
|
session = await server.connect()
|
|
309
|
-
call_result = await experimental_mcp_client.call_openai_tool(
|
|
308
|
+
call_result = await litellm.experimental_mcp_client.call_openai_tool(
|
|
310
309
|
session=session, openai_tool=tool_call_dict
|
|
311
310
|
)
|
|
312
311
|
content_parts = []
|
|
@@ -800,11 +799,9 @@ I will proceed based on the current context.""")
|
|
|
800
799
|
saved_message = await self.auto_commit(self.files_edited_by_tools)
|
|
801
800
|
if not saved_message and hasattr(self.gpt_prompts, "files_content_gpt_edits_no_repo"):
|
|
802
801
|
saved_message = self.gpt_prompts.files_content_gpt_edits_no_repo
|
|
803
|
-
self.move_back_cur_messages(saved_message)
|
|
804
802
|
self.tool_call_count = 0
|
|
805
803
|
self.files_added_in_exploration = set()
|
|
806
804
|
self.files_edited_by_tools = set()
|
|
807
|
-
self.move_back_cur_messages(None)
|
|
808
805
|
return False
|
|
809
806
|
|
|
810
807
|
async def _execute_tool_with_registry(self, norm_tool_name, params):
|
|
@@ -52,12 +52,8 @@ class ArchitectCoder(AskCoder):
|
|
|
52
52
|
|
|
53
53
|
editor_coder = await Coder.create(**new_kwargs)
|
|
54
54
|
|
|
55
|
-
# Clear ALL messages for editor coder (start fresh)
|
|
56
|
-
ConversationManager.reset()
|
|
57
|
-
|
|
58
55
|
# Re-initialize ConversationManager with editor coder
|
|
59
|
-
ConversationManager.initialize(editor_coder)
|
|
60
|
-
ConversationManager.clear_cache()
|
|
56
|
+
ConversationManager.initialize(editor_coder, reset=True, reformat=True)
|
|
61
57
|
|
|
62
58
|
if self.verbose:
|
|
63
59
|
editor_coder.show_announcements()
|
|
@@ -69,48 +65,45 @@ class ArchitectCoder(AskCoder):
|
|
|
69
65
|
editor_all_messages = ConversationManager.get_messages()
|
|
70
66
|
|
|
71
67
|
# Clear manager and restore original state
|
|
72
|
-
ConversationManager.reset
|
|
73
|
-
ConversationManager.initialize(original_coder or self)
|
|
68
|
+
ConversationManager.initialize(original_coder or self, reset=True, reformat=True)
|
|
74
69
|
|
|
75
70
|
# Restore original messages with all metadata
|
|
76
71
|
for msg in original_all_messages:
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
72
|
+
if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
|
|
73
|
+
ConversationManager.add_message(
|
|
74
|
+
message_dict=msg.message_dict,
|
|
75
|
+
tag=MessageTag(msg.tag),
|
|
76
|
+
priority=msg.priority,
|
|
77
|
+
mark_for_delete=msg.mark_for_delete,
|
|
78
|
+
force=True,
|
|
79
|
+
)
|
|
85
80
|
|
|
86
81
|
# Append editor's DONE and CUR messages (but not other tags like SYSTEM)
|
|
87
82
|
for msg in editor_all_messages:
|
|
88
83
|
if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
|
|
89
84
|
ConversationManager.add_message(
|
|
90
|
-
msg.
|
|
91
|
-
MessageTag(msg.tag),
|
|
85
|
+
message_dict=msg.message_dict,
|
|
86
|
+
tag=MessageTag(msg.tag),
|
|
92
87
|
priority=msg.priority,
|
|
93
|
-
timestamp=msg.timestamp,
|
|
94
88
|
mark_for_delete=msg.mark_for_delete,
|
|
95
|
-
|
|
89
|
+
force=True,
|
|
96
90
|
)
|
|
97
91
|
|
|
98
|
-
self.move_back_cur_messages("I made those changes to the files.")
|
|
99
92
|
self.total_cost = editor_coder.total_cost
|
|
100
93
|
self.coder_commit_hashes = editor_coder.coder_commit_hashes
|
|
101
94
|
except Exception as e:
|
|
102
95
|
self.io.tool_error(e)
|
|
103
96
|
# Restore original state on error
|
|
104
|
-
ConversationManager.reset
|
|
105
|
-
|
|
97
|
+
ConversationManager.initialize(original_coder or self, reset=True, reformat=True)
|
|
98
|
+
|
|
106
99
|
for msg in original_all_messages:
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
100
|
+
if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
|
|
101
|
+
ConversationManager.add_message(
|
|
102
|
+
message_dict=msg.message_dict,
|
|
103
|
+
tag=MessageTag(msg.tag),
|
|
104
|
+
priority=msg.priority,
|
|
105
|
+
mark_for_delete=msg.mark_for_delete,
|
|
106
|
+
force=True,
|
|
107
|
+
)
|
|
115
108
|
|
|
116
109
|
raise SwitchCoderSignal(main_model=self.main_model, edit_format="architect")
|
|
@@ -1659,7 +1659,7 @@ class Coder:
|
|
|
1659
1659
|
|
|
1660
1660
|
# Old summarization system removed - using context compaction logic instead
|
|
1661
1661
|
|
|
1662
|
-
async def compact_context_if_needed(self, force=False):
|
|
1662
|
+
async def compact_context_if_needed(self, force=False, message=""):
|
|
1663
1663
|
if not self.enable_context_compaction:
|
|
1664
1664
|
return
|
|
1665
1665
|
|
|
@@ -1687,9 +1687,14 @@ class Coder:
|
|
|
1687
1687
|
# Check if done_messages alone exceed the limit
|
|
1688
1688
|
if done_tokens > self.context_compaction_max_tokens or done_tokens > cur_tokens:
|
|
1689
1689
|
# Create a summary of the done_messages
|
|
1690
|
+
# Append custom message to compaction prompt if provided
|
|
1691
|
+
compaction_prompt = self.gpt_prompts.compaction_prompt
|
|
1692
|
+
if message:
|
|
1693
|
+
compaction_prompt = f"{compaction_prompt}\n\n{message}"
|
|
1694
|
+
|
|
1690
1695
|
summary_text = await self.summarizer.summarize_all_as_text(
|
|
1691
1696
|
done_messages,
|
|
1692
|
-
|
|
1697
|
+
compaction_prompt,
|
|
1693
1698
|
self.context_compaction_summary_tokens,
|
|
1694
1699
|
)
|
|
1695
1700
|
|
|
@@ -1719,9 +1724,14 @@ class Coder:
|
|
|
1719
1724
|
# Check if cur_messages alone exceed the limit (after potentially compacting done_messages)
|
|
1720
1725
|
if cur_tokens > self.context_compaction_max_tokens or cur_tokens > done_tokens:
|
|
1721
1726
|
# Create a summary of the cur_messages
|
|
1727
|
+
# Append custom message to compaction prompt if provided
|
|
1728
|
+
compaction_prompt = self.gpt_prompts.compaction_prompt
|
|
1729
|
+
if message:
|
|
1730
|
+
compaction_prompt = f"{compaction_prompt}\n\n{message}"
|
|
1731
|
+
|
|
1722
1732
|
cur_summary_text = await self.summarizer.summarize_all_as_text(
|
|
1723
1733
|
cur_messages,
|
|
1724
|
-
|
|
1734
|
+
compaction_prompt,
|
|
1725
1735
|
self.context_compaction_summary_tokens,
|
|
1726
1736
|
)
|
|
1727
1737
|
|
|
@@ -1774,32 +1784,6 @@ class Coder:
|
|
|
1774
1784
|
self.io.tool_warning("Proceeding with full history for now.")
|
|
1775
1785
|
return
|
|
1776
1786
|
|
|
1777
|
-
def move_back_cur_messages(self, message):
|
|
1778
|
-
# Move CUR messages to DONE in ConversationManager
|
|
1779
|
-
# Get current CUR messages
|
|
1780
|
-
cur_messages = ConversationManager.get_messages_dict(MessageTag.CUR)
|
|
1781
|
-
|
|
1782
|
-
# Clear CUR messages from ConversationManager
|
|
1783
|
-
ConversationManager.clear_tag(MessageTag.CUR)
|
|
1784
|
-
|
|
1785
|
-
# Add them back as DONE messages
|
|
1786
|
-
for msg in cur_messages:
|
|
1787
|
-
ConversationManager.add_message(
|
|
1788
|
-
message_dict=msg,
|
|
1789
|
-
tag=MessageTag.DONE,
|
|
1790
|
-
)
|
|
1791
|
-
|
|
1792
|
-
# TODO check for impact on image messages
|
|
1793
|
-
if message:
|
|
1794
|
-
ConversationManager.add_message(
|
|
1795
|
-
message_dict=dict(role="user", content=message),
|
|
1796
|
-
tag=MessageTag.DONE,
|
|
1797
|
-
)
|
|
1798
|
-
ConversationManager.add_message(
|
|
1799
|
-
message_dict=dict(role="assistant", content="Ok."),
|
|
1800
|
-
tag=MessageTag.DONE,
|
|
1801
|
-
)
|
|
1802
|
-
|
|
1803
1787
|
def normalize_language(self, lang_code):
|
|
1804
1788
|
"""
|
|
1805
1789
|
Convert a locale code such as ``en_US`` or ``fr`` into a readable
|
|
@@ -2277,8 +2261,6 @@ class Coder:
|
|
|
2277
2261
|
if not saved_message and hasattr(self.gpt_prompts, "files_content_gpt_edits_no_repo"):
|
|
2278
2262
|
saved_message = self.gpt_prompts.files_content_gpt_edits_no_repo
|
|
2279
2263
|
|
|
2280
|
-
self.move_back_cur_messages(saved_message)
|
|
2281
|
-
|
|
2282
2264
|
if not interrupted:
|
|
2283
2265
|
add_rel_files_message = await self.check_for_file_mentions(content)
|
|
2284
2266
|
if add_rel_files_message:
|
|
@@ -3783,8 +3765,6 @@ class Coder:
|
|
|
3783
3765
|
|
|
3784
3766
|
await self.repo.commit(fnames=self.need_commit_before_edits, coder=self)
|
|
3785
3767
|
|
|
3786
|
-
# files changed, move cur messages back behind the files messages
|
|
3787
|
-
# self.move_back_cur_messages(self.gpt_prompts.files_content_local_edits)
|
|
3788
3768
|
return True
|
|
3789
3769
|
|
|
3790
3770
|
def get_edits(self, mode="update"):
|
|
@@ -7,7 +7,9 @@ class CompactCommand(BaseCommand):
|
|
|
7
7
|
|
|
8
8
|
@classmethod
|
|
9
9
|
async def execute(cls, io, coder, args, **kwargs):
|
|
10
|
-
|
|
10
|
+
# Pass args as message parameter if it's not empty
|
|
11
|
+
message = args.strip() if args else ""
|
|
12
|
+
await coder.compact_context_if_needed(force=True, message=message)
|
|
11
13
|
|
|
12
14
|
@classmethod
|
|
13
15
|
def get_help(cls) -> str:
|
|
@@ -62,12 +62,8 @@ class EditorModelCommand(BaseCommand):
|
|
|
62
62
|
|
|
63
63
|
temp_coder = await Coder.create(**new_kwargs)
|
|
64
64
|
|
|
65
|
-
# Clear ALL messages for temp coder (start fresh)
|
|
66
|
-
ConversationManager.reset()
|
|
67
|
-
|
|
68
65
|
# Re-initialize ConversationManager with temp coder
|
|
69
|
-
ConversationManager.initialize(temp_coder)
|
|
70
|
-
ConversationManager.clear_cache()
|
|
66
|
+
ConversationManager.initialize(temp_coder, reset=True, reformat=True)
|
|
71
67
|
|
|
72
68
|
verbose = kwargs.get("verbose", False)
|
|
73
69
|
if verbose:
|
|
@@ -82,37 +78,30 @@ class EditorModelCommand(BaseCommand):
|
|
|
82
78
|
temp_all_messages = ConversationManager.get_messages()
|
|
83
79
|
|
|
84
80
|
# Clear manager and restore original state
|
|
85
|
-
ConversationManager.reset
|
|
86
|
-
ConversationManager.initialize(original_coder)
|
|
81
|
+
ConversationManager.initialize(original_coder, reset=True, reformat=True)
|
|
87
82
|
|
|
88
83
|
# Restore original messages with all metadata
|
|
89
84
|
for msg in original_all_messages:
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
85
|
+
if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
|
|
86
|
+
ConversationManager.add_message(
|
|
87
|
+
message_dict=msg.message_dict,
|
|
88
|
+
tag=MessageTag(msg.tag),
|
|
89
|
+
priority=msg.priority,
|
|
90
|
+
mark_for_delete=msg.mark_for_delete,
|
|
91
|
+
force=True,
|
|
92
|
+
)
|
|
98
93
|
|
|
99
94
|
# Append temp coder's DONE and CUR messages (but not other tags like SYSTEM)
|
|
100
95
|
for msg in temp_all_messages:
|
|
101
96
|
if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
|
|
102
97
|
ConversationManager.add_message(
|
|
103
|
-
msg.
|
|
104
|
-
MessageTag(msg.tag),
|
|
98
|
+
message_dict=msg.message_dict,
|
|
99
|
+
tag=MessageTag(msg.tag),
|
|
105
100
|
priority=msg.priority,
|
|
106
|
-
timestamp=msg.timestamp,
|
|
107
101
|
mark_for_delete=msg.mark_for_delete,
|
|
108
|
-
|
|
102
|
+
force=True,
|
|
109
103
|
)
|
|
110
104
|
|
|
111
|
-
# Move back cur messages with appropriate message
|
|
112
|
-
coder.move_back_cur_messages(
|
|
113
|
-
f"Editor model {model_name} made those changes to the files."
|
|
114
|
-
)
|
|
115
|
-
|
|
116
105
|
# Restore the original model configuration
|
|
117
106
|
from cecli.commands import SwitchCoderSignal
|
|
118
107
|
|
|
@@ -67,12 +67,8 @@ class ModelCommand(BaseCommand):
|
|
|
67
67
|
|
|
68
68
|
temp_coder = await Coder.create(**new_kwargs)
|
|
69
69
|
|
|
70
|
-
# Clear ALL messages for temp coder (start fresh)
|
|
71
|
-
ConversationManager.reset()
|
|
72
|
-
|
|
73
70
|
# Re-initialize ConversationManager with temp coder
|
|
74
|
-
ConversationManager.initialize(temp_coder)
|
|
75
|
-
ConversationManager.clear_cache()
|
|
71
|
+
ConversationManager.initialize(temp_coder, reset=True, reformat=True)
|
|
76
72
|
|
|
77
73
|
verbose = kwargs.get("verbose", False)
|
|
78
74
|
if verbose:
|
|
@@ -87,35 +83,30 @@ class ModelCommand(BaseCommand):
|
|
|
87
83
|
temp_all_messages = ConversationManager.get_messages()
|
|
88
84
|
|
|
89
85
|
# Clear manager and restore original state
|
|
90
|
-
ConversationManager.reset
|
|
91
|
-
ConversationManager.initialize(original_coder)
|
|
86
|
+
ConversationManager.initialize(original_coder, reset=True, reformat=True)
|
|
92
87
|
|
|
93
88
|
# Restore original messages with all metadata
|
|
94
89
|
for msg in original_all_messages:
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
90
|
+
if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
|
|
91
|
+
ConversationManager.add_message(
|
|
92
|
+
message_dict=msg.message_dict,
|
|
93
|
+
tag=MessageTag(msg.tag),
|
|
94
|
+
priority=msg.priority,
|
|
95
|
+
mark_for_delete=msg.mark_for_delete,
|
|
96
|
+
force=True,
|
|
97
|
+
)
|
|
103
98
|
|
|
104
99
|
# Append temp coder's DONE and CUR messages (but not other tags like SYSTEM)
|
|
105
100
|
for msg in temp_all_messages:
|
|
106
101
|
if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
|
|
107
102
|
ConversationManager.add_message(
|
|
108
|
-
msg.
|
|
109
|
-
MessageTag(msg.tag),
|
|
103
|
+
message_dict=msg.message_dict,
|
|
104
|
+
tag=MessageTag(msg.tag),
|
|
110
105
|
priority=msg.priority,
|
|
111
|
-
timestamp=msg.timestamp,
|
|
112
106
|
mark_for_delete=msg.mark_for_delete,
|
|
113
|
-
|
|
107
|
+
force=True,
|
|
114
108
|
)
|
|
115
109
|
|
|
116
|
-
# Move back cur messages with appropriate message
|
|
117
|
-
coder.move_back_cur_messages(f"Model {model_name} made those changes to the files.")
|
|
118
|
-
|
|
119
110
|
# Restore the original model configuration
|
|
120
111
|
from cecli.commands import SwitchCoderSignal
|
|
121
112
|
|
|
@@ -20,7 +20,7 @@ class ResetCommand(BaseCommand):
|
|
|
20
20
|
ConversationFiles.reset() # Clear all file caches
|
|
21
21
|
|
|
22
22
|
# Re-initialize ConversationManager with current coder
|
|
23
|
-
ConversationManager.initialize(coder)
|
|
23
|
+
ConversationManager.initialize(coder, reformat=True)
|
|
24
24
|
ConversationFiles.initialize(coder)
|
|
25
25
|
|
|
26
26
|
# Clear TUI output if available
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
from typing import List
|
|
2
|
+
|
|
3
|
+
from cecli.commands.utils.base_command import BaseCommand
|
|
4
|
+
from cecli.commands.utils.helpers import format_command_result
|
|
5
|
+
from cecli.helpers.conversation import ConversationManager, MessageTag
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class TokensCommand(BaseCommand):
|
|
9
|
+
NORM_NAME = "tokens"
|
|
10
|
+
DESCRIPTION = "Report on the number of tokens used by the current chat context"
|
|
11
|
+
|
|
12
|
+
@classmethod
|
|
13
|
+
async def execute(cls, io, coder, args, **kwargs):
|
|
14
|
+
res = []
|
|
15
|
+
|
|
16
|
+
coder.choose_fence()
|
|
17
|
+
coder.format_chat_chunks()
|
|
18
|
+
|
|
19
|
+
# Show progress indicator
|
|
20
|
+
total_files = len(coder.abs_fnames) + len(coder.abs_read_only_fnames)
|
|
21
|
+
if total_files > 20:
|
|
22
|
+
io.tool_output(f"Calculating tokens for {total_files} files...")
|
|
23
|
+
|
|
24
|
+
# system messages - sum of SYSTEM, STATIC, EXAMPLES, and REMINDER tags
|
|
25
|
+
system_tags = [
|
|
26
|
+
MessageTag.SYSTEM,
|
|
27
|
+
MessageTag.STATIC,
|
|
28
|
+
MessageTag.EXAMPLES,
|
|
29
|
+
MessageTag.REMINDER,
|
|
30
|
+
]
|
|
31
|
+
system_tokens = 0
|
|
32
|
+
|
|
33
|
+
for tag in system_tags:
|
|
34
|
+
msgs = ConversationManager.get_messages_dict(tag=tag)
|
|
35
|
+
if msgs:
|
|
36
|
+
system_tokens += coder.main_model.token_count(msgs)
|
|
37
|
+
|
|
38
|
+
# Calculate context block tokens (they are part of STATIC messages)
|
|
39
|
+
context_block_total = 0
|
|
40
|
+
|
|
41
|
+
# Enhanced context blocks (only for agent mode)
|
|
42
|
+
if hasattr(coder, "use_enhanced_context") and coder.use_enhanced_context:
|
|
43
|
+
# Force token calculation if it hasn't been done yet
|
|
44
|
+
if hasattr(coder, "_calculate_context_block_tokens"):
|
|
45
|
+
if not hasattr(coder, "tokens_calculated") or not coder.tokens_calculated:
|
|
46
|
+
coder._calculate_context_block_tokens()
|
|
47
|
+
|
|
48
|
+
# Calculate total context block tokens
|
|
49
|
+
if hasattr(coder, "context_block_tokens") and coder.context_block_tokens:
|
|
50
|
+
context_block_total = sum(coder.context_block_tokens.values())
|
|
51
|
+
|
|
52
|
+
# Subtract context block tokens from system token count
|
|
53
|
+
# Context blocks are part of STATIC messages, so we need to subtract them
|
|
54
|
+
system_tokens = max(0, system_tokens - context_block_total)
|
|
55
|
+
|
|
56
|
+
res.append((system_tokens, "system messages", ""))
|
|
57
|
+
|
|
58
|
+
# chat history
|
|
59
|
+
msgs_done = ConversationManager.get_messages_dict(tag=MessageTag.DONE)
|
|
60
|
+
msgs_cur = ConversationManager.get_messages_dict(tag=MessageTag.CUR)
|
|
61
|
+
tokens_done = 0
|
|
62
|
+
tokens_cur = 0
|
|
63
|
+
|
|
64
|
+
if msgs_done:
|
|
65
|
+
tokens_done = coder.main_model.token_count(msgs_done)
|
|
66
|
+
|
|
67
|
+
if msgs_cur:
|
|
68
|
+
tokens_cur = coder.main_model.token_count(msgs_cur)
|
|
69
|
+
|
|
70
|
+
if tokens_cur + tokens_done:
|
|
71
|
+
res.append((tokens_cur + tokens_done, "chat history", "use /clear to clear"))
|
|
72
|
+
|
|
73
|
+
# repo map
|
|
74
|
+
if coder.repo_map:
|
|
75
|
+
tokens = coder.main_model.token_count(
|
|
76
|
+
ConversationManager.get_messages_dict(tag=MessageTag.REPO)
|
|
77
|
+
)
|
|
78
|
+
res.append((tokens, "repository map", "use --map-tokens to resize"))
|
|
79
|
+
|
|
80
|
+
# Display enhanced context blocks (only for agent mode)
|
|
81
|
+
# Note: Context block tokens were already calculated and subtracted from system messages
|
|
82
|
+
if hasattr(coder, "use_enhanced_context") and coder.use_enhanced_context:
|
|
83
|
+
if hasattr(coder, "context_block_tokens") and coder.context_block_tokens:
|
|
84
|
+
for block_name, tokens in coder.context_block_tokens.items():
|
|
85
|
+
# Format the block name more nicely
|
|
86
|
+
display_name = block_name.replace("_", " ").title()
|
|
87
|
+
res.append(
|
|
88
|
+
(tokens, f"{display_name} context block", "/context-blocks to toggle")
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
file_res = []
|
|
92
|
+
|
|
93
|
+
# Calculate tokens for read-only files using READONLY_FILES tag
|
|
94
|
+
readonly_msgs = ConversationManager.get_messages_dict(tag=MessageTag.READONLY_FILES)
|
|
95
|
+
if readonly_msgs:
|
|
96
|
+
# Group messages by file (each file has user and assistant messages)
|
|
97
|
+
file_tokens = {}
|
|
98
|
+
for msg in readonly_msgs:
|
|
99
|
+
# Extract file name from message content
|
|
100
|
+
content = msg.get("content", "")
|
|
101
|
+
if content.startswith("File Contents"):
|
|
102
|
+
# Extract file path from "File Contents {path}:"
|
|
103
|
+
lines = content.split("\n", 1)
|
|
104
|
+
if lines:
|
|
105
|
+
file_line = lines[0]
|
|
106
|
+
if file_line.startswith("File Contents"):
|
|
107
|
+
fname = file_line[13:].rstrip(":")
|
|
108
|
+
# Calculate tokens for this message
|
|
109
|
+
tokens = coder.main_model.token_count([msg])
|
|
110
|
+
if fname not in file_tokens:
|
|
111
|
+
file_tokens[fname] = 0
|
|
112
|
+
file_tokens[fname] += tokens
|
|
113
|
+
elif "image_file" in msg:
|
|
114
|
+
# Handle image files
|
|
115
|
+
fname = msg.get("image_file")
|
|
116
|
+
if fname:
|
|
117
|
+
tokens = coder.main_model.token_count([msg])
|
|
118
|
+
if fname not in file_tokens:
|
|
119
|
+
file_tokens[fname] = 0
|
|
120
|
+
file_tokens[fname] += tokens
|
|
121
|
+
|
|
122
|
+
# Add to results
|
|
123
|
+
for fname, tokens in file_tokens.items():
|
|
124
|
+
relative_fname = coder.get_rel_fname(fname)
|
|
125
|
+
file_res.append((tokens, f"{relative_fname} (read-only)", "/drop to remove"))
|
|
126
|
+
|
|
127
|
+
# Calculate tokens for editable files using CHAT_FILES and EDIT_FILES tags
|
|
128
|
+
editable_tags = [MessageTag.CHAT_FILES, MessageTag.EDIT_FILES]
|
|
129
|
+
editable_file_tokens = {}
|
|
130
|
+
|
|
131
|
+
for tag in editable_tags:
|
|
132
|
+
msgs = ConversationManager.get_messages_dict(tag=tag)
|
|
133
|
+
if msgs:
|
|
134
|
+
for msg in msgs:
|
|
135
|
+
# Extract file name from message content
|
|
136
|
+
content = msg.get("content", "")
|
|
137
|
+
if content.startswith("File Contents"):
|
|
138
|
+
# Extract file path from "File Contents {path}:"
|
|
139
|
+
lines = content.split("\n", 1)
|
|
140
|
+
if lines:
|
|
141
|
+
file_line = lines[0]
|
|
142
|
+
if file_line.startswith("File Contents"):
|
|
143
|
+
fname = file_line[13:].rstrip(":")
|
|
144
|
+
# Calculate tokens for this message
|
|
145
|
+
tokens = coder.main_model.token_count([msg])
|
|
146
|
+
if fname not in editable_file_tokens:
|
|
147
|
+
editable_file_tokens[fname] = 0
|
|
148
|
+
editable_file_tokens[fname] += tokens
|
|
149
|
+
elif "image_file" in msg:
|
|
150
|
+
# Handle image files
|
|
151
|
+
fname = msg.get("image_file")
|
|
152
|
+
if fname:
|
|
153
|
+
tokens = coder.main_model.token_count([msg])
|
|
154
|
+
if fname not in editable_file_tokens:
|
|
155
|
+
editable_file_tokens[fname] = 0
|
|
156
|
+
editable_file_tokens[fname] += tokens
|
|
157
|
+
|
|
158
|
+
# Add editable files to results
|
|
159
|
+
for fname, tokens in editable_file_tokens.items():
|
|
160
|
+
relative_fname = coder.get_rel_fname(fname)
|
|
161
|
+
file_res.append((tokens, f"{relative_fname}", "/drop to remove"))
|
|
162
|
+
|
|
163
|
+
if file_res:
|
|
164
|
+
file_res.sort()
|
|
165
|
+
res.extend(file_res)
|
|
166
|
+
|
|
167
|
+
io.tool_output(f"Approximate context window usage for {coder.main_model.name}, in tokens:")
|
|
168
|
+
io.tool_output()
|
|
169
|
+
|
|
170
|
+
width = 8
|
|
171
|
+
cost_width = 9
|
|
172
|
+
|
|
173
|
+
def fmt(v):
|
|
174
|
+
return format(int(v), ",").rjust(width)
|
|
175
|
+
|
|
176
|
+
col_width = max(len(row[1]) for row in res) if res else 0
|
|
177
|
+
|
|
178
|
+
cost_pad = " " * cost_width
|
|
179
|
+
total = 0
|
|
180
|
+
total_cost = 0.0
|
|
181
|
+
for tk, msg, tip in res:
|
|
182
|
+
total += tk
|
|
183
|
+
cost = tk * (coder.main_model.info.get("input_cost_per_token") or 0)
|
|
184
|
+
total_cost += cost
|
|
185
|
+
msg = msg.ljust(col_width)
|
|
186
|
+
io.tool_output(f"${cost:7.4f} {fmt(tk)} {msg} {tip}") # noqa: E231
|
|
187
|
+
|
|
188
|
+
io.tool_output("=" * (width + cost_width + 1))
|
|
189
|
+
io.tool_output(f"${total_cost:7.4f} {fmt(total)} tokens total") # noqa: E231
|
|
190
|
+
|
|
191
|
+
limit = coder.main_model.info.get("max_input_tokens") or 0
|
|
192
|
+
if not limit:
|
|
193
|
+
return format_command_result(io, "tokens", "Token report generated")
|
|
194
|
+
|
|
195
|
+
remaining = limit - total
|
|
196
|
+
if remaining > 1024:
|
|
197
|
+
io.tool_output(f"{cost_pad}{fmt(remaining)} tokens remaining in context window")
|
|
198
|
+
elif remaining > 0:
|
|
199
|
+
io.tool_error(
|
|
200
|
+
f"{cost_pad}{fmt(remaining)} tokens remaining in context window (use /drop or"
|
|
201
|
+
" /clear to make space)"
|
|
202
|
+
)
|
|
203
|
+
else:
|
|
204
|
+
io.tool_error(
|
|
205
|
+
f"{cost_pad}{fmt(remaining)} tokens remaining, window exhausted (use /drop or"
|
|
206
|
+
" /clear to make space)"
|
|
207
|
+
)
|
|
208
|
+
io.tool_output(f"{cost_pad}{fmt(limit)} tokens max context window size")
|
|
209
|
+
|
|
210
|
+
return format_command_result(io, "tokens", "Token report generated")
|
|
211
|
+
|
|
212
|
+
@classmethod
|
|
213
|
+
def get_completions(cls, io, coder, args) -> List[str]:
|
|
214
|
+
"""Get completion options for tokens command."""
|
|
215
|
+
return []
|
|
216
|
+
|
|
217
|
+
@classmethod
|
|
218
|
+
def get_help(cls) -> str:
|
|
219
|
+
"""Get help text for the tokens command."""
|
|
220
|
+
help_text = super().get_help()
|
|
221
|
+
help_text += "\nUsage:\n"
|
|
222
|
+
help_text += " /tokens # Show token usage for current chat context\n"
|
|
223
|
+
help_text += "\nThis command calculates and displays the approximate token usage for:\n"
|
|
224
|
+
help_text += " - System messages\n"
|
|
225
|
+
help_text += " - Chat history\n"
|
|
226
|
+
help_text += " - Repository map\n"
|
|
227
|
+
help_text += " - Editable files in chat\n"
|
|
228
|
+
help_text += " - Read-only files\n"
|
|
229
|
+
help_text += " - Read-only stub files\n"
|
|
230
|
+
help_text += " - Enhanced context blocks (agent mode only)\n"
|
|
231
|
+
help_text += (
|
|
232
|
+
"\nThe report shows token counts, estimated costs, and remaining context window"
|
|
233
|
+
" space.\n"
|
|
234
|
+
)
|
|
235
|
+
return help_text
|