cecli-dev 1.0.0rc9__tar.gz → 1.0.0rc11__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.0rc9 → cecli_dev-1.0.0rc11}/PKG-INFO +1 -1
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/_version.py +3 -3
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/orchestration/agent_proxy.py +10 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/orchestration/environment.py +27 -18
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/orchestration/safe_methods.py +297 -4
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/orchestration/security.py +13 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/command.py +21 -5
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli_dev.egg-info/PKG-INFO +1 -1
- cecli_dev-1.0.0rc11/cecli_dev.egg-info/scm_version.json +8 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/mcp/test_keepalive_integration.py +31 -4
- cecli_dev-1.0.0rc9/cecli_dev.egg-info/scm_version.json +0 -8
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/.dockerignore +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/.flake8 +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/.gitattributes +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/.github/workflows/check_pypi_version.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/.github/workflows/docker-build-test.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/.github/workflows/docker-release.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/.github/workflows/issues.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/.github/workflows/pages.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/.github/workflows/pre-commit.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/.github/workflows/release.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/.github/workflows/ubuntu-tests.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/.github/workflows/windows-tests.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/.github/workflows/windows_check_pypi_version.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/.gitignore +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/.pre-commit-config.yaml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/CHANGELOG.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/CNAME +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/CONTRIBUTING.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/HISTORY.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/LICENSE.txt +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/MANIFEST.in +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/README.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/Dockerfile +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/README.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/benchmark.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/benchmark_classic.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/clone-exercism.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/cpp-test.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/docker.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/docker_build.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/install-docker-ubuntu.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/npm-test.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/over_time.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/plot.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/plots.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/problem_stats.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/prompts.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/refactor_tools.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/rsync.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/rungrid.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/swe-bench-lite.txt +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/swe-bench.txt +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/swe_bench.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/test_benchmark.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/variations.1.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/variations.2.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/variations.3.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/benchmark/variations.4.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/__main__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/args.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/args_formatter.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/change_tracker.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/agent_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/architect_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/ask_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/base_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/chat_chunks.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/context_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/copypaste_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/editblock_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/editblock_fenced_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/editblock_func_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/editor_diff_fenced_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/editor_editblock_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/editor_whole_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/hashline_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/help_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/patch_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/search_replace.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/shell.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/single_wholefile_func_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/sub_agent_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/udiff_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/udiff_simple.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/wholefile_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/coders/wholefile_func_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/add.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/agent.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/agent_model.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/agent_tree.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/architect.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/ask.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/chat_mode.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/clear.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/code.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/command_prefix.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/commit.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/compact.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/context.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/context_blocks.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/context_management.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/copy.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/copy_context.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/core.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/diff.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/drop.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/editor.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/editor_model.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/exclude_skill.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/exit.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/git.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/hashline.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/help.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/history_search.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/hooks.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/hot_reload.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/include_skill.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/lint.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/list_mcp.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/list_sessions.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/list_skills.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/load.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/load_hook.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/load_mcp.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/load_session.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/load_skill.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/ls.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/map.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/map_refresh.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/merge.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/model.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/models.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/multiline_mode.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/paste.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/quit.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/read_only.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/read_only_stub.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/reap_agent.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/reasoning_effort.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/remove_hook.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/remove_mcp.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/remove_skill.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/report.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/reset.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/rules.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/run.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/save.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/save_session.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/settings.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/spawn_agent.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/switch_agent.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/terminal_data/linux.keytab +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/terminal_setup.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/test.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/think_tokens.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/tokens.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/undo.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/utils/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/utils/base_command.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/utils/helpers.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/utils/registry.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/utils/save_load_manager.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/voice.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/weak_model.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/web.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/commands/workspace.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/deprecated_args.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/diffs.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/dump.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/editor.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/exceptions.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/format_settings.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/help.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/help_pats.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/agents/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/agents/config.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/agents/service.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/background_commands.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/command_parser.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/conversation/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/conversation/base_message.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/conversation/files.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/conversation/integration.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/conversation/manager.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/conversation/service.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/conversation/tags.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/conversation/utils.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/copypaste.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/coroutines.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/crypto.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/file_searcher.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/file_system/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/file_system/builders.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/file_system/ignore.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/file_system/ngram_index.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/file_system/service.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/file_system/trie_index.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/grep_ast/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/grep_ast/dump.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/grep_ast/grep_ast.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/grep_ast/main.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/grep_ast/parsers.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/grep_ast/tsl.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/hashline.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/hashpos/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/hashpos/hashpos.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/hashpos/hashpos.v1.bak +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/hashpos/transformations.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/io_proxy.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/leak_detect.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/lock_detect.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/model_providers.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/monorepo/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/monorepo/config.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/monorepo/local_workspace.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/monorepo/project.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/monorepo/workspace.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/monorepo/worktree.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/nested.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/observations/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/observations/service.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/orchestration/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/orchestration/region_resolver.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/orchestration/service.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/orchestration/tool_proxy.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/plugin_manager.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/profiler.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/requests.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/responses.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/similarity.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/skills.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/helpers/threading.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/history.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/hooks/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/hooks/base.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/hooks/helpers.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/hooks/integration.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/hooks/manager.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/hooks/registry.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/hooks/service.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/hooks/types.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/interruptible_input.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/io.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/linter.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/llm.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/main.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/mcp/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/mcp/manager.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/mcp/oauth.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/mcp/server.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/mcp/utils.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/mdstream.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/models.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/onboarding.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/agent.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/architect.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/ask.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/base.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/context.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/copypaste.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/editblock.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/editblock_fenced.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/editblock_func.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/editor_diff_fenced.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/editor_editblock.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/editor_whole.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/hashline.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/help.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/patch.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/single_wholefile_func.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/subagent.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/udiff.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/udiff_simple.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/utils/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/utils/registry.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/utils/system.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/wholefile.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/prompts/wholefile_func.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/README.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/reasoning_tags.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/repo.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/repomap.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/report.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/resources/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/resources/model-metadata.json +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/resources/model-settings.yml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/resources/providers.json +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/run_cmd.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/scrape.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/sendchat.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/sessions.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/signals.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/special.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/_yield.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/delegate.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/edit_file.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/explore_code.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/git_branch.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/git_diff.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/git_log.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/git_remote.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/git_show.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/git_status.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/grep.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/ls.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/orchestrate.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/read_file.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/resource_manager.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/thinking.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/undo_change.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/update_todo_list.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/utils/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/utils/base_tool.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/utils/helpers.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/utils/output.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/utils/registry.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/utils/responses.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/validations/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tools/validations/validations.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tui/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tui/app.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tui/io.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tui/styles.tcss +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tui/widgets/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tui/widgets/completion_bar.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tui/widgets/file_list.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tui/widgets/footer.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tui/widgets/input_area.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tui/widgets/input_container.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tui/widgets/key_hints.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tui/widgets/output.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tui/widgets/status_bar.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tui/widgets/subagent_pills.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/tui/worker.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/urls.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/utils.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/versioncheck.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/voice.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/waiting.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/watch.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/watch_prompts.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/Gemfile +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_includes/blame.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_includes/get-started.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_includes/help-tip.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_includes/help.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_includes/install.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_includes/keys.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_includes/model-warnings.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_includes/multi-line.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_includes/python-m-aider.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_includes/recording.css +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_includes/recording.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_includes/works-best.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_sass/_features.scss +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_sass/_footer.scss +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_sass/_hero.scss +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_sass/_info.scss +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_sass/_layout.scss +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_sass/_reset.scss +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_sass/_testimonials.scss +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_sass/_typography.scss +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_sass/_variables.scss +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_sass/custom/custom.scss +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/_sass/global-overrides.scss +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/adv-model-settings.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/agent-mode.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/api-keys.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/conf.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/custom-commands.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/custom-system-prompts.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/dotenv.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/editor.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/hooks.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/mcp.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/model-aliases.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/model-configuration.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/model-providers.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/options.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/reasoning.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/retries.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/security.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/skills.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/subagents.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/tui.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config/workspaces.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/config.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/git.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/index.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/install/docker.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/install.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/languages.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/legal/contributor-agreement.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/legal/privacy.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms/anthropic.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms/azure.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms/bedrock.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms/cohere.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms/deepseek.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms/gemini.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms/github.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms/groq.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms/lm-studio.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms/ollama.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms/openai-compat.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms/openai.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms/openrouter.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms/other.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms/vertex.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms/warnings.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms/xai.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/llms.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/more/analytics.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/more/edit-formats.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/more/infinite-output.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/more-info.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/repomap.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/scripting.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/troubleshooting/imports.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/troubleshooting/support.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/troubleshooting/warnings.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/troubleshooting.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/usage/commands.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/usage/conventions.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/usage/copypaste.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/usage/images-urls.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/usage/lint-test.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/usage/modes.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/usage/not-code.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/usage/notifications.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/usage/optional.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/usage/sessions.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/usage/tips.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/usage/voice.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/usage/watch.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/docs/usage.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli/website/share/index.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli_dev.egg-info/SOURCES.txt +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli_dev.egg-info/dependency_links.txt +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli_dev.egg-info/entry_points.txt +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli_dev.egg-info/requires.txt +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli_dev.egg-info/scm_file_list.json +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/cecli_dev.egg-info/top_level.txt +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/docker/Dockerfile +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/pyproject.toml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/pytest.ini +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/requirements/common-constraints.txt +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/requirements/requirements-dev.in +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/requirements/requirements-dev.txt +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/requirements/requirements-help.in +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/requirements/requirements-help.txt +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/requirements/requirements-playwright.in +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/requirements/requirements-playwright.txt +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/requirements/requirements.in +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/requirements/tree-sitter.in +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/requirements.txt +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/30k-image.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/Dockerfile.jekyll +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/blame.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/clean_metadata.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/compare-message-history.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/cost_analyzer.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/cost_calculator.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/dl_icons.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/filter-chat-mode.js +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/generate_providers.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/get_contributor_list.js +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/get_hashline.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/history_prompts.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/homepage.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/issues.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/jekyll_build.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/jekyll_run.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/logo_svg.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/optimize_tokens.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/pip-compile.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/recording_audio.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/redact-cast.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/rename_to_cecli.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/tmux_record.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/tsl_pack_langs.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/update-blame.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/update-docs.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/update-history.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/versionbump.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/scripts/yank-old-versions.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/setup.cfg +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/shim.pyproject.toml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/conftest.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_aws_credentials.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_background_commands.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_commands.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_custom_commands.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_deprecated.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_editblock.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_editor.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_exceptions.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_find_or_blocks.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_hashline.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_hashline_closure.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_history.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_io.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_linter.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_main.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_model_info_manager.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_model_provider_manager.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_models.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_onboarding.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_plugin_manager.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_prompts.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_reasoning.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_repo.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_repomap.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_run_cmd.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_sanity_check_repo.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_scripting.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_select_selector.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_sendchat.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_session_args.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_session_crypto.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_sessions.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_sessions_manager.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_skills.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_special.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_spinner.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_ssl_verification.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_udiff.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_urls.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_voice.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_watch.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/basic/test_wholefile.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/coders/test_coder_switching.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/coders/test_copypaste_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/commands/test_compaction.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/commands/test_switch_agent.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/conftest.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/conversations/test_conversation_integration.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/conversations/test_conversation_system.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/chat-history.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/arduino/test.ino +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/bash/test.sh +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/c/test.c +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/chatito/test.chatito +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/clojure/test.clj +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/cpp/test.cpp +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/csharp/test.cs +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/d/test.d +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/dart/test.dart +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/elisp/test.el +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/elixir/test.ex +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/elm/test.elm +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/gleam/test.gleam +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/go/test.go +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/haskell/test.hs +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/hcl/test.tf +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/java/test.java +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/javascript/test.js +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/kotlin/test.kt +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/lua/test.lua +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/matlab/test.m +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/ocaml/test.ml +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/php/test.php +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/pony/test.pony +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/properties/test.properties +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/python/test.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/ql/test.ql +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/r/test.r +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/racket/test.rkt +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/ruby/test.rb +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/rust/test.rs +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/scala/test.scala +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/solidity/test.sol +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/swift/test.swift +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/tsx/test.tsx +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/typescript/test.ts +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/udev/test.rules +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/languages/zig/test.zig +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/sample-code-base/sample.js +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/sample-code-base/sample.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/watch.js +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/watch.lisp +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/watch.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/fixtures/watch_question.js +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/help/test_help.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/helpers/monorepo/LOCAL_WORKSPACE.md +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/helpers/monorepo/test_config.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/helpers/monorepo/test_config_active.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/helpers/monorepo/test_local_workspace.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/helpers/monorepo/test_workspace.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/helpers/observations/test_observation_service.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/helpers/test_orchestration.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/hooks/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/hooks/test_base.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/hooks/test_manager.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/hooks/test_registry.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/integration/test_agent_mcp_management.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/integration/test_mcp_management.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/mcp/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/mcp/conftest.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/mcp/mock_server.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/mcp/test_keepalive_concurrency.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/mcp/test_keepalive_config.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/mcp/test_keepalive_logging.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/mcp/test_keepalive_resilience.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/mcp/test_keepalive_unit.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/mcp/test_manager.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/mcp/test_manager_retry.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/scrape/test_playwright_disable.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/scrape/test_scrape.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/subagents/__init__.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/subagents/conftest.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/subagents/test_commands.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/subagents/test_config.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/subagents/test_delegate.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/subagents/test_finished.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/subagents/test_io_proxy.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/subagents/test_service.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/subagents/test_sub_agent_coder.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/test_requests.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/tools/test_extractions.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/tools/test_get_lines.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/tools/test_git_branch.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/tools/test_git_diff.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/tools/test_grep.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/tools/test_insert_block.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/tools/test_read_range_execute.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/tools/test_registry.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/tools/test_remove_mcp_tool.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/tools/test_tool_arguments.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/tools/test_tools_load_mcp_tool.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/tools/validations.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/tui/test_app.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/unit/test_load_mcp.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/unit/test_remove_mcp.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/unit/test_unit_load_mcp_tool.py +0 -0
- {cecli_dev-1.0.0rc9 → cecli_dev-1.0.0rc11}/tests/unit/test_unit_remove_mcp_tool.py +0 -0
|
@@ -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.0rc11'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 0, 'rc11')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g9f297cdf7'
|
|
@@ -151,6 +151,16 @@ class AgentProxy:
|
|
|
151
151
|
"""
|
|
152
152
|
from cecli.helpers import nested
|
|
153
153
|
|
|
154
|
+
# SECURITY: Reject paths that access private/dunder attributes
|
|
155
|
+
# (unless disable_security is active)
|
|
156
|
+
if not (self._env and self._env._orchestration_config.get("disable_security", False)):
|
|
157
|
+
for segment in path.replace("[", ".").replace("]", "").split("."):
|
|
158
|
+
segment = segment.strip()
|
|
159
|
+
if segment.startswith("_") and segment != "_":
|
|
160
|
+
from cecli.helpers.orchestration.security import SecurityError
|
|
161
|
+
|
|
162
|
+
raise SecurityError(f"Access to private attribute '{segment}' is forbidden")
|
|
163
|
+
|
|
154
164
|
return nested.getter(result, path, default)
|
|
155
165
|
|
|
156
166
|
@staticmethod
|
|
@@ -26,12 +26,16 @@ from cecli.helpers.orchestration.safe_methods import (
|
|
|
26
26
|
_HelpfulBuiltins,
|
|
27
27
|
_safe_dir,
|
|
28
28
|
_safe_gather,
|
|
29
|
+
_safe_getattr,
|
|
30
|
+
_safe_hasattr,
|
|
29
31
|
_safe_sleep,
|
|
30
32
|
_safe_typeof,
|
|
31
33
|
_safe_vars,
|
|
32
34
|
_SafeJson,
|
|
33
35
|
_SafeModuleProxy,
|
|
34
36
|
_SafePathlib,
|
|
37
|
+
_SafeRe,
|
|
38
|
+
_SafeTraceback,
|
|
35
39
|
_strip_allowed_imports,
|
|
36
40
|
)
|
|
37
41
|
from cecli.helpers.orchestration.security import (
|
|
@@ -225,6 +229,8 @@ class AgentExecutionEnv:
|
|
|
225
229
|
self.globals: dict[str, _Any] = {}
|
|
226
230
|
self.locals: dict[str, _Any] = {}
|
|
227
231
|
|
|
232
|
+
_disable_sec = self._orchestration_config.get("disable_security", False)
|
|
233
|
+
|
|
228
234
|
self._safe_builtins: dict[str, _Any] = {
|
|
229
235
|
"print": print,
|
|
230
236
|
"range": range,
|
|
@@ -242,8 +248,8 @@ class AgentExecutionEnv:
|
|
|
242
248
|
"vars": _safe_vars,
|
|
243
249
|
"dir": _make_sandbox_dir(self.globals, self.locals),
|
|
244
250
|
"isinstance": isinstance,
|
|
245
|
-
"hasattr":
|
|
246
|
-
"getattr":
|
|
251
|
+
"hasattr": _safe_hasattr,
|
|
252
|
+
"getattr": _safe_getattr,
|
|
247
253
|
"repr": repr,
|
|
248
254
|
"enumerate": enumerate,
|
|
249
255
|
"zip": zip,
|
|
@@ -272,12 +278,12 @@ class AgentExecutionEnv:
|
|
|
272
278
|
"StopIteration": StopIteration,
|
|
273
279
|
"ArithmeticError": ArithmeticError,
|
|
274
280
|
"LookupError": LookupError,
|
|
275
|
-
"re":
|
|
276
|
-
"math": _SafeModuleProxy(math),
|
|
277
|
-
"itertools": _SafeModuleProxy(itertools),
|
|
278
|
-
"collections": _SafeModuleProxy(collections),
|
|
279
|
-
"datetime": _SafeModuleProxy(datetime),
|
|
280
|
-
"traceback":
|
|
281
|
+
"re": _SafeRe,
|
|
282
|
+
"math": _SafeModuleProxy(math, disable_security=_disable_sec),
|
|
283
|
+
"itertools": _SafeModuleProxy(itertools, disable_security=_disable_sec),
|
|
284
|
+
"collections": _SafeModuleProxy(collections, disable_security=_disable_sec),
|
|
285
|
+
"datetime": _SafeModuleProxy(datetime, disable_security=_disable_sec),
|
|
286
|
+
"traceback": _SafeTraceback,
|
|
281
287
|
"pathlib": _SafePathlib,
|
|
282
288
|
}
|
|
283
289
|
|
|
@@ -296,6 +302,9 @@ class AgentExecutionEnv:
|
|
|
296
302
|
if self._orchestration_config.get("disable_security", False):
|
|
297
303
|
for name in self._DANGEROUS_BUILTINS:
|
|
298
304
|
self._safe_builtins[name] = __builtins__[name]
|
|
305
|
+
# Restore real getattr/hasattr when security is disabled
|
|
306
|
+
self._safe_builtins["getattr"] = getattr
|
|
307
|
+
self._safe_builtins["hasattr"] = hasattr
|
|
299
308
|
|
|
300
309
|
# When allow_classes is enabled, expose __build_class__ needed by Python
|
|
301
310
|
if self._orchestration_config.get("allow_classes", False):
|
|
@@ -451,6 +460,16 @@ class AgentExecutionEnv:
|
|
|
451
460
|
code = f"Syntax Error in orchestration code: {e}"
|
|
452
461
|
return {"results": code, "state_variables": self._state_snapshot()}
|
|
453
462
|
|
|
463
|
+
def _build_result(msg: str = "") -> dict:
|
|
464
|
+
print_output = "".join(captured_output)
|
|
465
|
+
parts = []
|
|
466
|
+
if print_output:
|
|
467
|
+
parts.append(print_output.rstrip("\n"))
|
|
468
|
+
if msg:
|
|
469
|
+
parts.append(msg)
|
|
470
|
+
code = "\n".join(parts) if parts else ""
|
|
471
|
+
return {"results": code, "state_variables": self._state_snapshot()}
|
|
472
|
+
|
|
454
473
|
try:
|
|
455
474
|
if not self._orchestration_config.get("disable_security", False):
|
|
456
475
|
tree = SecurityFilter(
|
|
@@ -481,16 +500,6 @@ class AgentExecutionEnv:
|
|
|
481
500
|
code = f"Compilation Error: {e}"
|
|
482
501
|
return {"results": code, "state_variables": self._state_snapshot()}
|
|
483
502
|
|
|
484
|
-
def _build_result(msg: str = "") -> dict:
|
|
485
|
-
print_output = "".join(captured_output)
|
|
486
|
-
parts = []
|
|
487
|
-
if print_output:
|
|
488
|
-
parts.append(print_output.rstrip("\n"))
|
|
489
|
-
if msg:
|
|
490
|
-
parts.append(msg)
|
|
491
|
-
code = "\n".join(parts) if parts else ""
|
|
492
|
-
return {"results": code, "state_variables": self._state_snapshot()}
|
|
493
|
-
|
|
494
503
|
try:
|
|
495
504
|
exec(compiled_code, self.globals, self.locals)
|
|
496
505
|
runner_coro = self.locals["__agent_async_runner"]()
|
|
@@ -10,6 +10,8 @@ from __future__ import annotations
|
|
|
10
10
|
import asyncio
|
|
11
11
|
import json
|
|
12
12
|
import pathlib
|
|
13
|
+
import re as _re_mod
|
|
14
|
+
import traceback as _tb_mod
|
|
13
15
|
from typing import Any
|
|
14
16
|
|
|
15
17
|
# ---------------------------------------------------------------------------
|
|
@@ -264,8 +266,21 @@ def _safe_typeof(obj: Any) -> type:
|
|
|
264
266
|
|
|
265
267
|
Unlike ``type(name, bases, dict)`` which can create new classes at runtime,
|
|
266
268
|
``_safe_typeof(obj)`` only returns the type of an object for inspection.
|
|
269
|
+
|
|
270
|
+
Additionally, when *obj* is itself a type/class whose metaclass is ``type``,
|
|
271
|
+
the result would be ``<class 'type'>`` — the real ``type`` metaclass.
|
|
272
|
+
This is blocked because the metaclass can be used to dynamically create
|
|
273
|
+
arbitrary classes, bypassing the AST-level ``ClassDef`` filter.
|
|
267
274
|
"""
|
|
268
|
-
|
|
275
|
+
result = type(obj)
|
|
276
|
+
if result is type:
|
|
277
|
+
from cecli.helpers.orchestration.security import SecurityError
|
|
278
|
+
|
|
279
|
+
raise SecurityError(
|
|
280
|
+
"Access to the 'type' metaclass is forbidden in the sandbox. "
|
|
281
|
+
"Use isinstance() for type checks instead of comparing type objects."
|
|
282
|
+
)
|
|
283
|
+
return result
|
|
269
284
|
|
|
270
285
|
|
|
271
286
|
def _safe_vars(obj: Any) -> dict:
|
|
@@ -337,6 +352,39 @@ def _safe_dir(obj: Any) -> list:
|
|
|
337
352
|
]
|
|
338
353
|
|
|
339
354
|
|
|
355
|
+
def _safe_getattr(obj: Any, name: str, *args: Any) -> Any:
|
|
356
|
+
"""Safe getattr() - blocks access to private/dunder attributes.
|
|
357
|
+
|
|
358
|
+
Raises ``AttributeError`` (matching ``getattr``'s default behavior) when
|
|
359
|
+
the attribute name starts with ``_``, preventing sandboxed code from
|
|
360
|
+
bypassing the AST-level private-attribute filter.
|
|
361
|
+
|
|
362
|
+
When ``disable_security`` is enabled in orchestration config, the real
|
|
363
|
+
``getattr`` is restored so this restriction doesn't apply.
|
|
364
|
+
"""
|
|
365
|
+
if type(name) is not str:
|
|
366
|
+
raise TypeError(f"getattr() attribute name must be str, not {type(name).__name__}")
|
|
367
|
+
if name.startswith("_") and name != "_":
|
|
368
|
+
raise AttributeError(f"Cannot access private attribute {name!r} in sandbox")
|
|
369
|
+
return getattr(obj, name, *args)
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
def _safe_hasattr(obj: Any, name: str) -> bool:
|
|
373
|
+
"""Safe hasattr() - blocks probing of private/dunder attributes.
|
|
374
|
+
|
|
375
|
+
Returns ``False`` for any attribute name starting with ``_`` so that
|
|
376
|
+
sandboxed code cannot detect the presence of private attributes.
|
|
377
|
+
|
|
378
|
+
When ``disable_security`` is enabled in orchestration config, the real
|
|
379
|
+
``hasattr`` is restored so this restriction doesn't apply.
|
|
380
|
+
"""
|
|
381
|
+
if type(name) is not str:
|
|
382
|
+
raise TypeError(f"hasattr() attribute name must be str, not {type(name).__name__}")
|
|
383
|
+
if name.startswith("_") and name != "_":
|
|
384
|
+
return False
|
|
385
|
+
return hasattr(obj, name)
|
|
386
|
+
|
|
387
|
+
|
|
340
388
|
def _find_closing_quote(code: str, quote: str, start: int) -> int:
|
|
341
389
|
"""Find the position of the closing *quote* in *code*, skipping
|
|
342
390
|
backslash-escaped characters so that ``\"`` (escaped quote) is not
|
|
@@ -714,23 +762,265 @@ class _SafeJson:
|
|
|
714
762
|
return json.dumps(obj, **safe_kwargs)
|
|
715
763
|
|
|
716
764
|
|
|
765
|
+
class _SafeTraceback:
|
|
766
|
+
"""Drop-in ``traceback`` namespace exposing only safe print and format methods.
|
|
767
|
+
|
|
768
|
+
Unlike ``_SafeModuleProxy`` which forwards all non-blocked attributes to the
|
|
769
|
+
real module, this class only exposes an explicit allowlist of print/format
|
|
770
|
+
methods. Module-level imports like ``traceback.sys`` and ``traceback.io``
|
|
771
|
+
are not accessible through this wrapper, closing the ``sys.modules``
|
|
772
|
+
sandbox-escape vector.
|
|
773
|
+
|
|
774
|
+
Exposed methods:
|
|
775
|
+
|
|
776
|
+
**Printing** (output to stderr or a given file):
|
|
777
|
+
- ``print_exc(limit=None, file=None)`` — print current exception
|
|
778
|
+
- ``print_exception(exc, limit=None, file=None)`` — print a given exception
|
|
779
|
+
- ``print_stack(f=None, limit=None, file=None)`` — print current call stack
|
|
780
|
+
- ``print_tb(tb, limit=None, file=None)`` — print a given traceback
|
|
781
|
+
- ``print_last(limit=None, file=None)`` — print the last exception
|
|
782
|
+
|
|
783
|
+
**Formatting** (return strings for logging):
|
|
784
|
+
- ``format_exc(limit=None)`` — format current exception as string
|
|
785
|
+
- ``format_exception(exc, limit=None)`` — format a given exception to list of strings
|
|
786
|
+
- ``format_stack(f=None, limit=None)`` — format current stack to list of strings
|
|
787
|
+
- ``format_tb(tb, limit=None)`` — format a given traceback to list of strings
|
|
788
|
+
- ``format_list(extracted)`` — format extracted stack entries
|
|
789
|
+
- ``format_exception_only(exc)`` — format exception type + value only
|
|
790
|
+
|
|
791
|
+
**Utility**:
|
|
792
|
+
- ``clear_frames(tb)`` — clear local variables from traceback frames
|
|
793
|
+
|
|
794
|
+
**Classes**:
|
|
795
|
+
- ``TracebackException`` — programmatic traceback representation
|
|
796
|
+
- ``FrameSummary`` — single frame summary
|
|
797
|
+
- ``StackSummary`` — list of frame summaries
|
|
798
|
+
"""
|
|
799
|
+
|
|
800
|
+
@classmethod
|
|
801
|
+
def format_exc(cls, limit=None):
|
|
802
|
+
import traceback
|
|
803
|
+
|
|
804
|
+
return traceback.format_exc(limit=limit)
|
|
805
|
+
|
|
806
|
+
@classmethod
|
|
807
|
+
def format_exception(cls, exc, limit=None):
|
|
808
|
+
import traceback
|
|
809
|
+
|
|
810
|
+
return traceback.format_exception(exc, limit=limit)
|
|
811
|
+
|
|
812
|
+
@classmethod
|
|
813
|
+
def format_stack(cls, f=None, limit=None):
|
|
814
|
+
import traceback
|
|
815
|
+
|
|
816
|
+
return traceback.format_stack(f=f, limit=limit)
|
|
817
|
+
|
|
818
|
+
@classmethod
|
|
819
|
+
def format_tb(cls, tb, limit=None):
|
|
820
|
+
import traceback
|
|
821
|
+
|
|
822
|
+
return traceback.format_tb(tb, limit=limit)
|
|
823
|
+
|
|
824
|
+
@classmethod
|
|
825
|
+
def format_list(cls, extracted):
|
|
826
|
+
import traceback
|
|
827
|
+
|
|
828
|
+
return traceback.format_list(extracted)
|
|
829
|
+
|
|
830
|
+
@classmethod
|
|
831
|
+
def format_exception_only(cls, exc):
|
|
832
|
+
import traceback
|
|
833
|
+
|
|
834
|
+
return traceback.format_exception_only(exc)
|
|
835
|
+
|
|
836
|
+
@classmethod
|
|
837
|
+
def print_exc(cls, limit=None, file=None):
|
|
838
|
+
import traceback
|
|
839
|
+
|
|
840
|
+
traceback.print_exc(limit=limit, file=file)
|
|
841
|
+
|
|
842
|
+
@classmethod
|
|
843
|
+
def print_exception(cls, exc, limit=None, file=None):
|
|
844
|
+
import traceback
|
|
845
|
+
|
|
846
|
+
traceback.print_exception(exc, limit=limit, file=file)
|
|
847
|
+
|
|
848
|
+
@classmethod
|
|
849
|
+
def print_stack(cls, f=None, limit=None, file=None):
|
|
850
|
+
import traceback
|
|
851
|
+
|
|
852
|
+
traceback.print_stack(f=f, limit=limit, file=file)
|
|
853
|
+
|
|
854
|
+
@classmethod
|
|
855
|
+
def print_tb(cls, tb, limit=None, file=None):
|
|
856
|
+
import traceback
|
|
857
|
+
|
|
858
|
+
traceback.print_tb(tb, limit=limit, file=file)
|
|
859
|
+
|
|
860
|
+
@classmethod
|
|
861
|
+
def print_last(cls, limit=None, file=None):
|
|
862
|
+
import traceback
|
|
863
|
+
|
|
864
|
+
traceback.print_last(limit=limit, file=file)
|
|
865
|
+
|
|
866
|
+
@classmethod
|
|
867
|
+
def clear_frames(cls, tb):
|
|
868
|
+
import traceback
|
|
869
|
+
|
|
870
|
+
traceback.clear_frames(tb)
|
|
871
|
+
|
|
872
|
+
# Classes from traceback — accessed via class attribute, not instance
|
|
873
|
+
TracebackException = None
|
|
874
|
+
FrameSummary = None
|
|
875
|
+
StackSummary = None
|
|
876
|
+
|
|
877
|
+
|
|
878
|
+
_SafeTraceback.TracebackException = _tb_mod.TracebackException
|
|
879
|
+
_SafeTraceback.FrameSummary = _tb_mod.FrameSummary
|
|
880
|
+
_SafeTraceback.StackSummary = _tb_mod.StackSummary
|
|
881
|
+
|
|
882
|
+
|
|
883
|
+
class _SafeRe:
|
|
884
|
+
"""Drop-in ``re`` namespace exposing only safe regex operations.
|
|
885
|
+
|
|
886
|
+
Unlike ``_SafeModuleProxy`` which forwards all non-blocked attributes to the
|
|
887
|
+
real module, this class only exposes an explicit allowlist of regex
|
|
888
|
+
functions, flags, and types. Module-level imports like ``re.enum``,
|
|
889
|
+
``re.copyreg``, and ``re.functools`` are not accessible through this
|
|
890
|
+
wrapper, closing the ``re.enum.sys`` sandbox-escape vector.
|
|
891
|
+
|
|
892
|
+
Exposed:
|
|
893
|
+
|
|
894
|
+
**Compilation**:
|
|
895
|
+
- ``compile(pattern, flags=0)`` — compile a regex pattern
|
|
896
|
+
|
|
897
|
+
**Searching / Matching**:
|
|
898
|
+
- ``search(pattern, string, flags=0)`` — scan through string
|
|
899
|
+
- ``match(pattern, string, flags=0)`` — match at start of string
|
|
900
|
+
- ``fullmatch(pattern, string, flags=0)`` — match whole string
|
|
901
|
+
- ``findall(pattern, string, flags=0)`` — all non-overlapping matches
|
|
902
|
+
- ``finditer(pattern, string, flags=0)`` — iterator over matches
|
|
903
|
+
|
|
904
|
+
**Substitution / Splitting**:
|
|
905
|
+
- ``sub(pattern, repl, string, ...)`` — substitute
|
|
906
|
+
- ``subn(pattern, repl, string, ...)`` — substitute with count
|
|
907
|
+
- ``split(pattern, string, ...)`` — split by pattern
|
|
908
|
+
|
|
909
|
+
**Utilities**:
|
|
910
|
+
- ``escape(string)`` — escape special characters
|
|
911
|
+
- ``purge()`` — clear the regex cache
|
|
912
|
+
|
|
913
|
+
**Flags**:
|
|
914
|
+
- ``NOFLAG``, ``IGNORECASE`` / ``I``, ``MULTILINE`` / ``M``,
|
|
915
|
+
``DOTALL`` / ``S``, ``VERBOSE`` / ``X``, ``ASCII`` / ``A``
|
|
916
|
+
- ``RegexFlag`` — the flag enum type
|
|
917
|
+
|
|
918
|
+
**Types / Exceptions**:
|
|
919
|
+
- ``Pattern`` — compiled pattern type
|
|
920
|
+
- ``Match`` — match result type
|
|
921
|
+
- ``error`` — regex exception class
|
|
922
|
+
"""
|
|
923
|
+
|
|
924
|
+
# Compilation
|
|
925
|
+
compile = None
|
|
926
|
+
|
|
927
|
+
# Searching / Matching
|
|
928
|
+
search = None
|
|
929
|
+
match = None
|
|
930
|
+
fullmatch = None
|
|
931
|
+
findall = None
|
|
932
|
+
finditer = None
|
|
933
|
+
|
|
934
|
+
# Substitution / Splitting
|
|
935
|
+
sub = None
|
|
936
|
+
subn = None
|
|
937
|
+
split = None
|
|
938
|
+
|
|
939
|
+
# Utilities
|
|
940
|
+
escape = None
|
|
941
|
+
purge = None
|
|
942
|
+
|
|
943
|
+
# Flags
|
|
944
|
+
NOFLAG = None
|
|
945
|
+
IGNORECASE = None
|
|
946
|
+
I = None # noqa: E741
|
|
947
|
+
MULTILINE = None
|
|
948
|
+
M = None
|
|
949
|
+
DOTALL = None
|
|
950
|
+
S = None
|
|
951
|
+
VERBOSE = None
|
|
952
|
+
X = None
|
|
953
|
+
ASCII = None
|
|
954
|
+
A = None
|
|
955
|
+
RegexFlag = None
|
|
956
|
+
|
|
957
|
+
# Types / Exceptions
|
|
958
|
+
Pattern = None
|
|
959
|
+
Match = None
|
|
960
|
+
error = None
|
|
961
|
+
|
|
962
|
+
|
|
963
|
+
for _name in dir(_SafeRe):
|
|
964
|
+
if not _name.startswith("_"):
|
|
965
|
+
try:
|
|
966
|
+
setattr(_SafeRe, _name, getattr(_re_mod, _name))
|
|
967
|
+
except AttributeError:
|
|
968
|
+
pass
|
|
969
|
+
|
|
970
|
+
|
|
717
971
|
class _SafeModuleProxy:
|
|
718
972
|
"""Proxy that forwards attribute reads to a real module but prevents mutation.
|
|
719
973
|
|
|
720
974
|
Setting an attribute on the proxy only affects the proxy, not the real module.
|
|
721
975
|
This prevents sandbox code from monkey-patching standard library modules.
|
|
976
|
+
|
|
977
|
+
The following methods are blocked and raise SecurityError:
|
|
978
|
+
- ``walk_stack()``, ``walk_tb()``, ``extract_stack()`` — frame introspection
|
|
979
|
+
that exposes unwrapped frame objects with access to parent-frame
|
|
980
|
+
``f_locals`` / ``f_globals``.
|
|
722
981
|
"""
|
|
723
982
|
|
|
724
|
-
|
|
983
|
+
_BLOCKED_METHODS: frozenset[str] = frozenset({"walk_stack", "walk_tb", "extract_stack"})
|
|
984
|
+
|
|
985
|
+
def __init__(self, module: Any, *, disable_security: bool = False) -> None:
|
|
725
986
|
object.__setattr__(self, "_module", module)
|
|
987
|
+
object.__setattr__(self, "_disable_security", disable_security)
|
|
726
988
|
|
|
727
989
|
def __getattr__(self, name: str) -> Any:
|
|
728
990
|
if name.startswith("_"):
|
|
729
991
|
raise AttributeError(
|
|
730
992
|
"Cannot access private attribute " + repr(name) + " on module proxy"
|
|
731
993
|
)
|
|
994
|
+
if name in self._BLOCKED_METHODS and not object.__getattribute__(self, "_disable_security"):
|
|
995
|
+
from cecli.helpers.orchestration.security import SecurityError
|
|
996
|
+
|
|
997
|
+
raise SecurityError(
|
|
998
|
+
f"Cannot access '{name}' on module proxy. "
|
|
999
|
+
f"Frame introspection methods are blocked in the sandbox."
|
|
1000
|
+
)
|
|
1001
|
+
if name == "modules" and not object.__getattribute__(self, "_disable_security"):
|
|
1002
|
+
from cecli.helpers.orchestration.security import SecurityError
|
|
1003
|
+
|
|
1004
|
+
raise SecurityError(
|
|
1005
|
+
f"Cannot access '{name}' on module proxy. "
|
|
1006
|
+
f"Direct module registry access is blocked in the sandbox."
|
|
1007
|
+
)
|
|
732
1008
|
module = object.__getattribute__(self, "_module")
|
|
733
|
-
|
|
1009
|
+
attr = getattr(module, name)
|
|
1010
|
+
|
|
1011
|
+
# Re-wrap sub-modules to prevent transitive sandbox escape.
|
|
1012
|
+
# Without this, `re.enum.sys` would return the real `sys` module
|
|
1013
|
+
# (since `re` imports `enum` and `enum` imports `sys`), giving
|
|
1014
|
+
# attackers access to `sys.modules["builtins"].getattr` and from
|
|
1015
|
+
# there unrestricted private-attribute access.
|
|
1016
|
+
from types import ModuleType
|
|
1017
|
+
|
|
1018
|
+
if isinstance(attr, ModuleType):
|
|
1019
|
+
return _SafeModuleProxy(
|
|
1020
|
+
attr, disable_security=object.__getattribute__(self, "_disable_security")
|
|
1021
|
+
)
|
|
1022
|
+
|
|
1023
|
+
return attr
|
|
734
1024
|
|
|
735
1025
|
def __setattr__(self, name: str, value: Any) -> None:
|
|
736
1026
|
if not name.startswith("_"):
|
|
@@ -739,7 +1029,10 @@ class _SafeModuleProxy:
|
|
|
739
1029
|
|
|
740
1030
|
def __dir__(self) -> list:
|
|
741
1031
|
module = object.__getattribute__(self, "_module")
|
|
742
|
-
|
|
1032
|
+
blocked = (
|
|
1033
|
+
set() if object.__getattribute__(self, "_disable_security") else self._BLOCKED_METHODS
|
|
1034
|
+
)
|
|
1035
|
+
return [x for x in dir(module) if not x.startswith("_") and x not in blocked]
|
|
743
1036
|
|
|
744
1037
|
|
|
745
1038
|
# ---------------------------------------------------------------------------
|
|
@@ -217,6 +217,19 @@ class SecurityFilter(ast.NodeTransformer):
|
|
|
217
217
|
|
|
218
218
|
return self.generic_visit(node)
|
|
219
219
|
|
|
220
|
+
def visit_Match(self, node: ast.Match) -> ast.Expr:
|
|
221
|
+
"""Block all ``match``/``case`` statements.
|
|
222
|
+
|
|
223
|
+
Class patterns destructure objects via runtime ``getattr()``,
|
|
224
|
+
bypassing the AST-level ``visit_Attribute`` guard entirely.
|
|
225
|
+
Rather than trying to cover every pattern variant, we reject
|
|
226
|
+
the ``match`` statement wholesale.
|
|
227
|
+
"""
|
|
228
|
+
return self._make_raise_stmt(
|
|
229
|
+
f"Security filter error at line {node.lineno}: "
|
|
230
|
+
"The 'match'/'case' statement is disabled in the orchestration environment."
|
|
231
|
+
)
|
|
232
|
+
|
|
220
233
|
|
|
221
234
|
class LoopYieldInjector(ast.NodeTransformer):
|
|
222
235
|
"""
|
|
@@ -88,6 +88,13 @@ class Tool(BaseTool):
|
|
|
88
88
|
),
|
|
89
89
|
"default": False,
|
|
90
90
|
},
|
|
91
|
+
"timeout": {
|
|
92
|
+
"type": "integer",
|
|
93
|
+
"description": (
|
|
94
|
+
"Timeout in seconds for command execution. " "Default is 30 seconds."
|
|
95
|
+
),
|
|
96
|
+
"default": 30,
|
|
97
|
+
},
|
|
91
98
|
},
|
|
92
99
|
"required": [],
|
|
93
100
|
},
|
|
@@ -114,6 +121,7 @@ class Tool(BaseTool):
|
|
|
114
121
|
stdin=None,
|
|
115
122
|
pty=False,
|
|
116
123
|
user_input_required=False,
|
|
124
|
+
timeout=0,
|
|
117
125
|
**kwargs,
|
|
118
126
|
):
|
|
119
127
|
"""
|
|
@@ -125,7 +133,7 @@ class Tool(BaseTool):
|
|
|
125
133
|
or navigate terminal interfaces.
|
|
126
134
|
For background interactions: provide 'background_key' + 'action' (stdin/stop).
|
|
127
135
|
|
|
128
|
-
Commands run with timeout
|
|
136
|
+
Commands run with timeout from agent_config['command_timeout'] (default: 30 seconds),
|
|
129
137
|
"""
|
|
130
138
|
response = ToolResponse(
|
|
131
139
|
"command",
|
|
@@ -181,10 +189,15 @@ class Tool(BaseTool):
|
|
|
181
189
|
|
|
182
190
|
command = coder.format_command_with_prefix(command)
|
|
183
191
|
|
|
184
|
-
# Determine timeout from agent_config (default: 30 seconds)
|
|
185
|
-
|
|
192
|
+
# Determine timeout from agent_config (default: 30 seconds) as fallback
|
|
193
|
+
config_timeout = 0
|
|
186
194
|
if hasattr(coder, "agent_config"):
|
|
187
|
-
|
|
195
|
+
config_timeout = coder.agent_config.get("command_timeout", 30)
|
|
196
|
+
# Use LLM-specified timeout if provided, otherwise fallback to config
|
|
197
|
+
if timeout == 0:
|
|
198
|
+
timeout = config_timeout
|
|
199
|
+
# Clamp LLM timeout between config_timeout (minimum) and max(300, config_timeout) (maximum)
|
|
200
|
+
timeout = max(config_timeout, min(timeout, max(300, config_timeout)))
|
|
188
201
|
|
|
189
202
|
if user_input_required:
|
|
190
203
|
return await cls._execute_interactive(coder, command)
|
|
@@ -390,7 +403,7 @@ class Tool(BaseTool):
|
|
|
390
403
|
# Format output
|
|
391
404
|
output_content = output or ""
|
|
392
405
|
# Tokens are roughly 3-4 characters
|
|
393
|
-
output_limit = coder.large_file_token_threshold * 3.5
|
|
406
|
+
output_limit = int(coder.large_file_token_threshold * 3.5)
|
|
394
407
|
|
|
395
408
|
if coder.context_management_enabled and len(output_content) > output_limit * 1.25:
|
|
396
409
|
# Save full output to paginated files instead of truncating
|
|
@@ -641,6 +654,7 @@ class Tool(BaseTool):
|
|
|
641
654
|
action = params.get("action")
|
|
642
655
|
stdin = params.get("stdin")
|
|
643
656
|
pty = params.get("pty", False)
|
|
657
|
+
timeout = params.get("timeout", 30)
|
|
644
658
|
user_input_required = params.get("user_input_required", False)
|
|
645
659
|
|
|
646
660
|
coder.io.tool_output("")
|
|
@@ -655,6 +669,8 @@ class Tool(BaseTool):
|
|
|
655
669
|
extras.append(f"action={action}")
|
|
656
670
|
if pty:
|
|
657
671
|
extras.append("pty=True")
|
|
672
|
+
if timeout != 30:
|
|
673
|
+
extras.append(f"timeout={timeout}s")
|
|
658
674
|
if user_input_required:
|
|
659
675
|
extras.append("user_input_required=True")
|
|
660
676
|
|
|
@@ -68,10 +68,18 @@ class TestKeepaliveWithMockServer:
|
|
|
68
68
|
running_mock_server.set_status(500)
|
|
69
69
|
|
|
70
70
|
# Wait for failed ping
|
|
71
|
-
|
|
71
|
+
# Wait for failed ping with polling for cross-platform reliability
|
|
72
|
+
for _ in range(30): # 30 * 0.2s = 6s timeout
|
|
73
|
+
if inspector.get_state(server) == ConnectionState.UNHEALTHY:
|
|
74
|
+
break
|
|
75
|
+
await asyncio.sleep(0.2)
|
|
76
|
+
else:
|
|
77
|
+
pytest.fail(
|
|
78
|
+
f"Server did not become UNHEALTHY after failures, state was "
|
|
79
|
+
f"{inspector.get_state(server).name}"
|
|
80
|
+
)
|
|
72
81
|
|
|
73
82
|
# Should transition to UNHEALTHY
|
|
74
|
-
assert inspector.get_state(server) == ConnectionState.UNHEALTHY
|
|
75
83
|
assert inspector.get_failed_pings(server) == 1
|
|
76
84
|
|
|
77
85
|
await server.disconnect()
|
|
@@ -115,14 +123,33 @@ class TestKeepaliveWithMockServer:
|
|
|
115
123
|
|
|
116
124
|
# Cause a failure
|
|
117
125
|
running_mock_server.set_status(500)
|
|
118
|
-
|
|
126
|
+
for _ in range(30): # 30 * 0.2s = 6s timeout
|
|
127
|
+
if inspector.get_state(server) == ConnectionState.UNHEALTHY:
|
|
128
|
+
break
|
|
129
|
+
await asyncio.sleep(0.2)
|
|
130
|
+
else:
|
|
131
|
+
pytest.fail(
|
|
132
|
+
f"Server did not become UNHEALTHY after failures, state was "
|
|
133
|
+
f"{inspector.get_state(server).name}"
|
|
134
|
+
)
|
|
119
135
|
assert inspector.get_state(server) == ConnectionState.UNHEALTHY
|
|
120
136
|
|
|
121
137
|
# Restore success
|
|
122
138
|
running_mock_server.set_status(200)
|
|
123
|
-
|
|
139
|
+
for _ in range(30): # 30 * 0.2s = 6s timeout
|
|
140
|
+
if inspector.get_state(server) == ConnectionState.CONNECTED:
|
|
141
|
+
break
|
|
142
|
+
await asyncio.sleep(0.2)
|
|
143
|
+
else:
|
|
144
|
+
pytest.fail(
|
|
145
|
+
f"Server did not become CONNECTED after success, state was "
|
|
146
|
+
f"{inspector.get_state(server).name}"
|
|
147
|
+
)
|
|
124
148
|
|
|
125
149
|
# Should be back to CONNECTED
|
|
150
|
+
|
|
151
|
+
# Brief cooldown after state transition
|
|
152
|
+
await asyncio.sleep(0.2)
|
|
126
153
|
assert inspector.get_state(server) == ConnectionState.CONNECTED
|
|
127
154
|
assert inspector.get_failed_pings(server) == 0
|
|
128
155
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|