cecli-dev 1.8.1rc2__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.1rc2 → cecli_dev-1.8.1rc3}/PKG-INFO +1 -1
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/_version.py +3 -3
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/args.py +2 -6
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/base_coder.py +2 -2
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/agents/service.py +34 -11
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/io_proxy.py +22 -1
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/queues.py +67 -20
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/scheduler/service.py +40 -1
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/main.py +51 -16
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/watch.py +10 -1
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/scheduler.md +6 -14
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/workflows.md +1 -1
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli_dev.egg-info/PKG-INFO +1 -1
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli_dev.egg-info/SOURCES.txt +1 -0
- {cecli_dev-1.8.1rc2 → 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.1rc2 → 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.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_watch.py +28 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/scheduler/test_service.py +61 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/subagents/test_io_proxy.py +41 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/subagents/test_service.py +108 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/unit/test_queues.py +64 -0
- cecli_dev-1.8.1rc2/cecli_dev.egg-info/scm_version.json +0 -8
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/.dockerignore +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/.flake8 +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/.gitattributes +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/.github/workflows/check_pypi_version.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/.github/workflows/docker-build-test.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/.github/workflows/docker-release.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/.github/workflows/issues.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/.github/workflows/pages.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/.github/workflows/pre-commit.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/.github/workflows/release.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/.github/workflows/ubuntu-tests.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/.github/workflows/windows-tests.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/.github/workflows/windows_check_pypi_version.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/.gitignore +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/.pre-commit-config.yaml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/CHANGELOG.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/CNAME +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/CONTRIBUTING.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/HISTORY.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/LICENSE.txt +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/MANIFEST.in +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/README.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/Dockerfile +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/README.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/benchmark.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/benchmark_classic.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/clone-exercism.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/cpp-test.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/docker.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/docker_build.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/install-docker-ubuntu.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/npm-test.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/over_time.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/plot.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/plots.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/problem_stats.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/prompts.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/refactor_tools.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/rsync.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/rungrid.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/swe-bench-lite.txt +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/swe-bench.txt +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/swe_bench.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/test_benchmark.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/variations.1.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/variations.2.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/variations.3.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/benchmark/variations.4.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/__main__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/args_formatter.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/change_tracker.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/agent_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/architect_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/ask_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/chat_chunks.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/context_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/copypaste_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/editblock_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/editblock_fenced_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/editblock_func_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/editor_diff_fenced_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/editor_editblock_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/editor_whole_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/hashline_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/help_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/patch_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/search_replace.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/shell.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/single_wholefile_func_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/sub_agent_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/udiff_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/udiff_simple.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/wholefile_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/coders/wholefile_func_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/add.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/agent.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/agent_model.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/agent_tree.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/architect.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/ask.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/auto_memory.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/chat_mode.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/clear.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/code.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/command_prefix.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/commit.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/compact.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/context.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/context_blocks.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/context_management.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/copy.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/copy_context.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/core.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/diff.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/drop.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/editor.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/editor_model.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/exclude_skill.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/exit.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/git.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/hashline.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/help.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/history_search.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/hooks.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/hot_reload.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/import_skill.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/include_skill.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/insert_queue.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/lint.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/list_mcp.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/list_queue.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/list_sessions.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/list_skills.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/load.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/load_hook.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/load_mcp.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/load_session.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/load_skill.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/ls.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/map.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/map_refresh.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/merge.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/model.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/models.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/multiline_mode.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/paste.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/queue.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/quit.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/read_only.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/read_only_stub.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/reap_agent.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/reasoning_effort.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/remove_hook.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/remove_mcp.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/remove_memory.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/remove_queue.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/remove_skill.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/report.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/reset.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/rules.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/run.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/save.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/save_session.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/search_memory.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/settings.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/spawn_agent.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/switch_agent.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/terminal_data/linux.keytab +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/terminal_setup.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/test.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/think_tokens.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/tokens.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/undo.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/utils/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/utils/base_command.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/utils/helpers.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/utils/registry.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/utils/save_load_manager.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/voice.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/weak_model.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/web.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/workflows.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/commands/workspace.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/decoding.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/deprecated_args.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/diffs.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/dump.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/editor.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/exceptions.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/format_settings.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/help.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/help_pats.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/agents/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/agents/config.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/agents/defaults/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/agents/defaults/memorizer.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/agents/defaults/worker.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/background_commands.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/command_parser.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/command_queue.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/config_utils.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/conversation/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/conversation/base_message.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/conversation/files.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/conversation/integration.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/conversation/manager.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/conversation/service.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/conversation/tags.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/conversation/utils.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/copypaste.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/coroutines.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/crypto.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/extensions/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/extensions/skills_importer.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/file_searcher.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/file_system/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/file_system/builders.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/file_system/ignore.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/file_system/ngram_index.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/file_system/service.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/file_system/trie_index.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/grep_ast/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/grep_ast/dump.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/grep_ast/grep_ast.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/grep_ast/main.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/grep_ast/parsers.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/grep_ast/tsl.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/hashline.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/hashpos/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/hashpos/hashpos.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/hashpos/hashpos.v1.bak +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/hashpos/transformations.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/leak_detect.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/aws_sigv4.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/config.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/constants.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/domains/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/domains/bedrock.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/domains/chat.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/domains/gemini.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/domains/messages.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/domains/responses.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/formatters/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/formatters/reasoning.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/formatters/thinking.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/identifiers.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/litellm_compat.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/pipeline.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/anthropic.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/azure.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/base.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/bedrock.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/bedrock_mantle.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/deepseek.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/gemini.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/github_copilot.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/meta.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/mistral.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/ollama.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/openai.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/providers/openrouter.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/runtime.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/types.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/llms/utils.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/lock_detect.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/loop_detect.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/memory/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/memory/db.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/memory/utils.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/memory_control.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/agent.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/api.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/formatters/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/formatters/reasoning.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/formatters/thinking.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/identifiers.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/llm.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/pipeline.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/registry.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/model_config/utils.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/model_providers.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/nested.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/observations/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/observations/service.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/onboarding/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/onboarding/app.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/onboarding/providers.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/orchestration/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/orchestration/agent_proxy.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/orchestration/environment.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/orchestration/region_resolver.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/orchestration/safe_methods.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/orchestration/security.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/orchestration/service.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/orchestration/tool_proxy.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/plugin_manager.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/profiler.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/requests.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/responses.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/scheduler/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/scheduler/cron.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/scheduler/db.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/scheduler/lock.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/server/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/server/acp/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/server/acp/bridge.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/server/acp/models.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/server/acp/protocol.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/server/signals.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/server/ws_server.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/sessions/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/sessions/layout.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/sessions/manager.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/sessions/payload.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/sessions/storage.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/sessions/subagents.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/similarity.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/skills.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/system_one/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/system_one/api.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/system_one/client.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/system_one/config.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/system_one/integrations.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/system_one/types.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/threading.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/workflows/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/workflows/config.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/workflows/logs.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/workflows/models.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/workflows/outputs.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/workflows/runner.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/workflows/subagents.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/workspaces/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/workspaces/config.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/workspaces/paths.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/workspaces/subagents.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/helpers/workspaces/workspace.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/history.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/hooks/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/hooks/base.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/hooks/helpers.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/hooks/integration.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/hooks/manager.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/hooks/registry.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/hooks/service.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/hooks/types.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/http.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/interruptible_input.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/io.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/linter.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/llm.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/mcp/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/mcp/manager.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/mcp/oauth.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/mcp/server.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/mcp/utils.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/mdstream.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/models.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/onboarding.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/agent.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/architect.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/ask.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/base.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/context.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/copypaste.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/editblock.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/editblock_fenced.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/editblock_func.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/editor_diff_fenced.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/editor_editblock.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/editor_whole.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/hashline.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/help.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/patch.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/single_wholefile_func.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/subagent.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/udiff.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/udiff_simple.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/utils/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/utils/registry.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/utils/system.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/wholefile.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/prompts/wholefile_func.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/README.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/reasoning_tags.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/repo.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/repomap.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/report.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/resources/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/resources/model-metadata.ext.json +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/resources/model-metadata.json +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/resources/model-settings-condensed.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/resources/model-settings.yml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/resources/providers.json +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/run_cmd.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/scrape.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/sendchat.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/signals.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/special.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tests/test_queue_commands.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/_yield.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/broadcast.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/command.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/delegate.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/edit_file.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/explore_code.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/git_branch.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/git_diff.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/git_log.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/git_remote.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/git_show.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/git_status.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/grep.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/ls.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/orchestrate.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/read_file.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/replace_facts.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/resource_manager.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/search_facts.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/thinking.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/undo_change.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/update_todo_list.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/utils/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/utils/base_tool.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/utils/helpers.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/utils/output.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/utils/registry.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/utils/responses.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/validations/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tools/validations/validations.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/app.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/io.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/styles.tcss +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/completion_bar.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/file_list.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/footer.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/input_area.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/input_container.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/key_hints.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/output.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/output_alt.bak +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/selectable_log.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/status_bar.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/subagent_pills.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/widgets/thin_scrollbar.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/tui/worker.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/urls.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/utils.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/versioncheck.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/voice.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/waiting.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/watch_prompts.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_includes/blame.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_includes/get-started.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_includes/help-tip.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_includes/help.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_includes/install.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_includes/keys.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_includes/model-warnings.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_includes/multi-line.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_includes/python-m-aider.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_includes/recording.css +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_includes/recording.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_includes/works-best.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_features.scss +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_footer.scss +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_hero.scss +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_info.scss +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_layout.scss +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_reset.scss +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_testimonials.scss +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_typography.scss +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_sass/_variables.scss +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_sass/custom/custom.scss +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/_sass/global-overrides.scss +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docmd.config.json +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/cecli-temp-logo-favicon.svg +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/adv-model-settings.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/agent-mode.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/api-keys.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/api.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/conf.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/custom-commands.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/custom-system-prompts.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/dotenv.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/editor.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/hooks.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/mcp.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/model-aliases.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/model-configuration.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/model-providers.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/options.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/persistent-memory.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/reasoning.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/retries.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/security.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/skills.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/subagents.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/system-one.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/tui.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config/workspaces.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/config.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/git.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/index.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/install/docker.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/install.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/languages.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/legal/contributor-agreement.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/legal/privacy.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/anthropic.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/azure.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/bedrock.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/cohere.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/deepseek.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/gemini.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/github.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/groq.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/lm-studio.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/ollama.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/openai-compat.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/openai.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/opencode-go.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/openrouter.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/other.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/vertex.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/warnings.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms/xai.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/llms.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/more/analytics.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/more/edit-formats.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/more/infinite-output.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/more-info.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/repomap.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/scripting.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/troubleshooting/imports.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/troubleshooting/support.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/troubleshooting/warnings.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/troubleshooting.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/commands.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/conventions.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/copypaste.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/images-urls.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/lint-test.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/modes.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/not-code.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/notifications.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/optional.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/sessions.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/voice.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage/watch.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/docs/usage.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/package-lock.json +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/package.json +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli/website/share/index.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli_dev.egg-info/dependency_links.txt +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli_dev.egg-info/entry_points.txt +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli_dev.egg-info/requires.txt +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/cecli_dev.egg-info/top_level.txt +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/docker/Dockerfile +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/pyproject.toml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/pytest.ini +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/requirements/common-constraints.txt +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/requirements/requirements-dev.in +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/requirements/requirements-dev.txt +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/requirements/requirements-help.in +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/requirements/requirements-help.txt +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/requirements/requirements-playwright.in +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/requirements/requirements-playwright.txt +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/requirements/requirements.in +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/requirements/tree-sitter.in +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/requirements.txt +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/30k-image.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/blame.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/clean_metadata.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/compare-message-history.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/condense_model_settings.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/cost_analyzer.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/cost_calculator.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/dl_icons.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/docmd_build.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/filter-chat-mode.js +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/generate_providers.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/get_contributor_list.js +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/get_hashline.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/history_prompts.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/homepage.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/issues.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/logo_svg.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/optimize_tokens.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/pip-compile.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/recording_audio.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/redact-cast.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/rename_to_cecli.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/tmux_record.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/tsl_pack_langs.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/update-blame.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/update-docs.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/update-history.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/versionbump.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/scripts/yank-old-versions.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/setup.cfg +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/shim.pyproject.toml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/conftest.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_aws_credentials.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_background_commands.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_commands.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_custom_commands.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_deprecated.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_editblock.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_editor.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_empty_response.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_exceptions.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_file_system_service.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_find_or_blocks.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_hashline.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_hashline_closure.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_history.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_io.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_linter.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_main.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_model_info_manager.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_model_provider_manager.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_models.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_onboarding.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_plugin_manager.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_prompts.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_reasoning.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_repo.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_repomap.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_retry_config.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_run_cmd.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_sanity_check_repo.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_scripting.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_select_selector.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_sendchat.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_session_args.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_session_crypto.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_sessions.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_sessions_manager.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_skills.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_special.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_spinner.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_ssl_verification.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_system_one.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_udiff.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_urls.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_voice.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/basic/test_wholefile.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/coders/test_coder_switching.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/coders/test_copypaste_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/coders/test_rate_limit.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/coders/test_tool_call_consolidation.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/commands/test_auto_memory.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/commands/test_compaction.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/commands/test_remove_memory.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/commands/test_search_memory.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/commands/test_switch_agent.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/commands/test_voice.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/commands/test_workflows.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/commands/test_workspace.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/conftest.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/conversations/test_background_command_injection.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/conversations/test_conversation_integration.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/conversations/test_conversation_system.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/chat-history.md +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/arduino/test.ino +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/bash/test.sh +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/c/test.c +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/chatito/test.chatito +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/clojure/test.clj +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/cpp/test.cpp +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/csharp/test.cs +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/d/test.d +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/dart/test.dart +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/elisp/test.el +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/elixir/test.ex +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/elm/test.elm +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/gleam/test.gleam +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/go/test.go +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/haskell/test.hs +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/hcl/test.tf +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/java/test.java +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/javascript/test.js +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/kotlin/test.kt +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/lua/test.lua +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/matlab/test.m +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/ocaml/test.ml +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/php/test.php +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/pony/test.pony +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/properties/test.properties +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/python/test.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/ql/test.ql +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/r/test.r +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/racket/test.rkt +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/ruby/test.rb +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/rust/test.rs +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/scala/test.scala +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/solidity/test.sol +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/swift/test.swift +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/tsx/test.tsx +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/typescript/test.ts +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/udev/test.rules +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/languages/zig/test.zig +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/sample-code-base/sample.js +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/sample-code-base/sample.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/watch.js +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/watch.lisp +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/watch.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/fixtures/watch_question.js +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/help/test_help.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/observations/test_observation_service.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/scheduler/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/scheduler/test_cron.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/scheduler/test_db.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/server/acp/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/server/acp/test_bridge.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/server/acp/test_dispatch.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/server/acp/test_models.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/server/acp/test_protocol.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_api_base.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_aws_sigv4.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_cache_control.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_gemini_auth.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_github_copilot_auth.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_hyperscalers.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_messages_stream.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_messages_wire.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_mistral_adapter.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_mistral_provider.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_ollama_native.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_providers_json.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_reasoning_config.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_reasoning_extract.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_reasoning_summaries.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_llms_vision.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_loop_detect.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_memory_control.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_model_config.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_onboarding.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_orchestration.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/test_skills_importer.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/workflows/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/workflows/test_config.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/workflows/test_runner.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/workflows/test_subagents.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/workspaces/conftest.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/workspaces/test_config.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/workspaces/test_paths.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/workspaces/test_subagents.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/helpers/workspaces/test_workspace_manager.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/hooks/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/hooks/test_base.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/hooks/test_manager.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/hooks/test_registry.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/integration/test_agent_mcp_management.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/integration/test_config_loading.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/integration/test_mcp_management.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/integration/test_workflows_e2e.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/mcp/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/mcp/conftest.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/mcp/mock_server.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/mcp/test_keepalive_concurrency.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/mcp/test_keepalive_config.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/mcp/test_keepalive_integration.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/mcp/test_keepalive_logging.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/mcp/test_keepalive_resilience.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/mcp/test_keepalive_unit.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/mcp/test_manager.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/mcp/test_manager_retry.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/mcp/test_server_name_normalization.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/mcp/test_server_sdk_compat.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/mcp/test_tool_name_sanitization.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/scrape/test_playwright_disable.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/scrape/test_scrape.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/subagents/__init__.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/subagents/conftest.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/subagents/test_commands.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/subagents/test_config.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/subagents/test_delegate.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/subagents/test_finished.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/subagents/test_sub_agent_coder.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/test_requests.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tools/test_command_format_output.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tools/test_command_timeout_paging.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tools/test_edit_file_format_output.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tools/test_extractions.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tools/test_get_lines.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tools/test_git_branch.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tools/test_git_diff.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tools/test_grep.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tools/test_insert_block.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tools/test_read_range_execute.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tools/test_registry.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tools/test_remove_mcp_tool.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tools/test_resource_manager_paging.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tools/test_tool_arguments.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tools/test_tools_load_mcp_tool.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tools/validations.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tui/test_app.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tui/test_completion_bar.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/tui/test_output.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/unit/conftest.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/unit/test_deep_merge.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/unit/test_edge_cases.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/unit/test_load_mcp.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/unit/test_performance.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/unit/test_remove_mcp.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/unit/test_retry_backoff.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/unit/test_shallow_merge.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/unit/test_signals.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/unit/test_unit_load_mcp_tool.py +0 -0
- {cecli_dev-1.8.1rc2 → cecli_dev-1.8.1rc3}/tests/unit/test_unit_remove_mcp_tool.py +0 -0
- {cecli_dev-1.8.1rc2 → 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",
|
|
@@ -2717,7 +2717,7 @@ class Coder(metaclass=UsageMeta):
|
|
|
2717
2717
|
async def check_tokens(self, messages):
|
|
2718
2718
|
"""Check if the messages will fit within the model's token limits."""
|
|
2719
2719
|
input_tokens = self.get_active_model().token_count(messages)
|
|
2720
|
-
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
|
|
2721
2721
|
|
|
2722
2722
|
if max_input_tokens and input_tokens >= max_input_tokens:
|
|
2723
2723
|
if (
|
|
@@ -2728,7 +2728,7 @@ class Coder(metaclass=UsageMeta):
|
|
|
2728
2728
|
f"Estimated chat context of {input_tokens:,} tokens exceeds the"
|
|
2729
2729
|
f" {max_input_tokens:,} token limit. Attempting to compact..."
|
|
2730
2730
|
)
|
|
2731
|
-
await self.compact_context_if_needed(
|
|
2731
|
+
await self.compact_context_if_needed()
|
|
2732
2732
|
|
|
2733
2733
|
# After compaction, re-format messages and re-check tokens
|
|
2734
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)
|
|
@@ -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
|
|
|
@@ -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
|
|
|
@@ -322,6 +322,12 @@ class FileWatcher:
|
|
|
322
322
|
# before this scan can share the threshold tick and must not be re-found.
|
|
323
323
|
threshold = self.last_scan_time
|
|
324
324
|
found = set()
|
|
325
|
+
# Track the newest filesystem mtime observed during this scan. On
|
|
326
|
+
# Windows the wall clock (time.time) is coarser than file mtimes, so a
|
|
327
|
+
# file written just before this scan can carry an mtime slightly ahead
|
|
328
|
+
# of scan_started; advancing the threshold from the filesystem clock
|
|
329
|
+
# instead of the wall clock keeps such a file from being re-found.
|
|
330
|
+
max_mtime = threshold
|
|
325
331
|
|
|
326
332
|
for root in self.get_roots_to_watch():
|
|
327
333
|
root_path = Path(root)
|
|
@@ -335,12 +341,15 @@ class FileWatcher:
|
|
|
335
341
|
|
|
336
342
|
for path in candidates:
|
|
337
343
|
try:
|
|
344
|
+
max_mtime = max(max_mtime, path.stat().st_mtime)
|
|
338
345
|
if self.filter_func(None, str(path)):
|
|
339
346
|
found.add(str(path.absolute()))
|
|
340
347
|
except Exception:
|
|
341
348
|
continue
|
|
342
349
|
|
|
343
|
-
|
|
350
|
+
# Advance to the newest filesystem timestamp we saw so the next scan's
|
|
351
|
+
# threshold is never behind a file's mtime (see note above).
|
|
352
|
+
self.last_scan_time = max(scan_started, max_mtime)
|
|
344
353
|
|
|
345
354
|
if found:
|
|
346
355
|
self.changed_files.update(found)
|
|
@@ -9,14 +9,7 @@ The [scheduler](workflows.html) is the component that turns a [workflow](workflo
|
|
|
9
9
|
|
|
10
10
|
## Running it
|
|
11
11
|
|
|
12
|
-
The scheduler starts automatically in any interactive cecli session that has at least one enabled, scheduled workflow.
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
cecli --scheduler # force on for this session
|
|
16
|
-
cecli --no-scheduler # force off (workflows are still usable via /workflows run)
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
or persistently in `.cecli.conf.yml`:
|
|
12
|
+
The scheduler starts automatically in any interactive cecli session that has at least one enabled, scheduled workflow. It is configured as an object in `.cecli.conf.yml`:
|
|
20
13
|
|
|
21
14
|
```yaml
|
|
22
15
|
scheduler:
|
|
@@ -26,7 +19,9 @@ scheduler:
|
|
|
26
19
|
max_catchup: 1 # how many missed slots to replay before skipping ahead
|
|
27
20
|
```
|
|
28
21
|
|
|
29
|
-
|
|
22
|
+
`--scheduler <json>` overrides it for a single session with the same object, e.g. `cecli --scheduler '{"enabled": false}'`. Disabling is always expressed through the object's `enabled` key — there is no separate off switch — and workflows remain usable manually via `/workflows run`.
|
|
23
|
+
|
|
24
|
+
Resolution order for whether it runs: `enabled` (from the CLI `--scheduler <json>` deep-merged over the `scheduler:` config key) decides on/off; when `enabled` is omitted the mode is auto — on when any enabled workflow has a `schedule:`, off otherwise. Nothing touches the coordination database when no scheduled workflow exists, and one-shot (`--message`) runs return before the scheduler can tick.
|
|
30
25
|
|
|
31
26
|
The `catch_up` pair controls what happens after downtime (e.g. a sleeping laptop):
|
|
32
27
|
|
|
@@ -35,10 +30,6 @@ The `catch_up` pair controls what happens after downtime (e.g. a sleeping laptop
|
|
|
35
30
|
|
|
36
31
|
An individual workflow may override the global setting with its own top-level `catch_up: true|false` key (see [Workflows](workflows.html)); unset means "follow the scheduler".
|
|
37
32
|
|
|
38
|
-
A headless daemon mode (scheduling on a server with no interactive session) is planned but not yet available; today scheduled runs only fire while a cecli session is alive.
|
|
39
|
-
|
|
40
|
-
In TUI mode the scheduler ticks and dispatches on the primary event loop while the interactive coder runs on the TUI worker-thread loop. Scheduled runs still get their own sub-agent pane: the container notifications handle being called from the app's own thread. Workflow dispatch itself is loop-safe (the DB is threaded, sub-agent spawning marshals through `AgentService`), but a run's worker conversation shares MCP connections across loops; prefer linear (non-TUI) sessions or a dedicated `--scheduler` instance for production schedules until a `run_coroutine_threadsafe` bridge lands.
|
|
41
|
-
|
|
42
33
|
## Multi-instance coordination
|
|
43
34
|
|
|
44
35
|
You can safely run **many** cecli instances at once (same machine, or one shared `~/.cecli` on a network filesystem — see caveats). They cooperate through a global SQLite database:
|
|
@@ -68,5 +59,6 @@ Scheduler state is visible from any session with the [workflow commands](workflo
|
|
|
68
59
|
|
|
69
60
|
## Arguments
|
|
70
61
|
|
|
71
|
-
- `--scheduler
|
|
62
|
+
- `--scheduler <json>`: Override scheduler configuration for this session (same object as the `scheduler:` config key).
|
|
72
63
|
- `--workflows <json|yaml>`: Workflow definitions the scheduler will consider (see [Workflows](workflows.html)).
|
|
64
|
+
- To disable the scheduler, pass `--scheduler '{"enabled": false}'` (or set `enabled: false` under the `scheduler:` config key).
|
|
@@ -154,4 +154,4 @@ tasks:
|
|
|
154
154
|
## Arguments
|
|
155
155
|
|
|
156
156
|
- `--workflows <json|yaml>`: Provide an inline workflows configuration or a path to a workflows file, overriding all file-based sources.
|
|
157
|
-
- `--scheduler
|
|
157
|
+
- `--scheduler <json>`: Override [scheduler](scheduler.html) configuration for this session (same object as the `scheduler:` config key).
|
|
@@ -708,6 +708,7 @@ tests/basic/test_repomap.py
|
|
|
708
708
|
tests/basic/test_retry_config.py
|
|
709
709
|
tests/basic/test_run_cmd.py
|
|
710
710
|
tests/basic/test_sanity_check_repo.py
|
|
711
|
+
tests/basic/test_scheduler_config.py
|
|
711
712
|
tests/basic/test_scripting.py
|
|
712
713
|
tests/basic/test_select_selector.py
|
|
713
714
|
tests/basic/test_sendchat.py
|
|
@@ -948,6 +948,7 @@
|
|
|
948
948
|
"tests/basic/test_retry_config.py",
|
|
949
949
|
"tests/basic/test_run_cmd.py",
|
|
950
950
|
"tests/basic/test_sanity_check_repo.py",
|
|
951
|
+
"tests/basic/test_scheduler_config.py",
|
|
951
952
|
"tests/basic/test_scripting.py",
|
|
952
953
|
"tests/basic/test_select_selector.py",
|
|
953
954
|
"tests/basic/test_sendchat.py",
|