cecli-dev 1.0.0rc5__tar.gz → 1.0.0rc7__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-1.0.0rc5 → cecli_dev-1.0.0rc7}/PKG-INFO +1 -1
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/README.md +15 -6
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/__init__.py +1 -1
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/_version.py +3 -3
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/args.py +6 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/agent_coder.py +19 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/base_coder.py +32 -5
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/hashpos/hashpos.py +3 -4
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/orchestration/environment.py +53 -3
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/interruptible_input.py +8 -1
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/io.py +14 -1
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/main.py +15 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/mcp/manager.py +44 -16
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/mcp/server.py +42 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/repo.py +1 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/grep.py +18 -18
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/conf.md +3 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/options.md +8 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli_dev.egg-info/PKG-INFO +1 -1
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli_dev.egg-info/SOURCES.txt +3 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli_dev.egg-info/scm_file_list.json +3 -0
- cecli_dev-1.0.0rc7/cecli_dev.egg-info/scm_version.json +8 -0
- cecli_dev-1.0.0rc7/tests/basic/test_select_selector.py +140 -0
- cecli_dev-1.0.0rc7/tests/basic/test_spinner.py +86 -0
- cecli_dev-1.0.0rc7/tests/conftest.py +35 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/monorepo/test_repomap_workspace.py +2 -2
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/observations/test_observation_service.py +2 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/test_keepalive_resilience.py +1 -1
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/test_manager.py +6 -2
- cecli_dev-1.0.0rc7/tests/mcp/test_manager_retry.py +826 -0
- cecli_dev-1.0.0rc5/cecli_dev.egg-info/scm_version.json +0 -8
- cecli_dev-1.0.0rc5/tests/conftest.py +0 -16
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.dockerignore +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.flake8 +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.gitattributes +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/check_pypi_version.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/docker-build-test.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/docker-release.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/issues.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/pages.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/pre-commit.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/release.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/ubuntu-tests.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/windows-tests.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.github/workflows/windows_check_pypi_version.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.gitignore +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/.pre-commit-config.yaml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/CHANGELOG.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/CNAME +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/CONTRIBUTING.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/HISTORY.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/LICENSE.txt +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/MANIFEST.in +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/README.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/Dockerfile +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/benchmark.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/benchmark_classic.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/clone-exercism.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/cpp-test.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/docker.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/docker_build.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/install-docker-ubuntu.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/npm-test.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/over_time.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/plot.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/plots.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/problem_stats.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/prompts.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/refactor_tools.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/rsync.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/rungrid.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/swe-bench-lite.txt +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/swe-bench.txt +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/swe_bench.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/test_benchmark.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/variations.1.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/variations.2.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/variations.3.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/benchmark/variations.4.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/__main__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/args_formatter.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/change_tracker.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/architect_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/ask_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/chat_chunks.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/context_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/copypaste_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/editblock_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/editblock_fenced_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/editblock_func_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/editor_diff_fenced_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/editor_editblock_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/editor_whole_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/hashline_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/help_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/patch_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/search_replace.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/shell.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/single_wholefile_func_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/sub_agent_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/udiff_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/udiff_simple.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/wholefile_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/coders/wholefile_func_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/add.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/agent.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/agent_model.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/agent_tree.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/architect.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/ask.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/chat_mode.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/clear.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/code.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/command_prefix.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/commit.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/compact.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/context.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/context_blocks.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/context_management.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/copy.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/copy_context.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/core.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/diff.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/drop.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/editor.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/editor_model.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/exclude_skill.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/exit.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/git.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/hashline.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/help.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/history_search.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/hooks.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/hot_reload.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/include_skill.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/lint.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/list_mcp.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/list_sessions.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/list_skills.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/load.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/load_hook.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/load_mcp.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/load_session.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/load_skill.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/ls.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/map.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/map_refresh.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/merge.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/model.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/models.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/multiline_mode.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/paste.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/quit.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/read_only.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/read_only_stub.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/reap_agent.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/reasoning_effort.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/remove_hook.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/remove_mcp.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/remove_skill.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/report.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/reset.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/rules.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/run.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/save.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/save_session.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/settings.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/spawn_agent.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/switch_agent.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/terminal_data/linux.keytab +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/terminal_setup.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/test.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/think_tokens.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/tokens.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/undo.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/utils/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/utils/base_command.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/utils/helpers.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/utils/registry.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/utils/save_load_manager.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/voice.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/weak_model.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/web.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/commands/workspace.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/deprecated_args.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/diffs.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/dump.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/editor.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/exceptions.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/format_settings.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/help.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/help_pats.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/agents/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/agents/config.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/agents/service.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/background_commands.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/command_parser.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/conversation/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/conversation/base_message.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/conversation/files.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/conversation/integration.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/conversation/manager.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/conversation/service.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/conversation/tags.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/conversation/utils.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/copypaste.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/coroutines.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/crypto.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/file_searcher.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/file_system/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/file_system/builders.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/file_system/ignore.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/file_system/ngram_index.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/file_system/service.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/file_system/trie_index.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/grep_ast/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/grep_ast/dump.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/grep_ast/grep_ast.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/grep_ast/main.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/grep_ast/parsers.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/grep_ast/tsl.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/hashline.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/hashpos/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/hashpos/hashpos.v1.bak +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/hashpos/transformations.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/io_proxy.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/leak_detect.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/model_providers.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/monorepo/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/monorepo/config.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/monorepo/local_workspace.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/monorepo/project.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/monorepo/workspace.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/monorepo/worktree.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/nested.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/observations/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/observations/service.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/orchestration/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/orchestration/agent_proxy.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/orchestration/region_resolver.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/orchestration/safe_methods.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/orchestration/security.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/orchestration/service.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/orchestration/tool_proxy.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/plugin_manager.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/profiler.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/requests.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/responses.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/similarity.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/skills.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/helpers/threading.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/history.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/hooks/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/hooks/base.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/hooks/helpers.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/hooks/integration.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/hooks/manager.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/hooks/registry.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/hooks/service.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/hooks/types.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/linter.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/llm.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/mcp/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/mcp/oauth.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/mcp/utils.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/mdstream.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/models.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/onboarding.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/agent.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/architect.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/ask.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/base.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/context.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/copypaste.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/editblock.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/editblock_fenced.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/editblock_func.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/editor_diff_fenced.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/editor_editblock.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/editor_whole.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/hashline.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/help.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/patch.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/single_wholefile_func.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/subagent.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/udiff.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/udiff_simple.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/utils/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/utils/registry.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/utils/system.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/wholefile.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/prompts/wholefile_func.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/README.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/reasoning_tags.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/repomap.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/report.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/resources/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/resources/model-metadata.json +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/resources/model-settings.yml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/resources/providers.json +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/run_cmd.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/scrape.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/sendchat.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/sessions.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/signals.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/special.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/_yield.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/command.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/delegate.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/edit_file.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/explore_code.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/git_branch.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/git_diff.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/git_log.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/git_remote.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/git_show.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/git_status.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/ls.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/orchestrate.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/read_file.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/resource_manager.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/thinking.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/undo_change.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/update_todo_list.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/utils/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/utils/base_tool.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/utils/helpers.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/utils/output.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/utils/registry.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/utils/responses.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/validations/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tools/validations/validations.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/app.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/io.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/styles.tcss +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/completion_bar.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/file_list.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/footer.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/input_area.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/input_container.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/key_hints.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/output.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/status_bar.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/widgets/subagent_pills.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/tui/worker.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/urls.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/utils.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/versioncheck.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/voice.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/waiting.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/watch.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/watch_prompts.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/Gemfile +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/blame.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/get-started.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/help-tip.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/help.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/install.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/keys.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/model-warnings.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/multi-line.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/python-m-aider.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/recording.css +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/recording.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_includes/works-best.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_features.scss +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_footer.scss +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_hero.scss +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_info.scss +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_layout.scss +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_reset.scss +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_testimonials.scss +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_typography.scss +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/_variables.scss +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/custom/custom.scss +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/_sass/global-overrides.scss +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/adv-model-settings.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/agent-mode.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/api-keys.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/custom-commands.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/custom-system-prompts.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/dotenv.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/editor.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/hooks.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/mcp.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/model-aliases.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/model-configuration.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/model-providers.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/reasoning.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/retries.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/security.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/skills.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/subagents.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/tui.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config/workspaces.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/config.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/git.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/index.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/install/docker.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/install.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/languages.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/legal/contributor-agreement.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/legal/privacy.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/anthropic.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/azure.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/bedrock.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/cohere.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/deepseek.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/gemini.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/github.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/groq.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/lm-studio.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/ollama.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/openai-compat.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/openai.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/openrouter.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/other.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/vertex.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/warnings.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms/xai.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/llms.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/more/analytics.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/more/edit-formats.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/more/infinite-output.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/more-info.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/repomap.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/scripting.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/troubleshooting/imports.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/troubleshooting/support.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/troubleshooting/warnings.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/troubleshooting.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/commands.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/conventions.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/copypaste.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/images-urls.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/lint-test.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/modes.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/not-code.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/notifications.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/optional.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/sessions.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/tips.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/voice.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage/watch.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/docs/usage.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli/website/share/index.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli_dev.egg-info/dependency_links.txt +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli_dev.egg-info/entry_points.txt +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli_dev.egg-info/requires.txt +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/cecli_dev.egg-info/top_level.txt +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/docker/Dockerfile +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/pyproject.toml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/pytest.ini +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/common-constraints.txt +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/requirements-dev.in +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/requirements-dev.txt +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/requirements-help.in +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/requirements-help.txt +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/requirements-playwright.in +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/requirements-playwright.txt +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/requirements.in +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements/tree-sitter.in +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/requirements.txt +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/30k-image.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/Dockerfile.jekyll +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/blame.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/clean_metadata.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/compare-message-history.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/cost_analyzer.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/cost_calculator.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/dl_icons.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/filter-chat-mode.js +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/generate_providers.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/get_contributor_list.js +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/get_hashline.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/history_prompts.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/homepage.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/issues.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/jekyll_build.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/jekyll_run.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/logo_svg.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/optimize_tokens.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/pip-compile.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/recording_audio.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/redact-cast.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/rename_to_cecli.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/tmux_record.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/tsl_pack_langs.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/update-blame.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/update-docs.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/update-history.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/versionbump.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/scripts/yank-old-versions.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/setup.cfg +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/shim.pyproject.toml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/conftest.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_aws_credentials.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_background_commands.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_commands.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_custom_commands.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_deprecated.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_editblock.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_editor.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_exceptions.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_find_or_blocks.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_hashline.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_hashline_closure.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_history.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_io.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_linter.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_main.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_model_info_manager.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_model_provider_manager.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_models.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_onboarding.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_plugin_manager.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_prompts.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_reasoning.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_repo.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_repomap.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_run_cmd.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_sanity_check_repo.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_scripting.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_sendchat.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_session_args.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_session_crypto.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_sessions.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_sessions_manager.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_skills.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_special.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_ssl_verification.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_udiff.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_urls.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_voice.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_watch.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/basic/test_wholefile.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/coders/test_coder_switching.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/coders/test_copypaste_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/commands/test_compaction.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/commands/test_switch_agent.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/conversations/test_conversation_integration.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/conversations/test_conversation_system.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/chat-history.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/arduino/test.ino +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/bash/test.sh +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/c/test.c +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/chatito/test.chatito +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/clojure/test.clj +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/cpp/test.cpp +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/csharp/test.cs +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/d/test.d +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/dart/test.dart +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/elisp/test.el +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/elixir/test.ex +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/elm/test.elm +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/gleam/test.gleam +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/go/test.go +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/haskell/test.hs +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/hcl/test.tf +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/java/test.java +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/javascript/test.js +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/kotlin/test.kt +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/lua/test.lua +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/matlab/test.m +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/ocaml/test.ml +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/php/test.php +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/pony/test.pony +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/properties/test.properties +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/python/test.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/ql/test.ql +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/r/test.r +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/racket/test.rkt +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/ruby/test.rb +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/rust/test.rs +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/scala/test.scala +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/solidity/test.sol +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/swift/test.swift +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/tsx/test.tsx +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/typescript/test.ts +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/udev/test.rules +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/languages/zig/test.zig +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/sample-code-base/sample.js +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/sample-code-base/sample.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/watch.js +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/watch.lisp +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/watch.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/fixtures/watch_question.js +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/help/test_help.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/monorepo/LOCAL_WORKSPACE.md +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/monorepo/test_config.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/monorepo/test_config_active.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/monorepo/test_local_workspace.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/monorepo/test_workspace.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/helpers/test_orchestration.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/hooks/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/hooks/test_base.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/hooks/test_manager.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/hooks/test_registry.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/integration/test_agent_mcp_management.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/integration/test_mcp_management.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/conftest.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/mock_server.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/test_keepalive_concurrency.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/test_keepalive_config.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/test_keepalive_integration.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/test_keepalive_logging.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/mcp/test_keepalive_unit.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/scrape/test_playwright_disable.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/scrape/test_scrape.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/__init__.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/conftest.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/test_commands.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/test_config.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/test_delegate.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/test_finished.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/test_io_proxy.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/test_service.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/subagents/test_sub_agent_coder.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/test_requests.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_extractions.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_get_lines.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_git_branch.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_git_diff.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_grep.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_insert_block.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_read_range_execute.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_registry.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_remove_mcp_tool.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_tool_arguments.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/test_tools_load_mcp_tool.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tools/validations.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/tui/test_app.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/unit/test_load_mcp.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/unit/test_remove_mcp.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/unit/test_unit_load_mcp_tool.py +0 -0
- {cecli_dev-1.0.0rc5 → cecli_dev-1.0.0rc7}/tests/unit/test_unit_remove_mcp_tool.py +0 -0
|
@@ -26,6 +26,13 @@ without any human review or supervision! The LLM could generate dangerous python
|
|
|
26
26
|
that harms your system, like this: `import os; os.system("sudo rm -rf /")`.
|
|
27
27
|
Running inside a docker container helps limit the damage that could be done.
|
|
28
28
|
|
|
29
|
+
The current harness (`benchmark.py`) organizes the exercises as "Cats": each
|
|
30
|
+
exercise carries `cat.yaml` metadata, enabling per-test selection and
|
|
31
|
+
deterministic subsets (e.g. `--hash-re '^0'`) for spot-checking models. The
|
|
32
|
+
canonical exercises source is
|
|
33
|
+
[ErichBSchulz/cecli-cats](https://github.com/ErichBSchulz/cecli-cats), a
|
|
34
|
+
Cats-formatted conversion of the polyglot benchmark.
|
|
35
|
+
|
|
29
36
|
## Usage
|
|
30
37
|
|
|
31
38
|
There are 3 main tasks involved in benchmarking:
|
|
@@ -41,8 +48,8 @@ There are 3 main tasks involved in benchmarking:
|
|
|
41
48
|
These steps only need to be done once.
|
|
42
49
|
|
|
43
50
|
```
|
|
44
|
-
ORG=
|
|
45
|
-
REPO=
|
|
51
|
+
ORG=cecli-dev
|
|
52
|
+
REPO=cecli
|
|
46
53
|
# Clone the main repo
|
|
47
54
|
git clone https://github.com/$ORG/$REPO.git
|
|
48
55
|
|
|
@@ -50,8 +57,9 @@ git clone https://github.com/$ORG/$REPO.git
|
|
|
50
57
|
cd $REPO
|
|
51
58
|
mkdir tmp.benchmarks
|
|
52
59
|
|
|
53
|
-
# Clone the
|
|
54
|
-
git clone https://github.com
|
|
60
|
+
# Clone the canonical exercises source for the Cats harness
|
|
61
|
+
git clone https://github.com/ErichBSchulz/cecli-cats tmp.benchmarks/cecli-cats
|
|
62
|
+
|
|
55
63
|
|
|
56
64
|
# Build the docker container
|
|
57
65
|
./benchmark/docker_build.sh
|
|
@@ -69,10 +77,10 @@ Launch the docker container and run the benchmark inside it:
|
|
|
69
77
|
./benchmark/docker.sh
|
|
70
78
|
|
|
71
79
|
# Run the benchmark:
|
|
72
|
-
./benchmark/benchmark.py a-helpful-name-for-this-run --model gpt-3.5-turbo --edit-format whole --threads 10 --exercises-dir
|
|
80
|
+
./benchmark/benchmark.py a-helpful-name-for-this-run --model gpt-3.5-turbo --edit-format whole --threads 10 --exercises-dir cecli-cats
|
|
73
81
|
|
|
74
82
|
# Or with OpenRouter models (requires OPENROUTER_API_KEY environment variable):
|
|
75
|
-
./benchmark/benchmark.py openrouter-run --model openrouter/deepseek/deepseek-r1:free --edit-format whole --threads 10 --exercises-dir
|
|
83
|
+
./benchmark/benchmark.py openrouter-run --model openrouter/deepseek/deepseek-r1:free --edit-format whole --threads 10 --exercises-dir cecli-cats
|
|
76
84
|
```
|
|
77
85
|
|
|
78
86
|
The above will create a folder
|
|
@@ -156,6 +164,7 @@ Note the roadmap priorities:
|
|
|
156
164
|
|
|
157
165
|
## Limitations
|
|
158
166
|
|
|
167
|
+
- `benchmark_classic.py` is deprecated (it predates the async Coder API).
|
|
159
168
|
- These scripts are not intended for use by typical `cecli` end users.
|
|
160
169
|
- Some of the old (?deprecated) tools are written as `bash` scripts, so it will be hard to use
|
|
161
170
|
them on Windows.
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 0, 0, '
|
|
21
|
+
__version__ = version = '1.0.0rc7'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 0, 'rc7')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g7153f3816'
|
|
@@ -598,6 +598,12 @@ def get_parser(default_config_files, git_root):
|
|
|
598
598
|
default=True,
|
|
599
599
|
help="Enable/disable streaming responses (default: True)",
|
|
600
600
|
)
|
|
601
|
+
group.add_argument(
|
|
602
|
+
"--spinner",
|
|
603
|
+
action=argparse.BooleanOptionalAction,
|
|
604
|
+
default=True,
|
|
605
|
+
help="Enable/disable the spinner while waiting for LLM responses (default: True)",
|
|
606
|
+
)
|
|
601
607
|
group.add_argument(
|
|
602
608
|
"--user-input-color",
|
|
603
609
|
default="#00cc00",
|
|
@@ -315,6 +315,25 @@ class AgentCoder(Coder):
|
|
|
315
315
|
call_result = await litellm.experimental_mcp_client.call_openai_tool(
|
|
316
316
|
session=session, openai_tool=tool_call_dict
|
|
317
317
|
)
|
|
318
|
+
except Exception as e:
|
|
319
|
+
if server.is_session_expired_error(e):
|
|
320
|
+
try:
|
|
321
|
+
session = await server.reconnect()
|
|
322
|
+
call_result = await litellm.experimental_mcp_client.call_openai_tool(
|
|
323
|
+
session=session, openai_tool=tool_call_dict
|
|
324
|
+
)
|
|
325
|
+
except Exception as retry_exc:
|
|
326
|
+
self.io.tool_warning(
|
|
327
|
+
f"Executing {tool_name} on {server.name} failed after reconnect:\n"
|
|
328
|
+
f"Error: {retry_exc}"
|
|
329
|
+
)
|
|
330
|
+
return f"Error executing tool call {tool_name}: {retry_exc}"
|
|
331
|
+
else:
|
|
332
|
+
self.io.tool_warning(
|
|
333
|
+
f"Executing {tool_name} on {server.name} failed:\nError: {e}"
|
|
334
|
+
)
|
|
335
|
+
return f"Error executing tool call {tool_name}: {e}"
|
|
336
|
+
try:
|
|
318
337
|
content_parts = []
|
|
319
338
|
if call_result.content:
|
|
320
339
|
for item in call_result.content:
|
|
@@ -221,6 +221,7 @@ class Coder(metaclass=UsageMeta):
|
|
|
221
221
|
message_tokens_sent = 0
|
|
222
222
|
message_tokens_received = 0
|
|
223
223
|
message_cached_tokens = 0
|
|
224
|
+
message_cost_deferred = None
|
|
224
225
|
add_cache_headers = False
|
|
225
226
|
cache_warming_thread = None
|
|
226
227
|
num_cache_warming_pings = 0
|
|
@@ -1497,6 +1498,10 @@ class Coder(metaclass=UsageMeta):
|
|
|
1497
1498
|
self.show_announcements()
|
|
1498
1499
|
self.suppress_announcements_for_next_prompt = True
|
|
1499
1500
|
|
|
1501
|
+
if self.message_cost_deferred and not self.io.spinner_active:
|
|
1502
|
+
self.io.tool_output(self.message_cost_deferred)
|
|
1503
|
+
self.message_cost_deferred = None
|
|
1504
|
+
|
|
1500
1505
|
await self.io.recreate_input()
|
|
1501
1506
|
await self.io.input_task
|
|
1502
1507
|
user_message = self.io.input_task.result()
|
|
@@ -1645,6 +1650,10 @@ class Coder(metaclass=UsageMeta):
|
|
|
1645
1650
|
self.show_announcements()
|
|
1646
1651
|
self.suppress_announcements_for_next_prompt = True
|
|
1647
1652
|
|
|
1653
|
+
if self.message_cost_deferred and not self.io.spinner_active:
|
|
1654
|
+
self.io.tool_output(self.message_cost_deferred)
|
|
1655
|
+
self.message_cost_deferred = None
|
|
1656
|
+
|
|
1648
1657
|
# Stop spinner before showing announcements or getting input
|
|
1649
1658
|
self.io.stop_spinner()
|
|
1650
1659
|
self.copy_context()
|
|
@@ -2512,7 +2521,11 @@ class Coder(metaclass=UsageMeta):
|
|
|
2512
2521
|
if not self.tui:
|
|
2513
2522
|
spinner_text += f" • ${self.format_cost(self.total_cost)} session"
|
|
2514
2523
|
|
|
2515
|
-
self.io.
|
|
2524
|
+
if self.io.spinner_active:
|
|
2525
|
+
self.io.start_spinner(spinner_text, coder_uuid=getattr(self, "uuid", None))
|
|
2526
|
+
else:
|
|
2527
|
+
self.message_cost_deferred = spinner_text
|
|
2528
|
+
|
|
2516
2529
|
if self.stream:
|
|
2517
2530
|
self.mdstream = True
|
|
2518
2531
|
else:
|
|
@@ -2635,6 +2648,10 @@ class Coder(metaclass=UsageMeta):
|
|
|
2635
2648
|
|
|
2636
2649
|
# Ensure any waiting spinner is stopped
|
|
2637
2650
|
self.io.start_spinner("Processing Answer...", coder_uuid=getattr(self, "uuid", None))
|
|
2651
|
+
|
|
2652
|
+
if not self.io.spinner_active:
|
|
2653
|
+
self.partial_response_content = self.get_multi_response_content_in_progress(True)
|
|
2654
|
+
|
|
2638
2655
|
self.remove_reasoning_content()
|
|
2639
2656
|
self.multi_response_content = ""
|
|
2640
2657
|
|
|
@@ -2980,12 +2997,22 @@ class Coder(metaclass=UsageMeta):
|
|
|
2980
2997
|
continue
|
|
2981
2998
|
|
|
2982
2999
|
async def do_tool_call():
|
|
3000
|
+
nonlocal session
|
|
2983
3001
|
from litellm import experimental_mcp_client
|
|
2984
3002
|
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
|
|
2988
|
-
|
|
3003
|
+
try:
|
|
3004
|
+
return await experimental_mcp_client.call_openai_tool(
|
|
3005
|
+
session=session,
|
|
3006
|
+
openai_tool=new_tool_call,
|
|
3007
|
+
)
|
|
3008
|
+
except Exception as e:
|
|
3009
|
+
if server.is_session_expired_error(e):
|
|
3010
|
+
session = await server.reconnect()
|
|
3011
|
+
return await experimental_mcp_client.call_openai_tool(
|
|
3012
|
+
session=session,
|
|
3013
|
+
openai_tool=new_tool_call,
|
|
3014
|
+
)
|
|
3015
|
+
raise
|
|
2989
3016
|
|
|
2990
3017
|
call_result, interrupted = await coroutines.interruptible(
|
|
2991
3018
|
do_tool_call(), self.interrupt_event
|
|
@@ -101,15 +101,14 @@ class HashPos:
|
|
|
101
101
|
packed = (line_hash << 20) | (idx_bits << 6) | occ_bits
|
|
102
102
|
|
|
103
103
|
res = ""
|
|
104
|
-
for
|
|
105
|
-
res += self.B1024[packed
|
|
106
|
-
packed //= 1024
|
|
104
|
+
for i in range(3, -1, -1):
|
|
105
|
+
res += self.B1024[(packed >> (10 * i)) & 0x3FF]
|
|
107
106
|
return res
|
|
108
107
|
|
|
109
108
|
def unpack_public_id(self, public_id: str) -> tuple[int, int, int]:
|
|
110
109
|
packed = 0
|
|
111
110
|
for i, char in enumerate(public_id):
|
|
112
|
-
packed |= self.B1024.index(char) << (10 * i)
|
|
111
|
+
packed |= self.B1024.index(char) << (10 * (3 - i))
|
|
113
112
|
|
|
114
113
|
occ_bits = packed & 0x3F
|
|
115
114
|
idx_bits = (packed >> 6) & 0x3FFF
|
|
@@ -478,7 +478,8 @@ def build_orchestration_context_block(agent_config: dict[str, Any]) -> str | Non
|
|
|
478
478
|
return None
|
|
479
479
|
|
|
480
480
|
return """<context name="orchestration" from="agent">
|
|
481
|
-
The `Orchestrate` tool lets you
|
|
481
|
+
The `Orchestrate` tool lets you batch multiple tool calls in a single step by writing Python code in a limited, secure sandbox.
|
|
482
|
+
This is much more efficient than making individual tool calls for loop-heavy workflows.
|
|
482
483
|
Variables and methods defined in a script are persisted in subsequent turns.
|
|
483
484
|
As such, results from previous calls can be reused and helper methods can be defined to enhance ease of use within the environment.
|
|
484
485
|
|
|
@@ -495,6 +496,10 @@ As such, results from previous calls can be reused and helper methods can be def
|
|
|
495
496
|
| `Agent.peek(result)` | Inspect a tool result's structure and leaf content — returns a string; use `print(Agent.peek(result))` to see it |
|
|
496
497
|
| `Agent.get_value(result, path, default?)` | Safely access nested values in tool results using dot-notation (e.g. `"result.0.content"`) |
|
|
497
498
|
|
|
499
|
+
| `Agent.get_content_id(path, text)` | Resolve a content ID from `@L{num}` or line text for EditFile |
|
|
500
|
+
| `Agent.resolve_regions(path, regions)` | Batch-resolve text patterns to content IDs. Use `start_line_hint` / `end_line_hint` in region spec entries for disambiguation (supports `@L<num>`, `@A{{regex}}`, `@B{{regex}}` — same hint syntax as ReadFile). Ambiguous patterns raise immediately. The returned `AgentRegion` has `.get_start(name)`, `.get_end(name)`, `.names()`, `.get(name)` |
|
|
501
|
+
| `Agent.edit_region(path, edits)` | Thin wrapper around EditFile that accepts pre-resolved region dicts `{"start": content_id, "end": content_id}`. Use with `Agent.resolve_regions()` and `regions.get(name)` |
|
|
502
|
+
|
|
498
503
|
| `await Agent.sleep(seconds)` | Pause execution (0-120s max) |
|
|
499
504
|
|
|
500
505
|
| `gather(**named_tasks)` | Run tasks concurrently; returns an iterable with `.key` / `["key"]` access |
|
|
@@ -524,8 +529,8 @@ All other module imports will fail.
|
|
|
524
529
|
```python
|
|
525
530
|
tool = Agent.get_tool("delegate")
|
|
526
531
|
tool_outputs = await gather(
|
|
527
|
-
a=tool.call(prompt="A"
|
|
528
|
-
b=tool.call(prompt="B"
|
|
532
|
+
a=tool.call(prompt="A"),
|
|
533
|
+
b=tool.call(prompt="B"),
|
|
529
534
|
)
|
|
530
535
|
print(tool_outputs.a) # attribute access
|
|
531
536
|
print(tool_outputs["b"]) # key access
|
|
@@ -547,6 +552,51 @@ to extract specific fields by dot-path::
|
|
|
547
552
|
Result list items are plain dicts — use item['content'] / item.get('content')
|
|
548
553
|
and item['_'] / item.get('_') to access data and metadata respectively.
|
|
549
554
|
|
|
555
|
+
### Creating New Files
|
|
556
|
+
|
|
557
|
+
Use `ResourceManager` to create an empty file, then `EditFile` to write
|
|
558
|
+
initial content (use `@000` for start/end on empty files)::
|
|
559
|
+
|
|
560
|
+
rm = Agent.get_tool("ResourceManager")
|
|
561
|
+
edit = Agent.get_tool("EditFile")
|
|
562
|
+
|
|
563
|
+
await rm.call(create=["path/to/new_file.py"])
|
|
564
|
+
await edit.call(edits=[{
|
|
565
|
+
"file_path": "path/to/new_file.py",
|
|
566
|
+
"operation": "replace",
|
|
567
|
+
"start_line": "@000",
|
|
568
|
+
"end_line": "@000",
|
|
569
|
+
"text": "def greet(name):\n return f\"Hello, {name}!\"\n",
|
|
570
|
+
}])
|
|
571
|
+
|
|
572
|
+
After creation, use `resolve_regions` and `edit_region` for targeted edits.
|
|
573
|
+
|
|
574
|
+
### Editing with Regions
|
|
575
|
+
|
|
576
|
+
Use `Agent.resolve_regions()` to convert text patterns into content IDs, then `Agent.edit_region()` to apply edits using the resolved IDs.
|
|
577
|
+
|
|
578
|
+
#### Step 1 — resolve region boundaries once
|
|
579
|
+
|
|
580
|
+
```python
|
|
581
|
+
regions = Agent.resolve_regions("foo.py", [
|
|
582
|
+
{"name": "my_func", "start": "def my_func", "end": "return result"},
|
|
583
|
+
{"name": "init", "start": "def __init__", "end": "self.x = x"},
|
|
584
|
+
])
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
#### Step 2 — Use `regions.get(name)` with `Agent.edit_region()` (recommended shorthand)
|
|
588
|
+
|
|
589
|
+
```python
|
|
590
|
+
await Agent.edit_region(
|
|
591
|
+
file_path="foo.py",
|
|
592
|
+
edits=[
|
|
593
|
+
{"region": regions.get("my_func"), "text": "def my_func():\n return 42"},
|
|
594
|
+
],
|
|
595
|
+
)
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
#### Alternative: Call `EditFile` directly with `regions.get_start()` / `regions.get_end()`
|
|
599
|
+
|
|
550
600
|
### Gotchas
|
|
551
601
|
|
|
552
602
|
- **Types**: compare with `typeof(x) == dict` or `isinstance(x, dict)` — NOT `typeof(x) == "dict"`
|
|
@@ -17,7 +17,14 @@ class InterruptibleInput:
|
|
|
17
17
|
raise RuntimeError("InterruptibleInput is Unix-only (requires selectable stdin).")
|
|
18
18
|
|
|
19
19
|
self._cancel = threading.Event()
|
|
20
|
-
|
|
20
|
+
|
|
21
|
+
# The default selector (Kqueue on macOS, Epoll on Linux) cannot
|
|
22
|
+
# handle pipe-based stdin (e.g. when running inside Emacs comint-mode).
|
|
23
|
+
# Fall back to SelectSelector which works with any fd that supports select().
|
|
24
|
+
if not sys.stdin.isatty():
|
|
25
|
+
self._sel = selectors.SelectSelector()
|
|
26
|
+
else:
|
|
27
|
+
self._sel = selectors.DefaultSelector()
|
|
21
28
|
|
|
22
29
|
# self-pipe to wake up select() from interrupt()
|
|
23
30
|
self._r, self._w = os.pipe()
|
|
@@ -368,6 +368,7 @@ class InputOutput:
|
|
|
368
368
|
notifications_command=None,
|
|
369
369
|
notification_bell=False,
|
|
370
370
|
verbose=False,
|
|
371
|
+
show_spinner=True,
|
|
371
372
|
):
|
|
372
373
|
self.console = Console()
|
|
373
374
|
self.pretty = pretty
|
|
@@ -498,6 +499,7 @@ class InputOutput:
|
|
|
498
499
|
fancy_input = False
|
|
499
500
|
|
|
500
501
|
# Spinner state
|
|
502
|
+
self.spinner_active = show_spinner
|
|
501
503
|
self.spinner_running = False
|
|
502
504
|
self.spinner_text = ""
|
|
503
505
|
self.last_spinner_text = ""
|
|
@@ -506,7 +508,7 @@ class InputOutput:
|
|
|
506
508
|
self.spinner_last_frame_index = 0
|
|
507
509
|
self.unicode_palette = "░█"
|
|
508
510
|
self.fallback_spinner = None
|
|
509
|
-
self.fallback_spinner_enabled =
|
|
511
|
+
self.fallback_spinner_enabled = show_spinner
|
|
510
512
|
|
|
511
513
|
self.interruptible_input = None
|
|
512
514
|
|
|
@@ -568,7 +570,12 @@ class InputOutput:
|
|
|
568
570
|
"""Start the spinner."""
|
|
569
571
|
self.stop_spinner()
|
|
570
572
|
|
|
573
|
+
if not self.spinner_active:
|
|
574
|
+
return
|
|
575
|
+
|
|
571
576
|
if self.prompt_session:
|
|
577
|
+
if not self.fallback_spinner_enabled:
|
|
578
|
+
return
|
|
572
579
|
self.spinner_running = True
|
|
573
580
|
self.spinner_text = text
|
|
574
581
|
self.spinner_frame_index = self.spinner_last_frame_index
|
|
@@ -581,9 +588,15 @@ class InputOutput:
|
|
|
581
588
|
self.fallback_spinner.step()
|
|
582
589
|
|
|
583
590
|
def update_spinner(self, text):
|
|
591
|
+
if not self.spinner_active:
|
|
592
|
+
return
|
|
593
|
+
|
|
584
594
|
self.spinner_text = text
|
|
585
595
|
|
|
586
596
|
def update_spinner_suffix(self, text=None):
|
|
597
|
+
if not self.spinner_active:
|
|
598
|
+
return
|
|
599
|
+
|
|
587
600
|
if text:
|
|
588
601
|
self.spinner_suffix = f" • {text[:16].strip()}"
|
|
589
602
|
else:
|
|
@@ -36,6 +36,20 @@ from dotenv import load_dotenv
|
|
|
36
36
|
if sys.platform == "win32":
|
|
37
37
|
if hasattr(asyncio, "set_event_loop_policy"):
|
|
38
38
|
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
|
|
39
|
+
elif sys.platform == "darwin":
|
|
40
|
+
# The default KqueueSelector cannot handle pipe-based stdin
|
|
41
|
+
# (e.g. when running inside Emacs comint-mode). Fall back to
|
|
42
|
+
# SelectSelector which works with any file descriptor that supports select().
|
|
43
|
+
import selectors
|
|
44
|
+
|
|
45
|
+
if not sys.stdin.isatty():
|
|
46
|
+
_original_event_loop_policy = asyncio.DefaultEventLoopPolicy
|
|
47
|
+
|
|
48
|
+
class _SelectSelectorPolicy(asyncio.DefaultEventLoopPolicy):
|
|
49
|
+
def new_event_loop(self):
|
|
50
|
+
return asyncio.SelectorEventLoop(selectors.SelectSelector())
|
|
51
|
+
|
|
52
|
+
asyncio.set_event_loop_policy(_SelectSelectorPolicy())
|
|
39
53
|
|
|
40
54
|
from .dump import dump # noqa
|
|
41
55
|
|
|
@@ -704,6 +718,7 @@ async def main_async(
|
|
|
704
718
|
notifications_command=args.notifications_command,
|
|
705
719
|
notification_bell=args.notification_bell,
|
|
706
720
|
verbose=args.verbose,
|
|
721
|
+
show_spinner=args.spinner,
|
|
707
722
|
)
|
|
708
723
|
|
|
709
724
|
validate_tui_args(args)
|
|
@@ -160,17 +160,46 @@ class McpServerManager:
|
|
|
160
160
|
self._server_tools[server.name] = get_local_tool_schemas()
|
|
161
161
|
return True
|
|
162
162
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
163
|
+
# Retry with exponential backoff for transient connection failures.
|
|
164
|
+
# Note: This also fixes a latent bug where asyncio.CancelledError was
|
|
165
|
+
# silently caught and treated as a connection failure. CancelledError is
|
|
166
|
+
# now re-raised to properly propagate cancellation.
|
|
167
|
+
# When io is None (e.g., during from_servers before IO is assigned),
|
|
168
|
+
# _log_warning and _log_error silently return — retries still happen
|
|
169
|
+
# but with no user-visible feedback. This is intentional.
|
|
170
|
+
max_retries = 3 if server.name != "unnamed-server" else 1
|
|
171
|
+
delay = 1.0
|
|
172
|
+
backoff = 2.0
|
|
173
|
+
max_delay = 30.0
|
|
174
|
+
|
|
175
|
+
for attempt in range(1, max_retries + 1):
|
|
176
|
+
try:
|
|
177
|
+
session = await server.connect()
|
|
178
|
+
tools = await experimental_mcp_client.load_mcp_tools(
|
|
179
|
+
session=session, format="openai"
|
|
180
|
+
)
|
|
181
|
+
self._server_tools[server.name] = tools
|
|
182
|
+
self._connected_servers.add(server)
|
|
183
|
+
self._log_verbose(f"Connected to MCP server: {name}")
|
|
184
|
+
return True
|
|
185
|
+
except asyncio.CancelledError:
|
|
186
|
+
raise
|
|
187
|
+
except Exception as e:
|
|
188
|
+
if attempt < max_retries and server.name != "unnamed-server":
|
|
189
|
+
self._log_warning(
|
|
190
|
+
f"Connection attempt {attempt} failed for {name}, "
|
|
191
|
+
f"retrying in {delay}s... ({e})"
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
await asyncio.sleep(delay)
|
|
195
|
+
delay = min(delay * backoff, max_delay)
|
|
196
|
+
else:
|
|
197
|
+
if server.name != "unnamed-server":
|
|
198
|
+
self._log_error(
|
|
199
|
+
f"Failed to connect to MCP server {name} "
|
|
200
|
+
f"after {max_retries} attempts: {e}"
|
|
201
|
+
)
|
|
202
|
+
return False
|
|
174
203
|
|
|
175
204
|
async def disconnect_server(self, name: str) -> bool:
|
|
176
205
|
"""
|
|
@@ -281,11 +310,10 @@ class McpServerManager:
|
|
|
281
310
|
success = await mcp_manager.add_server(server, connect=False)
|
|
282
311
|
return (server, success)
|
|
283
312
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
return (server, False)
|
|
313
|
+
# connect_server now has built-in retry logic, so we only need
|
|
314
|
+
# a single call here — no separate retry loop needed.
|
|
315
|
+
success = await mcp_manager.add_server(server, connect=True)
|
|
316
|
+
return (server, success)
|
|
289
317
|
|
|
290
318
|
tasks = []
|
|
291
319
|
for server in servers:
|
|
@@ -130,6 +130,48 @@ class McpServer:
|
|
|
130
130
|
finally:
|
|
131
131
|
self.session = None
|
|
132
132
|
|
|
133
|
+
async def reconnect(self):
|
|
134
|
+
"""Disconnect and reconnect, establishing a fresh session.
|
|
135
|
+
|
|
136
|
+
Used when the server has invalidated the current session (e.g., after
|
|
137
|
+
a server restart), as indicated by an HTTP 404 response per the MCP
|
|
138
|
+
protocol specification.
|
|
139
|
+
|
|
140
|
+
Returns:
|
|
141
|
+
ClientSession: The new active session
|
|
142
|
+
"""
|
|
143
|
+
if self.io:
|
|
144
|
+
self.io.tool_warning(f"MCP session expired for {self.name}, reconnecting...")
|
|
145
|
+
await self.disconnect()
|
|
146
|
+
self.exit_stack = AsyncExitStack()
|
|
147
|
+
return await self.connect()
|
|
148
|
+
|
|
149
|
+
@staticmethod
|
|
150
|
+
def is_session_expired_error(exc):
|
|
151
|
+
"""Check if an exception indicates an expired MCP session (HTTP 404).
|
|
152
|
+
|
|
153
|
+
Per the MCP specification, when a server terminates a session it
|
|
154
|
+
responds with HTTP 404 Not Found. The client MUST then start a new
|
|
155
|
+
session by sending a new InitializeRequest.
|
|
156
|
+
|
|
157
|
+
Args:
|
|
158
|
+
exc: The exception to check
|
|
159
|
+
|
|
160
|
+
Returns:
|
|
161
|
+
bool: True if the error indicates a 404 session expiry
|
|
162
|
+
"""
|
|
163
|
+
import httpx
|
|
164
|
+
|
|
165
|
+
if isinstance(exc, httpx.HTTPStatusError) and exc.response.status_code == 404:
|
|
166
|
+
return True
|
|
167
|
+
|
|
168
|
+
# Some transports wrap the status in the exception message
|
|
169
|
+
exc_str = str(exc).lower()
|
|
170
|
+
if "404" in exc_str and ("session" in exc_str or "not found" in exc_str):
|
|
171
|
+
return True
|
|
172
|
+
|
|
173
|
+
return False
|
|
174
|
+
|
|
133
175
|
|
|
134
176
|
class HttpBasedMcpServer(McpServer):
|
|
135
177
|
"""Base class for HTTP-based MCP servers (HTTP streaming and SSE)."""
|
|
@@ -228,25 +228,18 @@ class Tool(BaseTool):
|
|
|
228
228
|
"default": True,
|
|
229
229
|
"description": "Whether to perform a case-insensitive search.",
|
|
230
230
|
},
|
|
231
|
-
"count": {
|
|
232
|
-
"type": "boolean",
|
|
233
|
-
"default": True,
|
|
234
|
-
"description": (
|
|
235
|
-
"Include match counts per file in the output summary."
|
|
236
|
-
),
|
|
237
|
-
},
|
|
238
231
|
"context_before": {
|
|
239
232
|
"type": "integer",
|
|
240
233
|
"default": 2,
|
|
241
234
|
"description": (
|
|
242
|
-
"Number of context lines to show before each match."
|
|
235
|
+
"Number of context lines to show before each match. Max 5"
|
|
243
236
|
),
|
|
244
237
|
},
|
|
245
238
|
"context_after": {
|
|
246
239
|
"type": "integer",
|
|
247
240
|
"default": 2,
|
|
248
241
|
"description": (
|
|
249
|
-
"Number of context lines to show after each match."
|
|
242
|
+
"Number of context lines to show after each match. Max 5"
|
|
250
243
|
),
|
|
251
244
|
},
|
|
252
245
|
},
|
|
@@ -362,8 +355,8 @@ class Tool(BaseTool):
|
|
|
362
355
|
directory = search_op.get("directory", search_op.get("path", "."))
|
|
363
356
|
use_regex = search_op.get("use_regex", False)
|
|
364
357
|
case_insensitive = search_op.get("case_insensitive", True)
|
|
365
|
-
context_before = search_op.get("context_before", 2)
|
|
366
|
-
context_after = search_op.get("context_after", 2)
|
|
358
|
+
context_before = max(min(int(search_op.get("context_before", 2)), 5), 0)
|
|
359
|
+
context_after = max(min(int(search_op.get("context_after", 2)), 5), 0)
|
|
367
360
|
count_enabled = search_op.get("count", True)
|
|
368
361
|
|
|
369
362
|
op_result = {
|
|
@@ -502,7 +495,7 @@ class Tool(BaseTool):
|
|
|
502
495
|
MAX_MATCHES_PER_FILE = 10
|
|
503
496
|
MAX_FILES = 20
|
|
504
497
|
|
|
505
|
-
truncated_files =
|
|
498
|
+
truncated_files = {}
|
|
506
499
|
total_matches = 0
|
|
507
500
|
total_files = 0
|
|
508
501
|
|
|
@@ -510,14 +503,21 @@ class Tool(BaseTool):
|
|
|
510
503
|
file_lines = pf["content"].splitlines()
|
|
511
504
|
# Find actual match lines (lines with `:LINE:` pattern)
|
|
512
505
|
filepath_escaped = re.escape(pf["path"])
|
|
513
|
-
match_line_re = re.compile(r"^" + filepath_escaped + r"
|
|
506
|
+
match_line_re = re.compile(r"^" + filepath_escaped + r":(\d+):")
|
|
514
507
|
match_lines_found = [ln for ln in file_lines if match_line_re.match(ln)]
|
|
515
508
|
|
|
516
509
|
# Normalize path to be relative to repo root
|
|
517
510
|
pf["path"] = os.path.relpath(pf["path"], repo.root)
|
|
518
511
|
|
|
519
512
|
if len(match_lines_found) > MAX_MATCHES_PER_FILE:
|
|
520
|
-
|
|
513
|
+
# Extract line numbers from excess matches (beyond first 10)
|
|
514
|
+
extra_lines = match_lines_found[MAX_MATCHES_PER_FILE:]
|
|
515
|
+
extra_line_nums = []
|
|
516
|
+
for xline in extra_lines:
|
|
517
|
+
xm = match_line_re.match(xline)
|
|
518
|
+
if xm:
|
|
519
|
+
extra_line_nums.append(int(xm.group(1)))
|
|
520
|
+
truncated_files[pf["path"]] = extra_line_nums
|
|
521
521
|
trimmed = "\n".join(match_lines_found[:MAX_MATCHES_PER_FILE])
|
|
522
522
|
pf["content"] = trimmed
|
|
523
523
|
total_matches += pf.get("count_from_pass", 0)
|
|
@@ -536,7 +536,7 @@ class Tool(BaseTool):
|
|
|
536
536
|
{
|
|
537
537
|
"file": pf["path"],
|
|
538
538
|
"match_count": pf.get("count_from_pass", 0),
|
|
539
|
-
"
|
|
539
|
+
"additional_matched_lines": truncated_files.get(pf["path"], []),
|
|
540
540
|
"content": pf["content"],
|
|
541
541
|
}
|
|
542
542
|
for pf in parsed_files[:MAX_FILES]
|
|
@@ -573,7 +573,7 @@ class Tool(BaseTool):
|
|
|
573
573
|
response = ToolResponse(cls.NORM_NAME, result_type=cls.RESULT_TYPE)
|
|
574
574
|
for op_result in all_operation_results:
|
|
575
575
|
files = op_result.get("files", [])
|
|
576
|
-
metadata =
|
|
576
|
+
metadata = op_result.copy()
|
|
577
577
|
|
|
578
578
|
# Build a human-readable string summary as content
|
|
579
579
|
pattern = op_result.get("pattern", "")
|
|
@@ -584,7 +584,7 @@ class Tool(BaseTool):
|
|
|
584
584
|
else:
|
|
585
585
|
lines = [f"[{pattern}]"]
|
|
586
586
|
for f in files:
|
|
587
|
-
truncated_mark = " (truncated)" if f.get("
|
|
587
|
+
truncated_mark = " (truncated)" if f.get("additional_matched_lines") else ""
|
|
588
588
|
lines.append(f"{f['file']}: {f['match_count']} match(es){truncated_mark}")
|
|
589
589
|
if op_result.get("has_more_files"):
|
|
590
590
|
lines.append(f"... ({op_result['total_files']} files total)")
|
|
@@ -616,7 +616,7 @@ class Tool(BaseTool):
|
|
|
616
616
|
for i, search_op in enumerate(searches):
|
|
617
617
|
pattern = search_op.get("pattern", "")
|
|
618
618
|
file_pattern = search_op.get("file_glob", "*")
|
|
619
|
-
directory = search_op.get("directory", ".")
|
|
619
|
+
directory = search_op.get("directory", search_op.get("path", "."))
|
|
620
620
|
use_regex = search_op.get("use_regex", False)
|
|
621
621
|
case_insensitive = search_op.get("case_insensitive", True)
|
|
622
622
|
context_before = search_op.get("context_before", 2)
|