cecli-dev 1.5.1__tar.gz → 1.6.0__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.5.1 → cecli_dev-1.6.0}/PKG-INFO +1 -1
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/_version.py +3 -3
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/agent_coder.py +63 -15
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/base_coder.py +9 -2
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/list_sessions.py +1 -1
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/load_session.py +6 -3
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/save_session.py +6 -2
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/tokens.py +151 -43
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/background_commands.py +123 -4
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/conversation/integration.py +73 -7
- cecli_dev-1.6.0/cecli/helpers/coroutines.py +184 -0
- cecli_dev-1.6.0/cecli/helpers/lock_detect.py +137 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/agent.py +9 -2
- cecli_dev-1.6.0/cecli/helpers/sessions/__init__.py +20 -0
- cecli_dev-1.6.0/cecli/helpers/sessions/layout.py +112 -0
- cecli_dev-1.6.0/cecli/helpers/sessions/manager.py +325 -0
- cecli_dev-1.6.0/cecli/helpers/sessions/payload.py +287 -0
- cecli_dev-1.6.0/cecli/helpers/sessions/storage.py +245 -0
- cecli_dev-1.6.0/cecli/helpers/sessions/subagents.py +152 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/main.py +1 -1
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/mcp/manager.py +83 -32
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/mcp/oauth.py +74 -18
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/mcp/server.py +54 -8
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/models.py +6 -4
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/repo.py +48 -13
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/command.py +195 -41
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/app.py +41 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/input_area.py +5 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/worker.py +210 -19
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/mcp.md +31 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/tui.md +6 -2
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli_dev.egg-info/PKG-INFO +1 -1
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli_dev.egg-info/SOURCES.txt +7 -1
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli_dev.egg-info/scm_file_list.json +7 -1
- cecli_dev-1.6.0/cecli_dev.egg-info/scm_version.json +8 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_background_commands.py +167 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_commands.py +119 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_models.py +12 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_sessions.py +1 -1
- cecli_dev-1.6.0/tests/basic/test_sessions_manager.py +473 -0
- cecli_dev-1.6.0/tests/conversations/test_background_command_injection.py +170 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_model_config.py +17 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_manager_retry.py +46 -4
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_command_timeout_paging.py +46 -58
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_resource_manager_paging.py +17 -7
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tui/test_app.py +86 -0
- cecli_dev-1.5.1/cecli/helpers/coroutines.py +0 -111
- cecli_dev-1.5.1/cecli/helpers/lock_detect.py +0 -61
- cecli_dev-1.5.1/cecli/sessions.py +0 -505
- cecli_dev-1.5.1/cecli_dev.egg-info/scm_version.json +0 -8
- cecli_dev-1.5.1/tests/basic/test_sessions_manager.py +0 -219
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.dockerignore +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.flake8 +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.gitattributes +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/check_pypi_version.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/docker-build-test.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/docker-release.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/issues.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/pages.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/pre-commit.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/release.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/ubuntu-tests.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/windows-tests.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.github/workflows/windows_check_pypi_version.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.gitignore +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/.pre-commit-config.yaml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/CHANGELOG.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/CNAME +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/CONTRIBUTING.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/HISTORY.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/LICENSE.txt +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/MANIFEST.in +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/README.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/Dockerfile +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/README.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/benchmark.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/benchmark_classic.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/clone-exercism.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/cpp-test.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/docker.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/docker_build.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/install-docker-ubuntu.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/npm-test.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/over_time.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/plot.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/plots.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/problem_stats.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/prompts.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/refactor_tools.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/rsync.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/rungrid.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/swe-bench-lite.txt +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/swe-bench.txt +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/swe_bench.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/test_benchmark.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/variations.1.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/variations.2.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/variations.3.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/benchmark/variations.4.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/__main__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/args.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/args_formatter.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/change_tracker.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/architect_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/ask_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/chat_chunks.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/context_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/copypaste_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/editblock_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/editblock_fenced_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/editblock_func_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/editor_diff_fenced_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/editor_editblock_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/editor_whole_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/hashline_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/help_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/patch_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/search_replace.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/shell.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/single_wholefile_func_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/sub_agent_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/udiff_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/udiff_simple.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/wholefile_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/coders/wholefile_func_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/add.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/agent.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/agent_model.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/agent_tree.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/architect.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/ask.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/auto_memory.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/chat_mode.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/clear.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/code.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/command_prefix.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/commit.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/compact.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/context.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/context_blocks.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/context_management.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/copy.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/copy_context.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/core.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/diff.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/drop.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/editor.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/editor_model.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/exclude_skill.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/exit.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/git.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/hashline.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/help.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/history_search.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/hooks.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/hot_reload.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/import_skill.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/include_skill.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/insert_queue.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/lint.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/list_mcp.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/list_queue.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/list_skills.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/load.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/load_hook.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/load_mcp.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/load_skill.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/ls.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/map.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/map_refresh.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/merge.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/model.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/models.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/multiline_mode.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/paste.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/queue.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/quit.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/read_only.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/read_only_stub.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/reap_agent.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/reasoning_effort.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/remove_hook.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/remove_mcp.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/remove_memory.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/remove_queue.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/remove_skill.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/report.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/reset.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/rules.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/run.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/save.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/search_memory.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/settings.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/spawn_agent.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/switch_agent.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/terminal_data/linux.keytab +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/terminal_setup.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/test.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/think_tokens.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/undo.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/utils/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/utils/base_command.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/utils/helpers.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/utils/registry.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/utils/save_load_manager.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/voice.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/weak_model.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/web.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/commands/workspace.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/decoding.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/deprecated_args.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/diffs.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/dump.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/editor.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/exceptions.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/format_settings.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/help.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/help_pats.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/agents/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/agents/config.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/agents/defaults/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/agents/defaults/memorizer.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/agents/defaults/worker.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/agents/service.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/command_parser.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/command_queue.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/config_utils.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/conversation/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/conversation/base_message.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/conversation/files.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/conversation/manager.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/conversation/service.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/conversation/tags.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/conversation/utils.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/copypaste.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/crypto.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/extensions/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/extensions/skills_importer.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/file_searcher.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/file_system/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/file_system/builders.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/file_system/ignore.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/file_system/ngram_index.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/file_system/service.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/file_system/trie_index.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/grep_ast/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/grep_ast/dump.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/grep_ast/grep_ast.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/grep_ast/main.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/grep_ast/parsers.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/grep_ast/tsl.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/hashline.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/hashpos/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/hashpos/hashpos.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/hashpos/hashpos.v1.bak +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/hashpos/transformations.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/io_proxy.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/leak_detect.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/aws_sigv4.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/config.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/domains/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/domains/bedrock.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/domains/chat.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/domains/gemini.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/domains/messages.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/domains/responses.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/formatters/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/formatters/reasoning.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/formatters/thinking.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/identifiers.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/litellm_compat.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/pipeline.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/anthropic.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/azure.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/base.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/bedrock.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/bedrock_mantle.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/deepseek.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/gemini.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/github_copilot.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/meta.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/mistral.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/openai.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/providers/openrouter.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/runtime.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/types.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/llms/utils.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/loop_detect.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/memory/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/memory/db.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/memory/utils.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/memory_control.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/api.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/formatters/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/formatters/reasoning.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/formatters/thinking.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/identifiers.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/llm.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/pipeline.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/registry.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_config/utils.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/model_providers.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/nested.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/observations/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/observations/service.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/onboarding/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/onboarding/app.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/onboarding/providers.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/orchestration/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/orchestration/agent_proxy.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/orchestration/environment.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/orchestration/region_resolver.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/orchestration/safe_methods.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/orchestration/security.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/orchestration/service.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/orchestration/tool_proxy.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/plugin_manager.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/profiler.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/queues.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/requests.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/responses.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/server/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/server/acp/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/server/acp/bridge.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/server/acp/models.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/server/acp/protocol.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/server/signals.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/server/ws_server.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/similarity.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/skills.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/threading.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/workspaces/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/workspaces/config.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/workspaces/paths.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/workspaces/subagents.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/helpers/workspaces/workspace.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/history.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/hooks/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/hooks/base.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/hooks/helpers.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/hooks/integration.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/hooks/manager.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/hooks/registry.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/hooks/service.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/hooks/types.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/http.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/interruptible_input.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/io.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/linter.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/llm.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/mcp/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/mcp/utils.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/mdstream.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/onboarding.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/agent.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/architect.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/ask.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/base.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/context.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/copypaste.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/editblock.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/editblock_fenced.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/editblock_func.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/editor_diff_fenced.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/editor_editblock.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/editor_whole.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/hashline.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/help.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/patch.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/single_wholefile_func.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/subagent.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/udiff.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/udiff_simple.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/utils/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/utils/registry.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/utils/system.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/wholefile.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/prompts/wholefile_func.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/README.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/reasoning_tags.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/repomap.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/report.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/resources/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/resources/model-metadata.ext.json +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/resources/model-metadata.json +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/resources/model-settings-condensed.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/resources/model-settings.yml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/resources/providers.json +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/run_cmd.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/scrape.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/sendchat.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/signals.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/special.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tests/test_queue_commands.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/_yield.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/broadcast.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/delegate.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/edit_file.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/explore_code.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/git_branch.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/git_diff.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/git_log.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/git_remote.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/git_show.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/git_status.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/grep.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/ls.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/orchestrate.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/read_file.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/replace_facts.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/resource_manager.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/search_facts.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/thinking.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/undo_change.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/update_todo_list.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/utils/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/utils/base_tool.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/utils/helpers.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/utils/output.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/utils/registry.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/utils/responses.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/validations/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tools/validations/validations.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/io.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/styles.tcss +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/completion_bar.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/file_list.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/footer.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/input_container.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/key_hints.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/output.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/output_alt.bak +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/selectable_log.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/status_bar.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/tui/widgets/subagent_pills.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/urls.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/utils.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/versioncheck.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/voice.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/waiting.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/watch.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/watch_prompts.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/blame.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/get-started.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/help-tip.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/help.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/install.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/keys.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/model-warnings.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/multi-line.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/python-m-aider.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/recording.css +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/recording.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_includes/works-best.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_features.scss +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_footer.scss +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_hero.scss +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_info.scss +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_layout.scss +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_reset.scss +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_testimonials.scss +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_typography.scss +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/_variables.scss +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/custom/custom.scss +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/_sass/global-overrides.scss +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docmd.config.json +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/cecli-temp-logo-favicon.svg +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/adv-model-settings.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/agent-mode.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/api-keys.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/api.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/conf.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/custom-commands.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/custom-system-prompts.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/dotenv.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/editor.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/hooks.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/model-aliases.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/model-configuration.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/model-providers.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/options.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/persistent-memory.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/reasoning.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/retries.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/security.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/skills.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/subagents.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config/workspaces.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/config.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/git.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/index.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/install/docker.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/install.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/languages.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/legal/contributor-agreement.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/legal/privacy.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/anthropic.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/azure.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/bedrock.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/cohere.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/deepseek.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/gemini.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/github.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/groq.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/lm-studio.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/ollama.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/openai-compat.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/openai.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/opencode-go.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/openrouter.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/other.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/vertex.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/warnings.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms/xai.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/llms.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/more/analytics.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/more/edit-formats.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/more/infinite-output.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/more-info.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/repomap.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/scripting.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/troubleshooting/imports.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/troubleshooting/support.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/troubleshooting/warnings.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/troubleshooting.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/commands.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/conventions.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/copypaste.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/images-urls.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/lint-test.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/modes.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/not-code.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/notifications.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/optional.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/sessions.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/tips.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/voice.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage/watch.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/docs/usage.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/package-lock.json +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/package.json +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli/website/share/index.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli_dev.egg-info/dependency_links.txt +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli_dev.egg-info/entry_points.txt +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli_dev.egg-info/requires.txt +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/cecli_dev.egg-info/top_level.txt +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/docker/Dockerfile +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/pyproject.toml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/pytest.ini +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/common-constraints.txt +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/requirements-dev.in +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/requirements-dev.txt +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/requirements-help.in +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/requirements-help.txt +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/requirements-playwright.in +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/requirements-playwright.txt +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/requirements.in +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements/tree-sitter.in +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/requirements.txt +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/30k-image.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/blame.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/clean_metadata.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/compare-message-history.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/condense_model_settings.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/cost_analyzer.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/cost_calculator.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/dl_icons.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/docmd_build.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/filter-chat-mode.js +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/generate_providers.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/get_contributor_list.js +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/get_hashline.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/history_prompts.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/homepage.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/issues.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/logo_svg.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/optimize_tokens.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/pip-compile.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/recording_audio.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/redact-cast.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/rename_to_cecli.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/tmux_record.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/tsl_pack_langs.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/update-blame.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/update-docs.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/update-history.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/versionbump.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/scripts/yank-old-versions.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/setup.cfg +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/shim.pyproject.toml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/conftest.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_agent_config_merge.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_aws_credentials.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_custom_commands.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_deprecated.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_editblock.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_editor.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_exceptions.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_file_system_service.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_find_or_blocks.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_hashline.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_hashline_closure.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_history.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_io.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_linter.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_main.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_model_info_manager.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_model_provider_manager.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_onboarding.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_plugin_manager.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_prompts.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_reasoning.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_repo.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_repomap.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_run_cmd.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_sanity_check_repo.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_scripting.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_select_selector.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_sendchat.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_session_args.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_session_crypto.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_skills.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_special.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_spinner.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_ssl_verification.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_udiff.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_urls.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_voice.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_watch.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/basic/test_wholefile.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/coders/test_coder_switching.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/coders/test_copypaste_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/coders/test_rate_limit.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/coders/test_tool_call_consolidation.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/commands/test_auto_memory.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/commands/test_compaction.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/commands/test_remove_memory.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/commands/test_search_memory.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/commands/test_switch_agent.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/commands/test_voice.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/commands/test_workspace.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/conftest.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/conversations/test_conversation_integration.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/conversations/test_conversation_system.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/chat-history.md +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/arduino/test.ino +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/bash/test.sh +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/c/test.c +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/chatito/test.chatito +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/clojure/test.clj +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/cpp/test.cpp +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/csharp/test.cs +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/d/test.d +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/dart/test.dart +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/elisp/test.el +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/elixir/test.ex +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/elm/test.elm +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/gleam/test.gleam +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/go/test.go +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/haskell/test.hs +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/hcl/test.tf +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/java/test.java +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/javascript/test.js +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/kotlin/test.kt +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/lua/test.lua +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/matlab/test.m +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/ocaml/test.ml +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/php/test.php +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/pony/test.pony +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/properties/test.properties +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/python/test.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/ql/test.ql +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/r/test.r +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/racket/test.rkt +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/ruby/test.rb +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/rust/test.rs +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/scala/test.scala +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/solidity/test.sol +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/swift/test.swift +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/tsx/test.tsx +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/typescript/test.ts +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/udev/test.rules +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/languages/zig/test.zig +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/sample-code-base/sample.js +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/sample-code-base/sample.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/watch.js +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/watch.lisp +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/watch.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/fixtures/watch_question.js +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/help/test_help.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/observations/test_observation_service.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/server/acp/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/server/acp/test_bridge.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/server/acp/test_dispatch.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/server/acp/test_models.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/server/acp/test_protocol.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_api_base.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_aws_sigv4.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_cache_control.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_gemini_auth.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_github_copilot_auth.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_hyperscalers.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_messages_stream.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_messages_wire.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_mistral_adapter.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_mistral_provider.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_providers_json.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_reasoning_config.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_reasoning_extract.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_reasoning_summaries.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_llms_vision.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_loop_detect.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_memory_control.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_onboarding.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_orchestration.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/test_skills_importer.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/workspaces/conftest.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/workspaces/test_config.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/workspaces/test_paths.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/workspaces/test_subagents.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/helpers/workspaces/test_workspace_manager.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/hooks/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/hooks/test_base.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/hooks/test_manager.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/hooks/test_registry.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/integration/test_agent_mcp_management.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/integration/test_config_loading.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/integration/test_mcp_management.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/conftest.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/mock_server.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_keepalive_concurrency.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_keepalive_config.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_keepalive_integration.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_keepalive_logging.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_keepalive_resilience.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_keepalive_unit.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_manager.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_server_name_normalization.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/mcp/test_server_sdk_compat.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/scrape/test_playwright_disable.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/scrape/test_scrape.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/__init__.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/conftest.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/test_commands.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/test_config.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/test_delegate.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/test_finished.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/test_io_proxy.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/test_service.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/subagents/test_sub_agent_coder.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/test_requests.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_command_format_output.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_edit_file_format_output.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_extractions.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_get_lines.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_git_branch.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_git_diff.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_grep.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_insert_block.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_read_range_execute.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_registry.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_remove_mcp_tool.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_tool_arguments.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/test_tools_load_mcp_tool.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tools/validations.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/tui/test_completion_bar.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/conftest.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_deep_merge.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_edge_cases.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_load_mcp.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_performance.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_queues.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_remove_mcp.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_retry_backoff.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_shallow_merge.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_signals.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_unit_load_mcp_tool.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/tests/unit/test_unit_remove_mcp_tool.py +0 -0
- {cecli_dev-1.5.1 → cecli_dev-1.6.0}/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.
|
|
22
|
-
__version_tuple__ = version_tuple = (1,
|
|
21
|
+
__version__ = version = '1.6.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 6, 0)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gab974c9a6'
|
|
@@ -652,6 +652,10 @@ class AgentCoder(Coder):
|
|
|
652
652
|
# Add post-message context blocks (priority 250 - between CUR and REMINDER)
|
|
653
653
|
ConversationService.get_chunks(self).add_post_message_context_blocks()
|
|
654
654
|
|
|
655
|
+
# Background command output is debounced independently so it is not
|
|
656
|
+
# re-dumped every turn as its contents mutate slightly
|
|
657
|
+
ConversationService.get_chunks(self).add_background_command_output()
|
|
658
|
+
|
|
655
659
|
# Add sub-agent states context block (same priority as post-message blocks)
|
|
656
660
|
ConversationService.get_chunks(self).add_sub_agent_states()
|
|
657
661
|
|
|
@@ -935,7 +939,11 @@ class AgentCoder(Coder):
|
|
|
935
939
|
lint_coro = self.lint_edited(edited, show_output=False)
|
|
936
940
|
lint_errors, interrupted = await interruptible(lint_coro, self.interrupt_event)
|
|
937
941
|
if interrupted:
|
|
938
|
-
|
|
942
|
+
# Abort the turn with CancelledError, which the linear run loop
|
|
943
|
+
# handles by re-prompting for input. KeyboardInterrupt is a
|
|
944
|
+
# BaseException that would escape the worker's event loop and
|
|
945
|
+
# leave it unable to accept further prompts.
|
|
946
|
+
raise asyncio.CancelledError("Interrupted during linting")
|
|
939
947
|
|
|
940
948
|
has_errors = False
|
|
941
949
|
|
|
@@ -1074,7 +1082,10 @@ class AgentCoder(Coder):
|
|
|
1074
1082
|
sleep_coro = asyncio.sleep(command_timeout / 2)
|
|
1075
1083
|
_res, interrupted = await interruptible(sleep_coro, self.interrupt_event)
|
|
1076
1084
|
if interrupted:
|
|
1077
|
-
|
|
1085
|
+
# Use CancelledError (not KeyboardInterrupt) so the interrupt
|
|
1086
|
+
# stays inside the worker loop and re-prompts, matching the
|
|
1087
|
+
# lint interrupt path above.
|
|
1088
|
+
raise asyncio.CancelledError("Interrupted while waiting for background commands")
|
|
1078
1089
|
return True
|
|
1079
1090
|
|
|
1080
1091
|
# Check for recently finished commands that need reflection
|
|
@@ -1845,25 +1856,44 @@ Todo list does not exist. Please update it with the `UpdateTodoList` tool.</cont
|
|
|
1845
1856
|
"""
|
|
1846
1857
|
Get background command output to append after the main message.
|
|
1847
1858
|
|
|
1848
|
-
|
|
1849
|
-
|
|
1859
|
+
Emits a roster of active commands (keeping command keys in context)
|
|
1860
|
+
plus any new incremental output. Output that has been paged to disk is
|
|
1861
|
+
advertised by command key and read on demand through ``ResourceManager``
|
|
1862
|
+
paging.
|
|
1850
1863
|
"""
|
|
1851
|
-
|
|
1852
|
-
bg_outputs = BackgroundCommandManager.get_all_command_outputs(clear=True)
|
|
1864
|
+
command_info = BackgroundCommandManager.list_background_commands()
|
|
1853
1865
|
|
|
1854
|
-
if not
|
|
1866
|
+
if not command_info:
|
|
1855
1867
|
return ""
|
|
1856
1868
|
|
|
1857
|
-
|
|
1858
|
-
|
|
1869
|
+
new_outputs = {}
|
|
1870
|
+
for command_key in command_info:
|
|
1871
|
+
output = BackgroundCommandManager.get_new_command_output(command_key)
|
|
1872
|
+
if output.strip():
|
|
1873
|
+
new_outputs[command_key] = output
|
|
1859
1874
|
|
|
1860
|
-
# Create formatted output for background commands
|
|
1861
1875
|
output = "--- Background Commands Output ---\n"
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1876
|
+
output += "Commands:\n"
|
|
1877
|
+
|
|
1878
|
+
paged_keys = []
|
|
1879
|
+
for command_key, info in sorted(command_info.items()):
|
|
1880
|
+
status = "running" if info.get("running", False) else "finished"
|
|
1881
|
+
pages = info.get("pages", 0)
|
|
1882
|
+
page_note = f"pages 1-{pages}" if pages else "no pages yet"
|
|
1883
|
+
output += (
|
|
1884
|
+
f"- {command_key} [{status}] `{info.get('command', command_key)}`"
|
|
1885
|
+
f" — {info.get('total_chars', 0):,} chars, {page_note}\n"
|
|
1886
|
+
)
|
|
1887
|
+
if pages:
|
|
1888
|
+
paged_keys.append(command_key)
|
|
1889
|
+
|
|
1890
|
+
for command_key, cmd_output in new_outputs.items():
|
|
1891
|
+
output += f"\nNew output ({command_key}):\n{cmd_output}\n"
|
|
1892
|
+
|
|
1893
|
+
if paged_keys:
|
|
1894
|
+
output += "\nPaged output is available via `ResourceManager` (up to 3 pages):\n"
|
|
1895
|
+
for command_key in paged_keys:
|
|
1896
|
+
output += f'{{"paging": [{{"target": "{command_key}", "page": 1}}]}}\n'
|
|
1867
1897
|
|
|
1868
1898
|
# Clean up stale (finished) background commands after reading their output
|
|
1869
1899
|
for command_key, info in command_info.items():
|
|
@@ -1872,6 +1902,24 @@ Todo list does not exist. Please update it with the `UpdateTodoList` tool.</cont
|
|
|
1872
1902
|
|
|
1873
1903
|
return output
|
|
1874
1904
|
|
|
1905
|
+
def get_background_command_state(self):
|
|
1906
|
+
"""
|
|
1907
|
+
Return a lightweight status snapshot of tracked background commands.
|
|
1908
|
+
|
|
1909
|
+
Maps each command key to its running state and page count so the
|
|
1910
|
+
injection layer can detect finish and page-flush transitions cheaply
|
|
1911
|
+
without consuming any output.
|
|
1912
|
+
"""
|
|
1913
|
+
command_info = BackgroundCommandManager.list_background_commands()
|
|
1914
|
+
|
|
1915
|
+
return {
|
|
1916
|
+
key: {
|
|
1917
|
+
"running": bool(info.get("running", False)),
|
|
1918
|
+
"pages": info.get("pages", 0),
|
|
1919
|
+
}
|
|
1920
|
+
for key, info in command_info.items()
|
|
1921
|
+
}
|
|
1922
|
+
|
|
1875
1923
|
def get_git_status(self):
|
|
1876
1924
|
"""
|
|
1877
1925
|
Generate a git status context block for repository information.
|
|
@@ -46,6 +46,7 @@ from cecli.helpers.loop_detect import LoopDetectedError, LoopDetector
|
|
|
46
46
|
from cecli.helpers.memory_control import trim_memory
|
|
47
47
|
from cecli.helpers.observations.service import ObservationService
|
|
48
48
|
from cecli.helpers.profiler import TokenProfiler
|
|
49
|
+
from cecli.helpers.sessions import SessionManager
|
|
49
50
|
from cecli.helpers.threading import ThreadSafeEvent
|
|
50
51
|
from cecli.history import ChatSummary
|
|
51
52
|
from cecli.hooks import HookIntegration
|
|
@@ -64,7 +65,6 @@ from cecli.repo import ANY_GIT_ERROR, GitRepoProxy
|
|
|
64
65
|
from cecli.repomap import RepoMap
|
|
65
66
|
from cecli.report import update_error_prefix
|
|
66
67
|
from cecli.run_cmd import run_cmd_async
|
|
67
|
-
from cecli.sessions import SessionManager
|
|
68
68
|
from cecli.tools.utils.output import print_tool_response
|
|
69
69
|
from cecli.tools.utils.registry import ToolRegistry
|
|
70
70
|
from cecli.utils import copy_tool_call, format_tokens, is_image_file
|
|
@@ -1999,7 +1999,13 @@ class Coder(metaclass=UsageMeta):
|
|
|
1999
1999
|
if self.commands.is_run_command(inp):
|
|
2000
2000
|
self.commands.cmd_running_event.clear() # Command is running
|
|
2001
2001
|
|
|
2002
|
-
|
|
2002
|
+
try:
|
|
2003
|
+
return await self.commands.run(inp, coder=self, **run_kwargs)
|
|
2004
|
+
finally:
|
|
2005
|
+
# Dispatch can return early (unknown/ambiguous command) or
|
|
2006
|
+
# raise without ever running a command; the gate must still be
|
|
2007
|
+
# reopened or the input/output loops park forever.
|
|
2008
|
+
self.commands.cmd_running_event.set()
|
|
2003
2009
|
|
|
2004
2010
|
await self.check_for_file_mentions(inp)
|
|
2005
2011
|
inp = await self.check_for_urls(inp)
|
|
@@ -5228,6 +5234,7 @@ class Coder(metaclass=UsageMeta):
|
|
|
5228
5234
|
session_manager.save_session,
|
|
5229
5235
|
getattr(self.args, "auto_save_session_name", "auto-save"),
|
|
5230
5236
|
False,
|
|
5237
|
+
True,
|
|
5231
5238
|
)
|
|
5232
5239
|
except Exception:
|
|
5233
5240
|
# Don't show errors for auto-save to avoid interrupting the user experience
|
|
@@ -11,7 +11,7 @@ class ListSessionsCommand(BaseCommand):
|
|
|
11
11
|
@classmethod
|
|
12
12
|
async def execute(cls, io, coder, args, **kwargs):
|
|
13
13
|
"""Execute the list-sessions command with given parameters."""
|
|
14
|
-
from cecli import sessions
|
|
14
|
+
from cecli.helpers import sessions
|
|
15
15
|
|
|
16
16
|
session_manager = sessions.SessionManager(coder, io)
|
|
17
17
|
sessions_list = session_manager.list_sessions()
|
|
@@ -15,7 +15,7 @@ class LoadSessionCommand(BaseCommand):
|
|
|
15
15
|
io.tool_output("Usage: /load-session <session-name>")
|
|
16
16
|
return format_command_result(io, "load-session", "No session name provided")
|
|
17
17
|
|
|
18
|
-
from cecli import sessions
|
|
18
|
+
from cecli.helpers import sessions
|
|
19
19
|
|
|
20
20
|
session_manager = sessions.SessionManager(coder, io)
|
|
21
21
|
await session_manager.load_session(args.strip())
|
|
@@ -26,7 +26,7 @@ class LoadSessionCommand(BaseCommand):
|
|
|
26
26
|
def get_completions(cls, io, coder, args) -> List[str]:
|
|
27
27
|
"""Get completion options for load-session command."""
|
|
28
28
|
# Return available session names for completion
|
|
29
|
-
from cecli import sessions
|
|
29
|
+
from cecli.helpers import sessions
|
|
30
30
|
|
|
31
31
|
session_manager = sessions.SessionManager(coder, io)
|
|
32
32
|
sessions_list = session_manager.list_sessions()
|
|
@@ -41,7 +41,10 @@ class LoadSessionCommand(BaseCommand):
|
|
|
41
41
|
help_text += "\nExamples:\n"
|
|
42
42
|
help_text += " /load-session my-feature # Load session 'my-feature'\n"
|
|
43
43
|
help_text += " /load-session bug-fix # Load session 'bug-fix'\n"
|
|
44
|
-
help_text +=
|
|
44
|
+
help_text += (
|
|
45
|
+
"\nSessions are loaded from the .cecli/sessions/ directory. Loading a session"
|
|
46
|
+
" also restores any sub-agents saved with it.\n"
|
|
47
|
+
)
|
|
45
48
|
help_text += (
|
|
46
49
|
"Use /list-sessions to see saved sessions and /save-session to save a session.\n"
|
|
47
50
|
)
|
|
@@ -15,7 +15,7 @@ class SaveSessionCommand(BaseCommand):
|
|
|
15
15
|
io.tool_error("Please provide a session name to save.")
|
|
16
16
|
return format_command_result(io, "save-session", "No session name provided")
|
|
17
17
|
|
|
18
|
-
from cecli import sessions
|
|
18
|
+
from cecli.helpers import sessions
|
|
19
19
|
|
|
20
20
|
session_manager = sessions.SessionManager(coder, io)
|
|
21
21
|
session_manager.save_session(args.strip())
|
|
@@ -26,7 +26,7 @@ class SaveSessionCommand(BaseCommand):
|
|
|
26
26
|
def get_completions(cls, io, coder, args) -> List[str]:
|
|
27
27
|
"""Get completion options for save-session command."""
|
|
28
28
|
# Return existing session names for completion to prevent accidental overwrites
|
|
29
|
-
from cecli import sessions
|
|
29
|
+
from cecli.helpers import sessions
|
|
30
30
|
|
|
31
31
|
session_manager = sessions.SessionManager(coder, io)
|
|
32
32
|
sessions_list = session_manager.list_sessions()
|
|
@@ -42,6 +42,10 @@ class SaveSessionCommand(BaseCommand):
|
|
|
42
42
|
help_text += " /save-session my-feature # Save session as 'my-feature'\n"
|
|
43
43
|
help_text += " /save-session bug-fix # Save session as 'bug-fix'\n"
|
|
44
44
|
help_text += "\nSessions are saved in the .cecli/sessions/ directory as JSON files.\n"
|
|
45
|
+
help_text += (
|
|
46
|
+
"When the session has sub-agents it is saved as a folder holding the primary"
|
|
47
|
+
" and each sub-agent payload.\n"
|
|
48
|
+
)
|
|
45
49
|
help_text += "Use /list-sessions to see saved sessions and /load-session to load them.\n"
|
|
46
50
|
help_text += (
|
|
47
51
|
"\nNote: Existing session names will be shown for tab completion to help prevent"
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import json
|
|
2
|
+
from typing import Any, Dict, List, Optional
|
|
2
3
|
|
|
3
4
|
from cecli.commands.utils.base_command import BaseCommand
|
|
4
5
|
from cecli.commands.utils.helpers import format_command_result
|
|
@@ -9,6 +10,140 @@ class TokensCommand(BaseCommand):
|
|
|
9
10
|
NORM_NAME = "tokens"
|
|
10
11
|
DESCRIPTION = "Report on the number of tokens used by the current chat context"
|
|
11
12
|
|
|
13
|
+
@classmethod
|
|
14
|
+
def _extract_file_name(cls, msg: Dict[str, Any]) -> Optional[str]:
|
|
15
|
+
"""Extract file name from a message dictionary."""
|
|
16
|
+
if not isinstance(msg, dict):
|
|
17
|
+
return None
|
|
18
|
+
|
|
19
|
+
# Check explicit image_file metadata first
|
|
20
|
+
fname = msg.get("image_file")
|
|
21
|
+
if fname:
|
|
22
|
+
return fname
|
|
23
|
+
|
|
24
|
+
content = msg.get("content")
|
|
25
|
+
if isinstance(content, str):
|
|
26
|
+
if content.startswith(("Original File Contents For", "Current File Contents For")):
|
|
27
|
+
lines = content.split("\n", 3)
|
|
28
|
+
if len(lines) > 1:
|
|
29
|
+
return lines[1].strip()
|
|
30
|
+
elif content.startswith("Image file: "):
|
|
31
|
+
return content[len("Image file: ") :].strip()
|
|
32
|
+
elif isinstance(content, list):
|
|
33
|
+
for part in content:
|
|
34
|
+
if isinstance(part, dict):
|
|
35
|
+
if part.get("image_file"):
|
|
36
|
+
return part.get("image_file")
|
|
37
|
+
text = part.get("text")
|
|
38
|
+
if isinstance(text, str):
|
|
39
|
+
if text.startswith(
|
|
40
|
+
("Original File Contents For", "Current File Contents For")
|
|
41
|
+
):
|
|
42
|
+
lines = text.split("\n", 3)
|
|
43
|
+
if len(lines) > 1:
|
|
44
|
+
return lines[1].strip()
|
|
45
|
+
elif text.startswith("Image file: "):
|
|
46
|
+
return text[len("Image file: ") :].strip()
|
|
47
|
+
elif isinstance(part, str):
|
|
48
|
+
if part.startswith(("Original File Contents For", "Current File Contents For")):
|
|
49
|
+
lines = part.split("\n", 3)
|
|
50
|
+
if len(lines) > 1:
|
|
51
|
+
return lines[1].strip()
|
|
52
|
+
elif part.startswith("Image file: "):
|
|
53
|
+
return part[len("Image file: ") :].strip()
|
|
54
|
+
|
|
55
|
+
return None
|
|
56
|
+
|
|
57
|
+
@staticmethod
|
|
58
|
+
def binary_token_count(data_url: str, bytes_per_pixel: float = 1.0) -> int:
|
|
59
|
+
"""Estimate OpenAI vision tokens for a base64 media data URL.
|
|
60
|
+
|
|
61
|
+
Assumes a 4:3 aspect ratio and 1 byte per pixel, which is a reasonable middle
|
|
62
|
+
ground for binary media when the true dimensions are unknown. The tile cost is
|
|
63
|
+
inflated by 1.33 and floored to keep the estimate on the pessimistic side.
|
|
64
|
+
"""
|
|
65
|
+
import math
|
|
66
|
+
|
|
67
|
+
b64_data = data_url.split(",", 1)[1] if "," in data_url else data_url
|
|
68
|
+
padding = b64_data.count("=")
|
|
69
|
+
rough_bytes = max(0, (len(b64_data) * 3 // 4) - padding)
|
|
70
|
+
total_pixels = rough_bytes / bytes_per_pixel
|
|
71
|
+
height = math.sqrt((3 / 4) * total_pixels)
|
|
72
|
+
width = (4 / 3) * height
|
|
73
|
+
|
|
74
|
+
if max(width, height) > 2048:
|
|
75
|
+
scale = 2048 / max(width, height)
|
|
76
|
+
width *= scale
|
|
77
|
+
height *= scale
|
|
78
|
+
|
|
79
|
+
if min(width, height) > 768:
|
|
80
|
+
scale = 768 / min(width, height)
|
|
81
|
+
width *= scale
|
|
82
|
+
height *= scale
|
|
83
|
+
|
|
84
|
+
tiles = math.ceil(width / 512) * math.ceil(height / 512)
|
|
85
|
+
|
|
86
|
+
return math.floor((85 + (170 * tiles)) * 1.33)
|
|
87
|
+
|
|
88
|
+
@classmethod
|
|
89
|
+
def _extract_key_paths(cls, obj: Any, prefix: str = "") -> List[str]:
|
|
90
|
+
"""Return the dot-separated paths of every leaf in a nested structure.
|
|
91
|
+
|
|
92
|
+
List indices are included as numeric segments, e.g. "0.image_url.url".
|
|
93
|
+
"""
|
|
94
|
+
if isinstance(obj, dict):
|
|
95
|
+
items = obj.items()
|
|
96
|
+
elif isinstance(obj, list):
|
|
97
|
+
items = enumerate(obj)
|
|
98
|
+
else:
|
|
99
|
+
return [prefix] if prefix else []
|
|
100
|
+
|
|
101
|
+
paths = []
|
|
102
|
+
for key, value in items:
|
|
103
|
+
path = f"{prefix}.{key}" if prefix else str(key)
|
|
104
|
+
paths.extend(cls._extract_key_paths(value, path))
|
|
105
|
+
|
|
106
|
+
return paths
|
|
107
|
+
|
|
108
|
+
@classmethod
|
|
109
|
+
def _get_path_value(cls, obj: Any, path: str) -> Any:
|
|
110
|
+
"""Resolve a dot-separated path produced by _extract_key_paths."""
|
|
111
|
+
for part in path.split("."):
|
|
112
|
+
obj = obj[int(part)] if isinstance(obj, list) else obj[part]
|
|
113
|
+
|
|
114
|
+
return obj
|
|
115
|
+
|
|
116
|
+
@classmethod
|
|
117
|
+
def _count_value_tokens(cls, coder, key: str, value: Any) -> int:
|
|
118
|
+
"""Count tokens for an extracted value, estimating data URLs as binary media."""
|
|
119
|
+
if key == "url" and isinstance(value, str) and value.startswith("data:"):
|
|
120
|
+
return cls.binary_token_count(value)
|
|
121
|
+
|
|
122
|
+
return coder.main_model.token_count(value)
|
|
123
|
+
|
|
124
|
+
@classmethod
|
|
125
|
+
def _count_message_tokens(cls, coder, msg: Dict[str, Any]) -> int:
|
|
126
|
+
"""Count tokens for a message, estimating binary data URLs instead of raw base64."""
|
|
127
|
+
content = msg.get("content") if isinstance(msg, dict) else None
|
|
128
|
+
|
|
129
|
+
if not isinstance(content, (list, dict)):
|
|
130
|
+
return coder.main_model.token_count([msg])
|
|
131
|
+
|
|
132
|
+
total = 0
|
|
133
|
+
|
|
134
|
+
for path in cls._extract_key_paths(content):
|
|
135
|
+
key = path.rsplit(".", 1)[-1]
|
|
136
|
+
|
|
137
|
+
if not key.isdigit() and key not in ("text", "content", "url"):
|
|
138
|
+
continue
|
|
139
|
+
|
|
140
|
+
value = cls._get_path_value(content, path)
|
|
141
|
+
|
|
142
|
+
if isinstance(value, str):
|
|
143
|
+
total += cls._count_value_tokens(coder, key, value)
|
|
144
|
+
|
|
145
|
+
return total
|
|
146
|
+
|
|
12
147
|
@classmethod
|
|
13
148
|
async def execute(cls, io, coder, args, **kwargs):
|
|
14
149
|
res = []
|
|
@@ -55,6 +190,13 @@ class TokensCommand(BaseCommand):
|
|
|
55
190
|
|
|
56
191
|
res.append((system_tokens, "system messages", ""))
|
|
57
192
|
|
|
193
|
+
# tool definitions
|
|
194
|
+
tool_list = coder.get_tool_list()
|
|
195
|
+
|
|
196
|
+
if tool_list:
|
|
197
|
+
tokens_tools = coder.main_model.token_count(json.dumps(tool_list))
|
|
198
|
+
res.append((tokens_tools, "tool schemas", ""))
|
|
199
|
+
|
|
58
200
|
# chat history
|
|
59
201
|
msgs_done = ConversationService.get_manager(coder).get_messages_dict(tag=MessageTag.DONE)
|
|
60
202
|
msgs_cur = ConversationService.get_manager(coder).get_messages_dict(tag=MessageTag.CUR)
|
|
@@ -123,27 +265,10 @@ class TokensCommand(BaseCommand):
|
|
|
123
265
|
# Group messages by file (each file has user and assistant messages)
|
|
124
266
|
file_tokens = {}
|
|
125
267
|
for msg in readonly_msgs:
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
lines = content.split("\n", 3)
|
|
131
|
-
if lines:
|
|
132
|
-
file_line = lines[1]
|
|
133
|
-
fname = file_line.strip()
|
|
134
|
-
# Calculate tokens for this message
|
|
135
|
-
tokens = coder.main_model.token_count([msg])
|
|
136
|
-
if fname not in file_tokens:
|
|
137
|
-
file_tokens[fname] = 0
|
|
138
|
-
file_tokens[fname] += tokens
|
|
139
|
-
elif "image_file" in msg:
|
|
140
|
-
# Handle image files
|
|
141
|
-
fname = msg.get("image_file")
|
|
142
|
-
if fname:
|
|
143
|
-
tokens = coder.main_model.token_count([msg])
|
|
144
|
-
if fname not in file_tokens:
|
|
145
|
-
file_tokens[fname] = 0
|
|
146
|
-
file_tokens[fname] += tokens
|
|
268
|
+
fname = cls._extract_file_name(msg)
|
|
269
|
+
if fname:
|
|
270
|
+
tokens = cls._count_message_tokens(coder, msg)
|
|
271
|
+
file_tokens[fname] = file_tokens.get(fname, 0) + tokens
|
|
147
272
|
|
|
148
273
|
# Add to results
|
|
149
274
|
for fname, tokens in file_tokens.items():
|
|
@@ -158,27 +283,10 @@ class TokensCommand(BaseCommand):
|
|
|
158
283
|
msgs = ConversationService.get_manager(coder).get_messages_dict(tag=tag)
|
|
159
284
|
if msgs:
|
|
160
285
|
for msg in msgs:
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
lines = content.split("\n", 3)
|
|
166
|
-
if lines:
|
|
167
|
-
file_line = lines[1]
|
|
168
|
-
fname = file_line.strip()
|
|
169
|
-
# Calculate tokens for this message
|
|
170
|
-
tokens = coder.main_model.token_count([msg])
|
|
171
|
-
if fname not in editable_file_tokens:
|
|
172
|
-
editable_file_tokens[fname] = 0
|
|
173
|
-
editable_file_tokens[fname] += tokens
|
|
174
|
-
elif "image_file" in msg:
|
|
175
|
-
# Handle image files
|
|
176
|
-
fname = msg.get("image_file")
|
|
177
|
-
if fname:
|
|
178
|
-
tokens = coder.main_model.token_count([msg])
|
|
179
|
-
if fname not in editable_file_tokens:
|
|
180
|
-
editable_file_tokens[fname] = 0
|
|
181
|
-
editable_file_tokens[fname] += tokens
|
|
286
|
+
fname = cls._extract_file_name(msg)
|
|
287
|
+
if fname:
|
|
288
|
+
tokens = cls._count_message_tokens(coder, msg)
|
|
289
|
+
editable_file_tokens[fname] = editable_file_tokens.get(fname, 0) + tokens
|
|
182
290
|
|
|
183
291
|
# Add editable files to results
|
|
184
292
|
for fname, tokens in editable_file_tokens.items():
|
|
@@ -106,6 +106,110 @@ class CircularBuffer:
|
|
|
106
106
|
return len(self.buffer)
|
|
107
107
|
|
|
108
108
|
|
|
109
|
+
class PagedOutputBuffer:
|
|
110
|
+
"""
|
|
111
|
+
Thread-safe output window that spills full pages to disk.
|
|
112
|
+
|
|
113
|
+
Output accumulates in memory until it reaches ``page_size`` characters.
|
|
114
|
+
Full pages are written to ``pages_dir`` as ``{n}.txt`` and dropped from
|
|
115
|
+
memory, so the in-memory window never grows beyond ``page_size``. Unlike
|
|
116
|
+
``CircularBuffer``, ``total_added`` is a monotonic stream offset that is
|
|
117
|
+
never reset, so incremental readers can resume after content has been
|
|
118
|
+
flushed; anything older than the in-memory window lives on disk.
|
|
119
|
+
"""
|
|
120
|
+
|
|
121
|
+
def __init__(self, page_size: int = 4096, pages_dir: Optional[str] = None):
|
|
122
|
+
self.page_size = max(1, int(page_size))
|
|
123
|
+
self.pages_dir = pages_dir
|
|
124
|
+
self.buffer = deque()
|
|
125
|
+
self.lock = threading.Lock()
|
|
126
|
+
self.total_added = 0
|
|
127
|
+
self.window_start = 0
|
|
128
|
+
self.page_count = 0
|
|
129
|
+
|
|
130
|
+
def append(self, text: str) -> None:
|
|
131
|
+
"""Append text, spilling full pages to disk once the window fills."""
|
|
132
|
+
if not text:
|
|
133
|
+
return
|
|
134
|
+
|
|
135
|
+
with self.lock:
|
|
136
|
+
self.buffer.extend(text)
|
|
137
|
+
self.total_added += len(text)
|
|
138
|
+
|
|
139
|
+
if self.total_added - self.window_start >= self.page_size:
|
|
140
|
+
self._spill_locked()
|
|
141
|
+
|
|
142
|
+
def get_all(self, clear: bool = False) -> str:
|
|
143
|
+
"""Return the in-memory window (content not yet flushed to disk)."""
|
|
144
|
+
with self.lock:
|
|
145
|
+
result = "".join(self.buffer)
|
|
146
|
+
|
|
147
|
+
if clear:
|
|
148
|
+
self.buffer.clear()
|
|
149
|
+
self.window_start = self.total_added
|
|
150
|
+
|
|
151
|
+
return result
|
|
152
|
+
|
|
153
|
+
def get_new_output(self, last_read_position: int) -> Tuple[str, int]:
|
|
154
|
+
"""Return window content past ``last_read_position`` and the new offset.
|
|
155
|
+
|
|
156
|
+
Content older than the window has already been paged to disk, so the
|
|
157
|
+
read position is clamped forward to the window start rather than
|
|
158
|
+
replaying bytes that are only available as pages.
|
|
159
|
+
"""
|
|
160
|
+
with self.lock:
|
|
161
|
+
if last_read_position >= self.total_added:
|
|
162
|
+
return "", self.total_added
|
|
163
|
+
|
|
164
|
+
start = max(last_read_position, self.window_start)
|
|
165
|
+
new_output = "".join(self.buffer)[start - self.window_start :]
|
|
166
|
+
|
|
167
|
+
return new_output, self.total_added
|
|
168
|
+
|
|
169
|
+
def clear(self) -> None:
|
|
170
|
+
"""Drop the in-memory window; flushed pages are unaffected."""
|
|
171
|
+
with self.lock:
|
|
172
|
+
self.buffer.clear()
|
|
173
|
+
self.window_start = self.total_added
|
|
174
|
+
|
|
175
|
+
def size(self) -> int:
|
|
176
|
+
"""Get current buffer size in characters."""
|
|
177
|
+
with self.lock:
|
|
178
|
+
return len(self.buffer)
|
|
179
|
+
|
|
180
|
+
def _spill_locked(self) -> None:
|
|
181
|
+
content = "".join(self.buffer)
|
|
182
|
+
|
|
183
|
+
if not self.pages_dir:
|
|
184
|
+
# Without a page directory, retain only the newest page in memory.
|
|
185
|
+
if len(content) > self.page_size:
|
|
186
|
+
dropped = len(content) - self.page_size
|
|
187
|
+
content = content[dropped:]
|
|
188
|
+
self.window_start += dropped
|
|
189
|
+
self.buffer = deque(content)
|
|
190
|
+
|
|
191
|
+
return
|
|
192
|
+
|
|
193
|
+
while len(content) >= self.page_size:
|
|
194
|
+
page = content[: self.page_size]
|
|
195
|
+
content = content[self.page_size :]
|
|
196
|
+
self.page_count += 1
|
|
197
|
+
self._write_page_locked(self.page_count, page)
|
|
198
|
+
self.window_start += self.page_size
|
|
199
|
+
|
|
200
|
+
self.buffer = deque(content)
|
|
201
|
+
|
|
202
|
+
def _write_page_locked(self, page_number: int, content: str) -> None:
|
|
203
|
+
os.makedirs(self.pages_dir, exist_ok=True)
|
|
204
|
+
abs_path = os.path.join(self.pages_dir, f"{page_number}.txt")
|
|
205
|
+
tmp_path = f"{abs_path}.tmp"
|
|
206
|
+
|
|
207
|
+
with safe_open(tmp_path, "w") as page_file:
|
|
208
|
+
page_file.write(content)
|
|
209
|
+
|
|
210
|
+
os.replace(tmp_path, abs_path)
|
|
211
|
+
|
|
212
|
+
|
|
109
213
|
class InputBuffer:
|
|
110
214
|
"""
|
|
111
215
|
Thread-safe buffer for queuing input to be sent to a process.
|
|
@@ -442,6 +546,9 @@ class BackgroundCommandManager:
|
|
|
442
546
|
existing_input_buffer: Optional[InputBuffer] = None,
|
|
443
547
|
use_pty: bool = False,
|
|
444
548
|
master_fd: Optional[int] = None,
|
|
549
|
+
command_key: Optional[str] = None,
|
|
550
|
+
page_size: Optional[int] = None,
|
|
551
|
+
pages_dir: Optional[str] = None,
|
|
445
552
|
) -> str:
|
|
446
553
|
"""
|
|
447
554
|
Start a command in background.
|
|
@@ -452,15 +559,23 @@ class BackgroundCommandManager:
|
|
|
452
559
|
cwd: Working directory for command
|
|
453
560
|
max_buffer_size: Maximum buffer size for output
|
|
454
561
|
existing_process: Optional existing subprocess.Popen to register
|
|
455
|
-
existing_buffer: Optional existing
|
|
562
|
+
existing_buffer: Optional existing buffer to use (CircularBuffer or PagedOutputBuffer)
|
|
456
563
|
persist: If True, output buffer won't be cleared when read
|
|
564
|
+
command_key: Optional pre-generated command key; generated when omitted
|
|
565
|
+
page_size: Characters per page when paging output to disk
|
|
566
|
+
pages_dir: Directory where full output pages are written
|
|
457
567
|
|
|
458
568
|
Returns:
|
|
459
569
|
Command key for future reference
|
|
460
570
|
"""
|
|
461
571
|
try:
|
|
462
|
-
# Use existing buffer or create
|
|
463
|
-
|
|
572
|
+
# Use existing buffer or create a paged/circular one
|
|
573
|
+
if existing_buffer is not None:
|
|
574
|
+
buffer = existing_buffer
|
|
575
|
+
elif page_size and pages_dir:
|
|
576
|
+
buffer = PagedOutputBuffer(page_size=page_size, pages_dir=pages_dir)
|
|
577
|
+
else:
|
|
578
|
+
buffer = CircularBuffer(max_size=max_buffer_size)
|
|
464
579
|
|
|
465
580
|
# Use existing process or start new one
|
|
466
581
|
# Use provided master_fd (e.g., from _execute_with_timeout) or default to None
|
|
@@ -523,7 +638,7 @@ class BackgroundCommandManager:
|
|
|
523
638
|
)
|
|
524
639
|
|
|
525
640
|
# Generate unique key and store
|
|
526
|
-
command_key = cls._generate_command_key(command)
|
|
641
|
+
command_key = command_key or cls._generate_command_key(command)
|
|
527
642
|
|
|
528
643
|
with cls._lock:
|
|
529
644
|
cls._background_commands[command_key] = bg_process
|
|
@@ -691,6 +806,10 @@ class BackgroundCommandManager:
|
|
|
691
806
|
"command": bg_process.command,
|
|
692
807
|
"running": bg_process.is_alive(),
|
|
693
808
|
"buffer_size": bg_process.buffer.size(),
|
|
809
|
+
"pages": getattr(bg_process.buffer, "page_count", 0),
|
|
810
|
+
"total_chars": getattr(
|
|
811
|
+
bg_process.buffer, "total_added", bg_process.buffer.size()
|
|
812
|
+
),
|
|
694
813
|
"start_time": bg_process.start_time,
|
|
695
814
|
"end_time": bg_process.end_time,
|
|
696
815
|
"duration": (
|