cecli-dev 1.8.1rc1__tar.gz → 1.8.1rc3__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.8.1rc1 → cecli_dev-1.8.1rc3}/PKG-INFO +1 -1
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/_version.py +3 -3
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/args.py +2 -6
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/base_coder.py +27 -2
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/agents/service.py +34 -11
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/io_proxy.py +22 -1
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/litellm_compat.py +33 -18
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/queues.py +67 -20
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/scheduler/service.py +40 -1
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/workflows/config.py +13 -2
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/main.py +51 -16
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/watch.py +10 -1
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/scheduler.md +6 -14
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/workflows.md +5 -4
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli_dev.egg-info/PKG-INFO +1 -1
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli_dev.egg-info/SOURCES.txt +1 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli_dev.egg-info/scm_file_list.json +1 -0
- cecli_dev-1.8.1rc3/cecli_dev.egg-info/scm_version.json +8 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_agent_config_merge.py +1 -0
- cecli_dev-1.8.1rc3/tests/basic/test_scheduler_config.py +96 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_watch.py +28 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/observations/test_observation_service.py +45 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/scheduler/test_service.py +61 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/workflows/test_config.py +38 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/subagents/test_io_proxy.py +41 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/subagents/test_service.py +108 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/unit/test_queues.py +64 -0
- cecli_dev-1.8.1rc1/cecli_dev.egg-info/scm_version.json +0 -8
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/.dockerignore +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/.flake8 +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/.gitattributes +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/.github/workflows/check_pypi_version.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/.github/workflows/docker-build-test.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/.github/workflows/docker-release.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/.github/workflows/issues.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/.github/workflows/pages.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/.github/workflows/pre-commit.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/.github/workflows/release.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/.github/workflows/ubuntu-tests.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/.github/workflows/windows-tests.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/.github/workflows/windows_check_pypi_version.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/.gitignore +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/.pre-commit-config.yaml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/CHANGELOG.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/CNAME +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/CONTRIBUTING.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/HISTORY.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/LICENSE.txt +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/MANIFEST.in +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/README.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/Dockerfile +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/README.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/benchmark.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/benchmark_classic.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/clone-exercism.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/cpp-test.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/docker.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/docker_build.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/install-docker-ubuntu.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/npm-test.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/over_time.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/plot.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/plots.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/problem_stats.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/prompts.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/refactor_tools.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/rsync.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/rungrid.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/swe-bench-lite.txt +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/swe-bench.txt +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/swe_bench.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/test_benchmark.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/variations.1.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/variations.2.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/variations.3.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/benchmark/variations.4.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/__main__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/args_formatter.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/change_tracker.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/agent_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/architect_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/ask_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/chat_chunks.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/context_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/copypaste_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/editblock_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/editblock_fenced_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/editblock_func_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/editor_diff_fenced_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/editor_editblock_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/editor_whole_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/hashline_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/help_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/patch_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/search_replace.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/shell.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/single_wholefile_func_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/sub_agent_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/udiff_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/udiff_simple.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/wholefile_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/coders/wholefile_func_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/add.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/agent.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/agent_model.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/agent_tree.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/architect.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/ask.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/auto_memory.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/chat_mode.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/clear.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/code.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/command_prefix.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/commit.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/compact.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/context.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/context_blocks.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/context_management.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/copy.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/copy_context.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/core.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/diff.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/drop.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/editor.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/editor_model.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/exclude_skill.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/exit.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/git.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/hashline.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/help.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/history_search.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/hooks.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/hot_reload.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/import_skill.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/include_skill.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/insert_queue.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/lint.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/list_mcp.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/list_queue.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/list_sessions.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/list_skills.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/load.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/load_hook.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/load_mcp.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/load_session.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/load_skill.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/ls.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/map.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/map_refresh.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/merge.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/model.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/models.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/multiline_mode.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/paste.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/queue.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/quit.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/read_only.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/read_only_stub.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/reap_agent.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/reasoning_effort.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/remove_hook.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/remove_mcp.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/remove_memory.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/remove_queue.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/remove_skill.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/report.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/reset.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/rules.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/run.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/save.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/save_session.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/search_memory.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/settings.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/spawn_agent.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/switch_agent.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/terminal_data/linux.keytab +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/terminal_setup.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/test.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/think_tokens.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/tokens.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/undo.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/utils/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/utils/base_command.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/utils/helpers.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/utils/registry.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/utils/save_load_manager.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/voice.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/weak_model.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/web.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/workflows.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/commands/workspace.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/decoding.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/deprecated_args.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/diffs.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/dump.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/editor.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/exceptions.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/format_settings.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/help.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/help_pats.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/agents/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/agents/config.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/agents/defaults/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/agents/defaults/memorizer.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/agents/defaults/worker.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/background_commands.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/command_parser.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/command_queue.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/config_utils.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/conversation/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/conversation/base_message.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/conversation/files.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/conversation/integration.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/conversation/manager.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/conversation/service.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/conversation/tags.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/conversation/utils.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/copypaste.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/coroutines.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/crypto.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/extensions/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/extensions/skills_importer.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/file_searcher.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/file_system/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/file_system/builders.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/file_system/ignore.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/file_system/ngram_index.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/file_system/service.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/file_system/trie_index.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/grep_ast/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/grep_ast/dump.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/grep_ast/grep_ast.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/grep_ast/main.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/grep_ast/parsers.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/grep_ast/tsl.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/hashline.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/hashpos/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/hashpos/hashpos.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/hashpos/hashpos.v1.bak +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/hashpos/transformations.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/leak_detect.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/aws_sigv4.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/config.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/constants.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/domains/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/domains/bedrock.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/domains/chat.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/domains/gemini.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/domains/messages.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/domains/responses.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/formatters/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/formatters/reasoning.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/formatters/thinking.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/identifiers.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/pipeline.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/anthropic.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/azure.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/base.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/bedrock.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/bedrock_mantle.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/deepseek.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/gemini.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/github_copilot.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/meta.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/mistral.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/ollama.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/openai.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/openrouter.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/runtime.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/types.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/utils.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/lock_detect.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/loop_detect.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/memory/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/memory/db.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/memory/utils.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/memory_control.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/agent.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/api.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/formatters/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/formatters/reasoning.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/formatters/thinking.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/identifiers.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/llm.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/pipeline.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/registry.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/utils.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/model_providers.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/nested.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/observations/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/observations/service.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/onboarding/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/onboarding/app.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/onboarding/providers.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/orchestration/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/orchestration/agent_proxy.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/orchestration/environment.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/orchestration/region_resolver.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/orchestration/safe_methods.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/orchestration/security.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/orchestration/service.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/orchestration/tool_proxy.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/plugin_manager.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/profiler.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/requests.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/responses.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/scheduler/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/scheduler/cron.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/scheduler/db.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/scheduler/lock.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/server/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/server/acp/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/server/acp/bridge.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/server/acp/models.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/server/acp/protocol.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/server/signals.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/server/ws_server.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/sessions/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/sessions/layout.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/sessions/manager.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/sessions/payload.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/sessions/storage.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/sessions/subagents.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/similarity.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/skills.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/system_one/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/system_one/api.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/system_one/client.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/system_one/config.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/system_one/integrations.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/system_one/types.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/threading.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/workflows/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/workflows/logs.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/workflows/models.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/workflows/outputs.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/workflows/runner.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/workflows/subagents.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/workspaces/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/workspaces/config.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/workspaces/paths.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/workspaces/subagents.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/helpers/workspaces/workspace.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/history.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/hooks/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/hooks/base.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/hooks/helpers.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/hooks/integration.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/hooks/manager.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/hooks/registry.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/hooks/service.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/hooks/types.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/http.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/interruptible_input.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/io.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/linter.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/llm.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/mcp/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/mcp/manager.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/mcp/oauth.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/mcp/server.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/mcp/utils.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/mdstream.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/models.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/onboarding.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/agent.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/architect.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/ask.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/base.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/context.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/copypaste.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/editblock.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/editblock_fenced.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/editblock_func.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/editor_diff_fenced.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/editor_editblock.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/editor_whole.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/hashline.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/help.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/patch.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/single_wholefile_func.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/subagent.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/udiff.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/udiff_simple.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/utils/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/utils/registry.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/utils/system.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/wholefile.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/prompts/wholefile_func.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/README.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/reasoning_tags.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/repo.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/repomap.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/report.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/resources/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/resources/model-metadata.ext.json +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/resources/model-metadata.json +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/resources/model-settings-condensed.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/resources/model-settings.yml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/resources/providers.json +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/run_cmd.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/scrape.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/sendchat.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/signals.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/special.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tests/test_queue_commands.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/_yield.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/broadcast.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/command.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/delegate.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/edit_file.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/explore_code.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/git_branch.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/git_diff.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/git_log.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/git_remote.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/git_show.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/git_status.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/grep.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/ls.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/orchestrate.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/read_file.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/replace_facts.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/resource_manager.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/search_facts.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/thinking.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/undo_change.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/update_todo_list.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/utils/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/utils/base_tool.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/utils/helpers.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/utils/output.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/utils/registry.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/utils/responses.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/validations/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tools/validations/validations.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/app.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/io.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/styles.tcss +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/completion_bar.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/file_list.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/footer.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/input_area.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/input_container.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/key_hints.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/output.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/output_alt.bak +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/selectable_log.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/status_bar.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/subagent_pills.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/thin_scrollbar.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/tui/worker.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/urls.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/utils.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/versioncheck.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/voice.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/waiting.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/watch_prompts.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_includes/blame.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_includes/get-started.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_includes/help-tip.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_includes/help.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_includes/install.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_includes/keys.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_includes/model-warnings.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_includes/multi-line.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_includes/python-m-aider.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_includes/recording.css +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_includes/recording.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_includes/works-best.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_features.scss +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_footer.scss +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_hero.scss +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_info.scss +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_layout.scss +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_reset.scss +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_testimonials.scss +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_typography.scss +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_variables.scss +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_sass/custom/custom.scss +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/_sass/global-overrides.scss +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docmd.config.json +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/cecli-temp-logo-favicon.svg +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/adv-model-settings.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/agent-mode.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/api-keys.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/api.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/conf.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/custom-commands.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/custom-system-prompts.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/dotenv.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/editor.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/hooks.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/mcp.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/model-aliases.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/model-configuration.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/model-providers.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/options.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/persistent-memory.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/reasoning.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/retries.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/security.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/skills.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/subagents.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/system-one.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/tui.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/workspaces.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/config.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/git.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/index.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/install/docker.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/install.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/languages.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/legal/contributor-agreement.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/legal/privacy.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/anthropic.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/azure.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/bedrock.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/cohere.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/deepseek.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/gemini.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/github.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/groq.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/lm-studio.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/ollama.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/openai-compat.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/openai.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/opencode-go.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/openrouter.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/other.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/vertex.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/warnings.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/xai.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/more/analytics.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/more/edit-formats.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/more/infinite-output.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/more-info.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/repomap.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/scripting.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/troubleshooting/imports.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/troubleshooting/support.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/troubleshooting/warnings.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/troubleshooting.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/commands.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/conventions.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/copypaste.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/images-urls.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/lint-test.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/modes.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/not-code.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/notifications.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/optional.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/sessions.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/voice.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/watch.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/package-lock.json +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/package.json +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli/website/share/index.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli_dev.egg-info/dependency_links.txt +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli_dev.egg-info/entry_points.txt +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli_dev.egg-info/requires.txt +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/cecli_dev.egg-info/top_level.txt +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/docker/Dockerfile +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/pyproject.toml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/pytest.ini +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/requirements/common-constraints.txt +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/requirements/requirements-dev.in +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/requirements/requirements-dev.txt +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/requirements/requirements-help.in +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/requirements/requirements-help.txt +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/requirements/requirements-playwright.in +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/requirements/requirements-playwright.txt +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/requirements/requirements.in +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/requirements/tree-sitter.in +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/requirements.txt +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/30k-image.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/blame.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/clean_metadata.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/compare-message-history.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/condense_model_settings.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/cost_analyzer.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/cost_calculator.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/dl_icons.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/docmd_build.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/filter-chat-mode.js +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/generate_providers.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/get_contributor_list.js +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/get_hashline.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/history_prompts.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/homepage.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/issues.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/logo_svg.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/optimize_tokens.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/pip-compile.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/recording_audio.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/redact-cast.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/rename_to_cecli.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/tmux_record.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/tsl_pack_langs.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/update-blame.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/update-docs.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/update-history.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/versionbump.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/scripts/yank-old-versions.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/setup.cfg +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/shim.pyproject.toml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/conftest.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_aws_credentials.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_background_commands.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_commands.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_custom_commands.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_deprecated.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_editblock.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_editor.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_empty_response.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_exceptions.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_file_system_service.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_find_or_blocks.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_hashline.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_hashline_closure.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_history.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_io.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_linter.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_main.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_model_info_manager.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_model_provider_manager.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_models.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_onboarding.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_plugin_manager.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_prompts.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_reasoning.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_repo.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_repomap.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_retry_config.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_run_cmd.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_sanity_check_repo.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_scripting.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_select_selector.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_sendchat.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_session_args.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_session_crypto.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_sessions.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_sessions_manager.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_skills.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_special.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_spinner.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_ssl_verification.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_system_one.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_udiff.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_urls.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_voice.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/basic/test_wholefile.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/coders/test_coder_switching.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/coders/test_copypaste_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/coders/test_rate_limit.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/coders/test_tool_call_consolidation.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/commands/test_auto_memory.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/commands/test_compaction.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/commands/test_remove_memory.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/commands/test_search_memory.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/commands/test_switch_agent.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/commands/test_voice.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/commands/test_workflows.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/commands/test_workspace.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/conftest.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/conversations/test_background_command_injection.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/conversations/test_conversation_integration.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/conversations/test_conversation_system.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/chat-history.md +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/arduino/test.ino +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/bash/test.sh +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/c/test.c +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/chatito/test.chatito +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/clojure/test.clj +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/cpp/test.cpp +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/csharp/test.cs +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/d/test.d +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/dart/test.dart +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/elisp/test.el +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/elixir/test.ex +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/elm/test.elm +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/gleam/test.gleam +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/go/test.go +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/haskell/test.hs +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/hcl/test.tf +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/java/test.java +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/javascript/test.js +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/kotlin/test.kt +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/lua/test.lua +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/matlab/test.m +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/ocaml/test.ml +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/php/test.php +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/pony/test.pony +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/properties/test.properties +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/python/test.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/ql/test.ql +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/r/test.r +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/racket/test.rkt +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/ruby/test.rb +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/rust/test.rs +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/scala/test.scala +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/solidity/test.sol +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/swift/test.swift +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/tsx/test.tsx +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/typescript/test.ts +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/udev/test.rules +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/zig/test.zig +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/sample-code-base/sample.js +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/sample-code-base/sample.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/watch.js +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/watch.lisp +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/watch.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/fixtures/watch_question.js +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/help/test_help.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/scheduler/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/scheduler/test_cron.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/scheduler/test_db.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/server/acp/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/server/acp/test_bridge.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/server/acp/test_dispatch.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/server/acp/test_models.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/server/acp/test_protocol.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_api_base.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_aws_sigv4.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_cache_control.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_gemini_auth.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_github_copilot_auth.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_hyperscalers.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_messages_stream.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_messages_wire.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_mistral_adapter.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_mistral_provider.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_ollama_native.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_providers_json.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_reasoning_config.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_reasoning_extract.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_reasoning_summaries.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_vision.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_loop_detect.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_memory_control.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_model_config.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_onboarding.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_orchestration.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/test_skills_importer.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/workflows/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/workflows/test_runner.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/workflows/test_subagents.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/workspaces/conftest.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/workspaces/test_config.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/workspaces/test_paths.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/workspaces/test_subagents.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/helpers/workspaces/test_workspace_manager.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/hooks/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/hooks/test_base.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/hooks/test_manager.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/hooks/test_registry.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/integration/test_agent_mcp_management.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/integration/test_config_loading.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/integration/test_mcp_management.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/integration/test_workflows_e2e.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/mcp/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/mcp/conftest.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/mcp/mock_server.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/mcp/test_keepalive_concurrency.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/mcp/test_keepalive_config.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/mcp/test_keepalive_integration.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/mcp/test_keepalive_logging.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/mcp/test_keepalive_resilience.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/mcp/test_keepalive_unit.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/mcp/test_manager.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/mcp/test_manager_retry.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/mcp/test_server_name_normalization.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/mcp/test_server_sdk_compat.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/mcp/test_tool_name_sanitization.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/scrape/test_playwright_disable.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/scrape/test_scrape.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/subagents/__init__.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/subagents/conftest.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/subagents/test_commands.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/subagents/test_config.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/subagents/test_delegate.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/subagents/test_finished.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/subagents/test_sub_agent_coder.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/test_requests.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tools/test_command_format_output.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tools/test_command_timeout_paging.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tools/test_edit_file_format_output.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tools/test_extractions.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tools/test_get_lines.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tools/test_git_branch.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tools/test_git_diff.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tools/test_grep.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tools/test_insert_block.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tools/test_read_range_execute.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tools/test_registry.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tools/test_remove_mcp_tool.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tools/test_resource_manager_paging.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tools/test_tool_arguments.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tools/test_tools_load_mcp_tool.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tools/validations.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tui/test_app.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tui/test_completion_bar.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/tui/test_output.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/unit/conftest.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/unit/test_deep_merge.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/unit/test_edge_cases.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/unit/test_load_mcp.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/unit/test_performance.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/unit/test_remove_mcp.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/unit/test_retry_backoff.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/unit/test_shallow_merge.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/unit/test_signals.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/unit/test_unit_load_mcp_tool.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/unit/test_unit_remove_mcp_tool.py +0 -0
- {cecli_dev-1.8.1rc1 → cecli_dev-1.8.1rc3}/tests/unit/test_ws_server.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.8.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 8, 1, '
|
|
21
|
+
__version__ = version = '1.8.1rc3'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 8, 1, 'rc3')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gb07a9f6ad'
|
|
@@ -440,13 +440,9 @@ def get_parser(default_config_files, git_root):
|
|
|
440
440
|
)
|
|
441
441
|
group.add_argument(
|
|
442
442
|
"--scheduler",
|
|
443
|
-
|
|
443
|
+
metavar="SCHEDULER_CONFIG_JSON",
|
|
444
|
+
help="Specify scheduler configuration as a JSON string",
|
|
444
445
|
default=None,
|
|
445
|
-
help=(
|
|
446
|
-
"Force the workflow scheduler on (--scheduler) or off (--no-scheduler) for"
|
|
447
|
-
" this session. (default: auto, on when any enabled scheduled workflow"
|
|
448
|
-
" exists)"
|
|
449
|
-
),
|
|
450
446
|
)
|
|
451
447
|
group.add_argument(
|
|
452
448
|
"--system-one",
|
|
@@ -2253,6 +2253,31 @@ class Coder(metaclass=UsageMeta):
|
|
|
2253
2253
|
)
|
|
2254
2254
|
return
|
|
2255
2255
|
|
|
2256
|
+
# Compaction can only shrink the conversation buckets counted above.
|
|
2257
|
+
# If the fixed context (files added to the chat, repo map, system
|
|
2258
|
+
# prompt, rules, tool schemas) already meets the limit on its own,
|
|
2259
|
+
# summarizing cannot bring the context under the limit. Bail out with
|
|
2260
|
+
# guidance instead of churning every turn, which is what a large file
|
|
2261
|
+
# added to the chat otherwise causes.
|
|
2262
|
+
non_compactable_tokens = all_tokens - compactable_tokens
|
|
2263
|
+
|
|
2264
|
+
if (
|
|
2265
|
+
self.context_compaction_max_tokens
|
|
2266
|
+
and non_compactable_tokens >= self.context_compaction_max_tokens
|
|
2267
|
+
):
|
|
2268
|
+
if getattr(self, "_compaction_noop_warning_time", 0) + 300 < time.time():
|
|
2269
|
+
self._compaction_noop_warning_time = time.time()
|
|
2270
|
+
self.io.tool_warning(
|
|
2271
|
+
"Compaction cannot reduce the context: the fixed context (files in the"
|
|
2272
|
+
f" chat, repo map, prompts) is already ~{non_compactable_tokens:,}"
|
|
2273
|
+
f" tokens, at or above the ~{self.context_compaction_max_tokens:,} token"
|
|
2274
|
+
" compaction limit."
|
|
2275
|
+
)
|
|
2276
|
+
self.io.tool_output("- Use /drop to remove unneeded files from the chat")
|
|
2277
|
+
self.io.tool_output("- Use /clear to clear the chat history")
|
|
2278
|
+
|
|
2279
|
+
return
|
|
2280
|
+
|
|
2256
2281
|
message_tokens = done_tokens + cur_tokens
|
|
2257
2282
|
file_tokens = diff_tokens + file_context_tokens
|
|
2258
2283
|
combined_tokens = done_tokens + cur_tokens + diff_tokens + file_context_tokens
|
|
@@ -2692,7 +2717,7 @@ class Coder(metaclass=UsageMeta):
|
|
|
2692
2717
|
async def check_tokens(self, messages):
|
|
2693
2718
|
"""Check if the messages will fit within the model's token limits."""
|
|
2694
2719
|
input_tokens = self.get_active_model().token_count(messages)
|
|
2695
|
-
max_input_tokens = self.get_active_model().info.get("max_input_tokens") or
|
|
2720
|
+
max_input_tokens = self.get_active_model().info.get("max_input_tokens") or 128000
|
|
2696
2721
|
|
|
2697
2722
|
if max_input_tokens and input_tokens >= max_input_tokens:
|
|
2698
2723
|
if (
|
|
@@ -2703,7 +2728,7 @@ class Coder(metaclass=UsageMeta):
|
|
|
2703
2728
|
f"Estimated chat context of {input_tokens:,} tokens exceeds the"
|
|
2704
2729
|
f" {max_input_tokens:,} token limit. Attempting to compact..."
|
|
2705
2730
|
)
|
|
2706
|
-
await self.compact_context_if_needed(
|
|
2731
|
+
await self.compact_context_if_needed()
|
|
2707
2732
|
|
|
2708
2733
|
# After compaction, re-format messages and re-check tokens
|
|
2709
2734
|
messages = self.format_messages()
|
|
@@ -6,6 +6,7 @@ that tracks sub-agent info and handles invoke/spawn/wait lifecycle.
|
|
|
6
6
|
|
|
7
7
|
import asyncio
|
|
8
8
|
import logging
|
|
9
|
+
import threading
|
|
9
10
|
import time
|
|
10
11
|
import weakref
|
|
11
12
|
from dataclasses import dataclass
|
|
@@ -80,8 +81,22 @@ class AgentService:
|
|
|
80
81
|
_uuid_coder_map: Dict[str, weakref.ref] = {}
|
|
81
82
|
# Lock pools keyed by parent UUID — created lazily so only parents that
|
|
82
83
|
# actually use them allocate a lock.
|
|
83
|
-
|
|
84
|
-
|
|
84
|
+
#
|
|
85
|
+
# Plain ``threading.Lock`` (not ``asyncio.Lock``): an ``asyncio.Lock`` binds
|
|
86
|
+
# itself to the event loop of its first *waiting* acquirer and raises
|
|
87
|
+
# ``RuntimeError('... is bound to a different event loop')`` when awaited
|
|
88
|
+
# from another loop. Spawn, reap and conversation writes all reach these
|
|
89
|
+
# pools from both the TUI main (Textual) loop and the coder worker-thread
|
|
90
|
+
# loop, and the pools are class-level, so a lock created before a hot reload
|
|
91
|
+
# outlives the loop it bound to. Every guarded section is fully synchronous,
|
|
92
|
+
# so a thread lock gives true cross-loop mutual exclusion with no loop
|
|
93
|
+
# affinity and is immune to task cancellation.
|
|
94
|
+
#
|
|
95
|
+
# Invariant: never hold one of these locks across an ``await`` — the guarded
|
|
96
|
+
# sections must stay synchronous, or the blocking acquire could stall the
|
|
97
|
+
# event loop.
|
|
98
|
+
_spawn_locks: Dict[str, threading.Lock] = {}
|
|
99
|
+
_conversation_locks: Dict[str, threading.Lock] = {}
|
|
85
100
|
_primary_agent_uuid: str = None
|
|
86
101
|
|
|
87
102
|
# ------------------------------------------------------------------ #
|
|
@@ -305,10 +320,15 @@ class AgentService:
|
|
|
305
320
|
# ------------------------------------------------------------------ #
|
|
306
321
|
# Internal helpers
|
|
307
322
|
@classmethod
|
|
308
|
-
def _get_lock(cls, pool: Dict[str,
|
|
309
|
-
"""Return a lock for *uuid* from *pool*, creating one if absent.
|
|
323
|
+
def _get_lock(cls, pool: Dict[str, threading.Lock], uuid: str) -> threading.Lock:
|
|
324
|
+
"""Return a lock for *uuid* from *pool*, creating one if absent.
|
|
325
|
+
|
|
326
|
+
Locks are ``threading.Lock`` rather than ``asyncio.Lock`` (see the pool
|
|
327
|
+
declarations): the guarded sections are synchronous and correct locking
|
|
328
|
+
must work from any event loop.
|
|
329
|
+
"""
|
|
310
330
|
if uuid not in pool:
|
|
311
|
-
pool[uuid] =
|
|
331
|
+
pool[uuid] = threading.Lock()
|
|
312
332
|
return pool[uuid]
|
|
313
333
|
|
|
314
334
|
@staticmethod
|
|
@@ -444,7 +464,7 @@ class AgentService:
|
|
|
444
464
|
# Acquire the spawn lock for the primary coder to serialise with
|
|
445
465
|
# concurrent spawn operations that also hold this lock.
|
|
446
466
|
parent_coder = parent if parent is not None else self.coder
|
|
447
|
-
|
|
467
|
+
with self._get_lock(self._spawn_locks, parent_coder.uuid):
|
|
448
468
|
for coder_uuid in list(self._sub_agent_order):
|
|
449
469
|
info = self.sub_agents.get(coder_uuid)
|
|
450
470
|
if (
|
|
@@ -593,7 +613,7 @@ class AgentService:
|
|
|
593
613
|
# tried to acquire the same lock).
|
|
594
614
|
parent_coder = parent if parent is not None else self.coder
|
|
595
615
|
|
|
596
|
-
|
|
616
|
+
with self._get_lock(self._spawn_locks, parent_coder.uuid):
|
|
597
617
|
self._check_max_sub_agents()
|
|
598
618
|
new_uuid = str(uuid4()).split("-")[0]
|
|
599
619
|
|
|
@@ -686,7 +706,7 @@ class AgentService:
|
|
|
686
706
|
|
|
687
707
|
# Re-acquire the lock to register — we must re-check max agents since
|
|
688
708
|
# the lock was released and other spawns may have registered in between.
|
|
689
|
-
|
|
709
|
+
with self._get_lock(self._spawn_locks, parent_coder.uuid):
|
|
690
710
|
self._check_max_sub_agents()
|
|
691
711
|
|
|
692
712
|
# Register in global coder lookup
|
|
@@ -952,7 +972,7 @@ class AgentService:
|
|
|
952
972
|
else:
|
|
953
973
|
return
|
|
954
974
|
|
|
955
|
-
|
|
975
|
+
with self._get_lock(self._conversation_locks, info.parent_uuid):
|
|
956
976
|
ConversationService.get_manager(parent_coder).add_message(
|
|
957
977
|
message_dict={"role": "user", "content": user_content},
|
|
958
978
|
tag=MessageTag.CUR,
|
|
@@ -1200,8 +1220,11 @@ def _tui_notify(tui, callback, *args):
|
|
|
1200
1220
|
"""Invoke *callback* on the TUI app, from either thread.
|
|
1201
1221
|
|
|
1202
1222
|
``call_from_thread`` only works when the caller is not the app's own
|
|
1203
|
-
thread
|
|
1204
|
-
|
|
1223
|
+
thread. Scheduler-dispatched workflow runs now execute on the coder's own
|
|
1224
|
+
loop (the TUI worker-thread loop — see ``SchedulerService._on_coder_loop``),
|
|
1225
|
+
so notifications originate from the worker thread and ``call_from_thread``
|
|
1226
|
+
applies; when we are already on the app thread (or the TUI is unavailable),
|
|
1227
|
+
fall back to calling directly.
|
|
1205
1228
|
"""
|
|
1206
1229
|
|
|
1207
1230
|
try:
|
|
@@ -183,7 +183,28 @@ class IOProxy(Generic[T]):
|
|
|
183
183
|
|
|
184
184
|
async def confirm_ask(self, *args, **kwargs):
|
|
185
185
|
"""Forward confirm_ask — per-coder queue iteration is handled by
|
|
186
|
-
TextualInputOutput which now iterates all per-coder queues.
|
|
186
|
+
TextualInputOutput which now iterates all per-coder queues.
|
|
187
|
+
|
|
188
|
+
Coders configured with ``skip_cli_confirmations`` (unattended ``wf:``
|
|
189
|
+
workflow and ``ws:`` workspace workers) are auto-confirmed. They run
|
|
190
|
+
with nobody watching, and — more importantly — a blocking prompt has
|
|
191
|
+
to be awaited from whatever loop the coder happens to run on. A
|
|
192
|
+
scheduler-dispatched workflow runs on the main (Textual) loop, so
|
|
193
|
+
blocking there used to rebind ``queues``' global input-wake slot and
|
|
194
|
+
strand the primary coder's input pump.
|
|
195
|
+
"""
|
|
196
|
+
coder_ref = getattr(self, "_coder", None)
|
|
197
|
+
coder = coder_ref() if coder_ref is not None else None
|
|
198
|
+
|
|
199
|
+
if coder is not None and getattr(coder, "skip_cli_confirmations", False):
|
|
200
|
+
question = args[0] if args else kwargs.get("question", "")
|
|
201
|
+
logger.debug(
|
|
202
|
+
"auto-confirming %r for unattended coder %s (skip_cli_confirmations)",
|
|
203
|
+
question,
|
|
204
|
+
self._coder_uuid,
|
|
205
|
+
)
|
|
206
|
+
return True
|
|
207
|
+
|
|
187
208
|
if "coder_uuid" not in kwargs:
|
|
188
209
|
kwargs["coder_uuid"] = self._coder_uuid
|
|
189
210
|
return await self._target.confirm_ask(*args, **kwargs)
|
|
@@ -19,6 +19,7 @@ from __future__ import annotations
|
|
|
19
19
|
|
|
20
20
|
import asyncio
|
|
21
21
|
import json
|
|
22
|
+
import math
|
|
22
23
|
import os
|
|
23
24
|
import re
|
|
24
25
|
import warnings
|
|
@@ -1096,15 +1097,11 @@ class _LiteLLMFacade:
|
|
|
1096
1097
|
"""Estimate tokens for ``text`` without loading a BPE tokenizer.
|
|
1097
1098
|
|
|
1098
1099
|
tiktoken's cl100k_base/o200k_base encodings cost ~30-95MB of RSS the
|
|
1099
|
-
first time they are loaded, so we approximate instead
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
The estimate lands within ~±30% of cl100k_base on code and prose, which
|
|
1106
|
-
is plenty for context-window checks, cost display, and file-size
|
|
1107
|
-
warnings.
|
|
1100
|
+
first time they are loaded, so we approximate instead with a regex
|
|
1101
|
+
pre-tokenizer patterned on OpenAI's o200k_base (see
|
|
1102
|
+
``_estimate_token_count``). The estimate lands within ~±30% of
|
|
1103
|
+
cl100k_base on code and prose, which is plenty for context-window
|
|
1104
|
+
checks, cost display, and file-size warnings.
|
|
1108
1105
|
|
|
1109
1106
|
Returns a ``range`` whose length is the estimated token count; the
|
|
1110
1107
|
individual values are dummy ids (callers only use ``len()``/iteration).
|
|
@@ -1244,23 +1241,41 @@ __all__ = ["litellm"]
|
|
|
1244
1241
|
# Token-count estimator (tiktoken-free)
|
|
1245
1242
|
# ---------------------------------------------------------------------------
|
|
1246
1243
|
|
|
1247
|
-
|
|
1248
|
-
|
|
1244
|
+
# Standard ``re`` approximation of OpenAI's o200k_base pre-tokenizer pattern.
|
|
1245
|
+
# The letter class is Unicode-aware (``[^\W\d_]``) so non-Latin scripts are
|
|
1246
|
+
# counted rather than dropped.
|
|
1247
|
+
_O200K_APPROX_PATTERN = re.compile(
|
|
1248
|
+
r"""'(?:[sdmt]|ll|ve|re)| ?[^\W\d_]+| ?\d{1,3}| ?[^\s\w]+|\s+""", re.UNICODE
|
|
1249
|
+
)
|
|
1250
|
+
|
|
1251
|
+
#: Bytes charged per token for chunks too long to be a single token, calibrated
|
|
1252
|
+
#: against o200k_base (~5 bytes/token on code, prose and JSON).
|
|
1253
|
+
_CHARS_PER_TOKEN = 5.0
|
|
1249
1254
|
|
|
1250
1255
|
|
|
1251
1256
|
def _estimate_token_count(text: str) -> int:
|
|
1252
1257
|
"""Estimate the number of tokens in ``text`` without a BPE tokenizer.
|
|
1253
1258
|
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1259
|
+
Splits ``text`` with a regex approximation of OpenAI's o200k_base
|
|
1260
|
+
pre-tokenizer, then accumulates a fractional token weight per chunk:
|
|
1261
|
+
whitespace runs collapse to a single token, numbers and short chunks
|
|
1262
|
+
(<= 4 bytes) count as one, and longer chunks are charged at roughly
|
|
1263
|
+
``_CHARS_PER_TOKEN`` bytes per token. The total is rounded up and floored
|
|
1264
|
+
at one token for any non-empty input.
|
|
1258
1265
|
"""
|
|
1259
1266
|
|
|
1260
1267
|
if not text:
|
|
1261
1268
|
return 0
|
|
1262
1269
|
|
|
1263
|
-
|
|
1264
|
-
|
|
1270
|
+
tokens = 0.0
|
|
1271
|
+
for chunk in _O200K_APPROX_PATTERN.findall(text):
|
|
1272
|
+
byte_len = len(chunk.encode("utf-8"))
|
|
1273
|
+
|
|
1274
|
+
if chunk.isspace():
|
|
1275
|
+
tokens += 1.0
|
|
1276
|
+
elif chunk.strip().isdigit() or byte_len <= 4:
|
|
1277
|
+
tokens += 1.0
|
|
1278
|
+
else:
|
|
1279
|
+
tokens += max(1.0, byte_len / _CHARS_PER_TOKEN)
|
|
1265
1280
|
|
|
1266
|
-
return max(1,
|
|
1281
|
+
return max(1, math.ceil(tokens - 1e-9))
|
|
@@ -3,9 +3,12 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
|
+
import logging
|
|
6
7
|
import queue
|
|
7
8
|
from typing import Any
|
|
8
9
|
|
|
10
|
+
logger = logging.getLogger(__name__)
|
|
11
|
+
|
|
9
12
|
# Global registry: coder_uuid → queue.Queue for sending input to that coder
|
|
10
13
|
_per_coder_queues: dict[str, "queue.Queue"] = {}
|
|
11
14
|
|
|
@@ -19,6 +22,13 @@ _primary_coder_id: str | None = None
|
|
|
19
22
|
_input_loop: asyncio.AbstractEventLoop | None = None
|
|
20
23
|
_input_wake: asyncio.Event | None = None
|
|
21
24
|
|
|
25
|
+
# Dedicated wake events for consumers parked on a loop *other* than the primary
|
|
26
|
+
# input loop (for example a scheduler-dispatched workflow asking for input while
|
|
27
|
+
# the scheduler ticks on the main/Textual loop). They get their own slot so a
|
|
28
|
+
# foreign-loop consumer can never steal the primary binding and strand the
|
|
29
|
+
# primary coder's input pump.
|
|
30
|
+
_input_wakes: dict[asyncio.AbstractEventLoop, asyncio.Event] = {}
|
|
31
|
+
|
|
22
32
|
|
|
23
33
|
def register_coder_queue(coder_uuid: str, q: "queue.Queue") -> None:
|
|
24
34
|
"""Register a per-coder input queue.
|
|
@@ -83,6 +93,9 @@ def set_input_loop(loop: asyncio.AbstractEventLoop) -> None:
|
|
|
83
93
|
global _input_loop, _input_wake
|
|
84
94
|
_input_loop = loop
|
|
85
95
|
_input_wake = asyncio.Event()
|
|
96
|
+
# This loop now owns the primary slot, so drop any dedicated wake it may
|
|
97
|
+
# have registered while it was still a foreign consumer.
|
|
98
|
+
_input_wakes.pop(loop, None)
|
|
86
99
|
|
|
87
100
|
|
|
88
101
|
def wake_input_waiters() -> None:
|
|
@@ -95,39 +108,73 @@ def wake_input_waiters() -> None:
|
|
|
95
108
|
coder worker loop), the stale binding is dropped so the next
|
|
96
109
|
wait_for_input() rebinds to the current loop instead of raising
|
|
97
110
|
"Event loop is closed".
|
|
111
|
+
|
|
112
|
+
Every loop with a parked consumer is woken, not just the primary one:
|
|
113
|
+
a consumer on a foreign loop has its own event (see ``_input_wakes``) so
|
|
114
|
+
the primary binding is never stolen from it.
|
|
98
115
|
"""
|
|
99
116
|
global _input_loop, _input_wake
|
|
100
117
|
|
|
101
118
|
loop = _input_loop
|
|
102
|
-
if loop is None or _input_wake is None:
|
|
103
|
-
return
|
|
104
119
|
|
|
105
|
-
if loop
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
120
|
+
if loop is not None:
|
|
121
|
+
if _input_wake is None:
|
|
122
|
+
_input_loop = None
|
|
123
|
+
elif loop.is_closed():
|
|
124
|
+
_input_loop = None
|
|
125
|
+
_input_wake = None
|
|
126
|
+
else:
|
|
127
|
+
loop.call_soon_threadsafe(_input_wake.set)
|
|
128
|
+
|
|
129
|
+
for other, wake in list(_input_wakes.items()):
|
|
130
|
+
if other.is_closed():
|
|
131
|
+
_input_wakes.pop(other, None)
|
|
132
|
+
continue
|
|
109
133
|
|
|
110
|
-
|
|
134
|
+
try:
|
|
135
|
+
other.call_soon_threadsafe(wake.set)
|
|
136
|
+
except RuntimeError:
|
|
137
|
+
# Loop stopped accepting callbacks between the check and the call.
|
|
138
|
+
_input_wakes.pop(other, None)
|
|
111
139
|
|
|
112
140
|
|
|
113
141
|
async def wait_for_input() -> None:
|
|
114
142
|
"""Await the next input push without polling.
|
|
115
143
|
|
|
116
|
-
|
|
117
|
-
sweep the payload queues first, then block here until
|
|
118
|
-
fires. Initializes the wake state from the running
|
|
119
|
-
rebinds whenever the previous loop was closed
|
|
120
|
-
|
|
144
|
+
Intended to be called from the input loop (the coder worker loop).
|
|
145
|
+
Consumers sweep the payload queues first, then block here until
|
|
146
|
+
wake_input_waiters() fires. Initializes the wake state from the running
|
|
147
|
+
loop on first use and rebinds whenever the previous loop was closed (which
|
|
148
|
+
happens across a hot reload).
|
|
149
|
+
|
|
150
|
+
A caller on a *different*, still-live loop no longer rebinds the primary
|
|
151
|
+
slot: it gets a dedicated wake event instead. Rebinding used to strand the
|
|
152
|
+
primary coder's input pump on the orphaned event, which froze the TUI
|
|
153
|
+
(prompts, slash commands and ``/exit`` all unresponsive; only Ctrl-Q
|
|
154
|
+
worked) whenever a scheduler-dispatched workflow needed input or a
|
|
155
|
+
confirmation and therefore ran on the main (Textual) loop.
|
|
121
156
|
"""
|
|
122
157
|
loop = asyncio.get_running_loop()
|
|
123
158
|
|
|
124
|
-
if (
|
|
125
|
-
_input_loop is None
|
|
126
|
-
or _input_wake is None
|
|
127
|
-
or _input_loop.is_closed()
|
|
128
|
-
or _input_loop is not loop
|
|
129
|
-
):
|
|
159
|
+
if _input_loop is None or _input_wake is None or _input_loop.is_closed():
|
|
130
160
|
set_input_loop(loop)
|
|
131
161
|
|
|
132
|
-
|
|
133
|
-
|
|
162
|
+
if _input_loop is loop:
|
|
163
|
+
_input_wake.clear()
|
|
164
|
+
await _input_wake.wait()
|
|
165
|
+
return
|
|
166
|
+
|
|
167
|
+
logger.warning(
|
|
168
|
+
"wait_for_input() called from a non-input loop (%r); using a dedicated"
|
|
169
|
+
" wake event instead of rebinding the primary input loop",
|
|
170
|
+
loop,
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
wake = _input_wakes.get(loop)
|
|
174
|
+
|
|
175
|
+
if wake is None:
|
|
176
|
+
wake = asyncio.Event()
|
|
177
|
+
_input_wakes[loop] = wake
|
|
178
|
+
|
|
179
|
+
wake.clear()
|
|
180
|
+
await wake.wait()
|
|
@@ -173,7 +173,9 @@ class SchedulerService:
|
|
|
173
173
|
renewal = asyncio.create_task(renewal)
|
|
174
174
|
|
|
175
175
|
try:
|
|
176
|
-
result = await
|
|
176
|
+
result = await self._on_coder_loop(
|
|
177
|
+
lambda: execute_workflow(self.coder, wf, source="scheduler")
|
|
178
|
+
)
|
|
177
179
|
await self.db.finish(lease, result)
|
|
178
180
|
await self._log_tasks(lease, result)
|
|
179
181
|
except asyncio.CancelledError:
|
|
@@ -191,6 +193,43 @@ class SchedulerService:
|
|
|
191
193
|
nxt = self._successor(wf, slot, now, next_run)
|
|
192
194
|
await self.db.advance(wf.name, nxt)
|
|
193
195
|
|
|
196
|
+
def _coder_loop(self) -> Optional[asyncio.AbstractEventLoop]:
|
|
197
|
+
"""Best-effort discovery of the loop the interactive coder runs on.
|
|
198
|
+
|
|
199
|
+
In TUI mode the coder lives on a worker-thread loop while the scheduler
|
|
200
|
+
ticks on the main (Textual) loop, so the two differ. Returns ``None``
|
|
201
|
+
when the coder's loop cannot be determined (linear/one-shot sessions,
|
|
202
|
+
tests), in which case callers stay on the current loop.
|
|
203
|
+
"""
|
|
204
|
+
|
|
205
|
+
tui_ref = getattr(self.coder, "tui", None)
|
|
206
|
+
|
|
207
|
+
try:
|
|
208
|
+
tui = tui_ref() if callable(tui_ref) else tui_ref
|
|
209
|
+
except Exception:
|
|
210
|
+
tui = None
|
|
211
|
+
|
|
212
|
+
worker = getattr(tui, "worker", None)
|
|
213
|
+
loop = getattr(worker, "loop", None)
|
|
214
|
+
|
|
215
|
+
return loop if isinstance(loop, asyncio.AbstractEventLoop) else None
|
|
216
|
+
|
|
217
|
+
async def _on_coder_loop(self, make_coro: Any) -> Any:
|
|
218
|
+
"""Await ``make_coro()`` on the coder's own event loop.
|
|
219
|
+
|
|
220
|
+
A workflow run owns coder I/O (prompts, confirmations, tool output),
|
|
221
|
+
which is bound to the loop the coder actually runs on.
|
|
222
|
+
"""
|
|
223
|
+
|
|
224
|
+
target = self._coder_loop()
|
|
225
|
+
running = asyncio.get_running_loop()
|
|
226
|
+
|
|
227
|
+
if target is None or target is running or target.is_closed():
|
|
228
|
+
return await make_coro()
|
|
229
|
+
|
|
230
|
+
future = asyncio.run_coroutine_threadsafe(make_coro(), target)
|
|
231
|
+
return await asyncio.wrap_future(future)
|
|
232
|
+
|
|
194
233
|
async def _log_tasks(self, lease: Any, result: Any) -> None:
|
|
195
234
|
"""Mirror the runner's per-task outcomes into the DB ``task_log``."""
|
|
196
235
|
|
|
@@ -11,8 +11,9 @@ Resolution order, highest precedence first:
|
|
|
11
11
|
lower-precedence sources still load.
|
|
12
12
|
2. ``<git_root or cwd>/.cecli.workflows.yml`` / ``.cecli.workflows.yaml``.
|
|
13
13
|
3. ``<git_root or cwd>/.cecli/workflows/*.yml`` / ``*.yaml`` — globbed in stable sorted order.
|
|
14
|
-
4.
|
|
15
|
-
5.
|
|
14
|
+
4. ``<git_root or cwd>/.agents/workflows/*.yml`` / ``*.yaml`` — globbed in stable sorted order.
|
|
15
|
+
5. ``merged_config["workflows"]`` — the deep-merged ``.cecli.conf.yml`` value.
|
|
16
|
+
6. ``~/.cecli/workflows/*.yml`` / ``*.yaml`` — globbed in stable sorted order.
|
|
16
17
|
|
|
17
18
|
Each source may hold a single workflow mapping or a ``workflows: [...]`` list.
|
|
18
19
|
On a duplicate ``name`` the higher-precedence definition wins and the loser is
|
|
@@ -42,6 +43,8 @@ WORKFLOW_FILENAMES = (".cecli.workflows.yml", ".cecli.workflows.yaml")
|
|
|
42
43
|
|
|
43
44
|
WORKFLOW_DIR = Path(".cecli") / "workflows"
|
|
44
45
|
|
|
46
|
+
AGENTS_WORKFLOW_DIR = Path(".agents") / "workflows"
|
|
47
|
+
|
|
45
48
|
# Values argparse/deep-merge normalization leaves behind when nothing was set.
|
|
46
49
|
_ABSENT_STRINGS = ("", "{}", "[]", "null", "~")
|
|
47
50
|
|
|
@@ -95,6 +98,7 @@ def resolve_workflow_configs(
|
|
|
95
98
|
|
|
96
99
|
ordered += _entries_from_local(git_root)
|
|
97
100
|
ordered += _entries_from_local_dir(git_root)
|
|
101
|
+
ordered += _entries_from_local_agents_dir(git_root)
|
|
98
102
|
|
|
99
103
|
if isinstance(merged_config, dict):
|
|
100
104
|
ordered += _entries(merged_config.get("workflows"), None, _CONFIG_LABEL)
|
|
@@ -298,6 +302,13 @@ def _entries_from_local_dir(git_root: Optional[Any]) -> List[_Discovered]:
|
|
|
298
302
|
return _entries_from_dir(base / WORKFLOW_DIR)
|
|
299
303
|
|
|
300
304
|
|
|
305
|
+
def _entries_from_local_agents_dir(git_root: Optional[Any]) -> List[_Discovered]:
|
|
306
|
+
"""Resolve a repo-local ``.agents/workflows/*.yml|*.yaml`` directory."""
|
|
307
|
+
base = Path(git_root).expanduser() if git_root else Path.cwd()
|
|
308
|
+
|
|
309
|
+
return _entries_from_dir(base / AGENTS_WORKFLOW_DIR)
|
|
310
|
+
|
|
311
|
+
|
|
301
312
|
def _entries_from_home() -> List[_Discovered]:
|
|
302
313
|
"""Resolve ``~/.cecli/workflows/*.yml|*.yaml`` in stable sorted order."""
|
|
303
314
|
|
|
@@ -173,6 +173,7 @@ YAML_TO_JSON_ARG_KEYS = {
|
|
|
173
173
|
"system_one": "system-one",
|
|
174
174
|
"server_config": "server-config",
|
|
175
175
|
"workflows": "workflows",
|
|
176
|
+
"scheduler": "scheduler",
|
|
176
177
|
}
|
|
177
178
|
|
|
178
179
|
|
|
@@ -1212,6 +1213,16 @@ async def main_async(
|
|
|
1212
1213
|
lint_cmds = parse_lint_cmds(args.lint_cmd, io)
|
|
1213
1214
|
if lint_cmds is None:
|
|
1214
1215
|
return await graceful_exit(None, 1)
|
|
1216
|
+
|
|
1217
|
+
# Create/attach the git repo before the coder is built. The coder resolves
|
|
1218
|
+
# its repo, root, and repo_map at construction; if the repo is created
|
|
1219
|
+
# afterwards the coder keeps repo=None for the whole session and
|
|
1220
|
+
# repo-backed tools (Grep, git_*, ...) fail with "Not in a git repository."
|
|
1221
|
+
if args.git and not (suppress_pre_init or args.workspaces or args.workspace_name):
|
|
1222
|
+
git_root = await setup_git(git_root, pre_init_io)
|
|
1223
|
+
if args.gitignore:
|
|
1224
|
+
await check_gitignore(git_root, pre_init_io)
|
|
1225
|
+
|
|
1215
1226
|
repo = None
|
|
1216
1227
|
if args.git:
|
|
1217
1228
|
try:
|
|
@@ -1382,10 +1393,6 @@ async def main_async(
|
|
|
1382
1393
|
pre_init_io.tool_output()
|
|
1383
1394
|
except KeyboardInterrupt:
|
|
1384
1395
|
return await graceful_exit(coder, 1)
|
|
1385
|
-
if args.git and not (suppress_pre_init or args.workspaces or args.workspace_name):
|
|
1386
|
-
git_root = await setup_git(git_root, pre_init_io)
|
|
1387
|
-
if args.gitignore:
|
|
1388
|
-
await check_gitignore(git_root, pre_init_io)
|
|
1389
1396
|
except UnknownEditFormat as err:
|
|
1390
1397
|
pre_init_io.tool_error(str(err))
|
|
1391
1398
|
await pre_init_io.offer_url(
|
|
@@ -1539,17 +1546,17 @@ async def main_async(
|
|
|
1539
1546
|
# --message/--exit paths above return before the scheduler can tick.
|
|
1540
1547
|
# Auto mode turns it on iff at least one enabled scheduled workflow
|
|
1541
1548
|
# exists, so nothing ever touches the coordination DB otherwise.
|
|
1542
|
-
_scheduler_cfg =
|
|
1543
|
-
if _workflows and _scheduler_enabled(
|
|
1549
|
+
_scheduler_cfg = _scheduler_config(args)
|
|
1550
|
+
if _workflows and _scheduler_enabled(_scheduler_cfg, _workflows):
|
|
1544
1551
|
from cecli.helpers.scheduler import SchedulerService
|
|
1545
1552
|
|
|
1546
1553
|
coder.scheduler = SchedulerService(
|
|
1547
1554
|
coder,
|
|
1548
1555
|
_workflows,
|
|
1549
1556
|
io,
|
|
1550
|
-
tick_seconds=_scheduler_cfg
|
|
1551
|
-
catch_up=_scheduler_cfg
|
|
1552
|
-
max_catchup=_scheduler_cfg
|
|
1557
|
+
tick_seconds=_scheduler_cfg["tick_seconds"],
|
|
1558
|
+
catch_up=_scheduler_cfg["catch_up"],
|
|
1559
|
+
max_catchup=_scheduler_cfg["max_catchup"],
|
|
1553
1560
|
)
|
|
1554
1561
|
await coder.scheduler.start()
|
|
1555
1562
|
|
|
@@ -1685,18 +1692,46 @@ async def main_async(
|
|
|
1685
1692
|
raise
|
|
1686
1693
|
|
|
1687
1694
|
|
|
1688
|
-
def _scheduler_enabled(
|
|
1689
|
-
"""Resolve whether the scheduler should run:
|
|
1695
|
+
def _scheduler_enabled(scheduler_cfg, workflows):
|
|
1696
|
+
"""Resolve whether the scheduler should run: explicit ``enabled`` > auto."""
|
|
1690
1697
|
|
|
1691
|
-
if
|
|
1692
|
-
return bool(
|
|
1693
|
-
|
|
1694
|
-
if scheduler_cfg.get("enabled", None) is not None:
|
|
1695
|
-
return bool(scheduler_cfg.get("enabled"))
|
|
1698
|
+
if scheduler_cfg.get("enabled") is not None:
|
|
1699
|
+
return bool(scheduler_cfg["enabled"])
|
|
1696
1700
|
|
|
1697
1701
|
return any(getattr(wf, "schedule", None) and getattr(wf, "enabled", True) for wf in workflows)
|
|
1698
1702
|
|
|
1699
1703
|
|
|
1704
|
+
def _scheduler_config(args):
|
|
1705
|
+
"""Resolve the ``scheduler`` config object, defaults layered underneath.
|
|
1706
|
+
|
|
1707
|
+
``args.scheduler`` is a JSON string (the CLI ``--scheduler`` value deep-merged
|
|
1708
|
+
over the config-file object) or ``None`` when unset, in which case the
|
|
1709
|
+
documented defaults apply and ``enabled`` stays ``None`` (auto).
|
|
1710
|
+
"""
|
|
1711
|
+
|
|
1712
|
+
defaults = {
|
|
1713
|
+
"enabled": None,
|
|
1714
|
+
"tick_seconds": 60,
|
|
1715
|
+
"catch_up": True,
|
|
1716
|
+
"max_catchup": 1,
|
|
1717
|
+
}
|
|
1718
|
+
|
|
1719
|
+
raw = getattr(args, "scheduler", None)
|
|
1720
|
+
|
|
1721
|
+
if not raw:
|
|
1722
|
+
return dict(defaults)
|
|
1723
|
+
|
|
1724
|
+
try:
|
|
1725
|
+
parsed = json.loads(raw)
|
|
1726
|
+
except (json.JSONDecodeError, TypeError):
|
|
1727
|
+
return dict(defaults)
|
|
1728
|
+
|
|
1729
|
+
if not isinstance(parsed, dict):
|
|
1730
|
+
return dict(defaults)
|
|
1731
|
+
|
|
1732
|
+
return {**defaults, **parsed}
|
|
1733
|
+
|
|
1734
|
+
|
|
1700
1735
|
async def _stop_scheduler_quietly(coder):
|
|
1701
1736
|
"""Best-effort scheduler shutdown used by reload/exit paths."""
|
|
1702
1737
|
|