cecli-dev 0.100.1__tar.gz → 0.100.2__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-0.100.1 → cecli_dev-0.100.2}/PKG-INFO +2 -1
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/__init__.py +1 -1
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/_version.py +3 -3
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/args.py +28 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/agent_coder.py +79 -26
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/base_coder.py +30 -8
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/__init__.py +0 -3
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/add.py +14 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/exclude_skill.py +1 -1
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/include_skill.py +1 -1
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/load_skill.py +2 -1
- cecli_dev-0.100.2/cecli/commands/reap_agent.py +160 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/remove_skill.py +1 -1
- cecli_dev-0.100.2/cecli/commands/spawn_agent.py +61 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/agents/config.py +7 -1
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/agents/service.py +360 -44
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/conversation/integration.py +30 -0
- cecli_dev-0.100.2/cecli/helpers/crypto.py +125 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/observations/service.py +19 -10
- cecli_dev-0.100.2/cecli/helpers/responses.py +596 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/skills.py +16 -4
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/history.py +4 -2
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/io.py +1 -1
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/main.py +1 -1
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/models.py +20 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/agent.yml +1 -1
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/base.yml +8 -5
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/subagent.yml +4 -3
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/repomap.py +12 -4
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/resources/model-metadata.json +1519 -282
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/sessions.py +102 -19
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/__init__.py +2 -2
- cecli_dev-0.100.2/cecli/tools/_yield.py +164 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/delegate.py +21 -23
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/edit_text.py +1 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/explore_code.py +1 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/grep.py +1 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/load_skill.py +1 -1
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/read_range.py +1 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/remove_skill.py +1 -1
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/update_todo_list.py +1 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/utils/base_tool.py +8 -1
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/utils/helpers.py +45 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/utils/registry.py +1 -1
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tui/app.py +72 -16
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tui/io.py +18 -10
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tui/widgets/footer.py +8 -3
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tui/widgets/status_bar.py +15 -3
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tui/worker.py +3 -9
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/utils.py +2 -3
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/agent-mode.md +3 -3
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/subagents.md +32 -11
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/usage/sessions.md +11 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli_dev.egg-info/PKG-INFO +2 -1
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli_dev.egg-info/SOURCES.txt +8 -2
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli_dev.egg-info/requires.txt +1 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/requirements/common-constraints.txt +3 -1
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/requirements/requirements.in +1 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/requirements.txt +1 -0
- cecli_dev-0.100.2/tests/basic/conftest.py +24 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_commands.py +17 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_repomap.py +14 -0
- cecli_dev-0.100.2/tests/basic/test_session_args.py +31 -0
- cecli_dev-0.100.2/tests/basic/test_session_crypto.py +105 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_sessions.py +27 -0
- cecli_dev-0.100.2/tests/basic/test_sessions_manager.py +219 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/helpers/observations/test_observation_service.py +2 -6
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/subagents/test_commands.py +2 -109
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/subagents/test_delegate.py +38 -20
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/subagents/test_finished.py +10 -11
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/subagents/test_service.py +39 -28
- cecli_dev-0.100.2/tests/tools/test_extractions.py +406 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/tools/test_registry.py +8 -8
- cecli_dev-0.100.2/tests/tools/test_tool_arguments.py +298 -0
- cecli_dev-0.100.2/tests/tui/test_app.py +241 -0
- cecli_dev-0.100.1/cecli/commands/invoke_agent.py +0 -54
- cecli_dev-0.100.1/cecli/commands/reap_agent.py +0 -67
- cecli_dev-0.100.1/cecli/commands/spawn_agent.py +0 -42
- cecli_dev-0.100.1/cecli/helpers/responses.py +0 -245
- cecli_dev-0.100.1/cecli/tools/finished.py +0 -86
- cecli_dev-0.100.1/tests/tui/test_app.py +0 -37
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/.dockerignore +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/.flake8 +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/.gitattributes +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/.github/workflows/check_pypi_version.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/.github/workflows/docker-build-test.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/.github/workflows/docker-release.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/.github/workflows/issues.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/.github/workflows/pages.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/.github/workflows/pre-commit.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/.github/workflows/release.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/.github/workflows/ubuntu-tests.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/.github/workflows/windows-tests.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/.github/workflows/windows_check_pypi_version.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/.gitignore +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/.pre-commit-config.yaml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/CHANGELOG.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/CNAME +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/CONTRIBUTING.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/HISTORY.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/LICENSE.txt +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/MANIFEST.in +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/README.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/Dockerfile +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/README.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/benchmark.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/benchmark_classic.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/clone-exercism.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/cpp-test.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/docker.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/docker_build.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/install-docker-ubuntu.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/npm-test.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/over_time.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/plot.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/plots.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/problem_stats.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/prompts.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/refactor_tools.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/rsync.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/rungrid.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/swe-bench-lite.txt +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/swe-bench.txt +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/swe_bench.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/test_benchmark.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/variations.1.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/variations.2.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/variations.3.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/benchmark/variations.4.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/__main__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/args_formatter.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/change_tracker.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/architect_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/ask_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/chat_chunks.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/context_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/copypaste_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/editblock_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/editblock_fenced_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/editblock_func_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/editor_diff_fenced_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/editor_editblock_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/editor_whole_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/hashline_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/help_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/patch_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/search_replace.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/shell.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/single_wholefile_func_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/sub_agent_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/udiff_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/udiff_simple.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/wholefile_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/coders/wholefile_func_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/agent.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/agent_model.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/architect.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/ask.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/chat_mode.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/clear.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/code.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/command_prefix.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/commit.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/compact.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/context.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/context_blocks.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/context_management.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/copy.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/copy_context.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/core.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/diff.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/drop.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/editor.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/editor_model.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/exit.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/git.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/hashline.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/help.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/history_search.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/hooks.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/lint.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/list_sessions.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/list_skills.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/load.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/load_hook.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/load_mcp.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/load_session.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/ls.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/map.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/map_refresh.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/merge.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/model.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/models.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/multiline_mode.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/paste.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/quit.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/read_only.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/read_only_stub.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/reasoning_effort.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/remove_hook.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/remove_mcp.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/report.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/reset.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/rules.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/run.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/save.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/save_session.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/settings.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/switch_agent.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/terminal_data/linux.keytab +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/terminal_setup.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/test.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/think_tokens.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/tokens.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/undo.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/utils/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/utils/base_command.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/utils/helpers.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/utils/registry.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/utils/save_load_manager.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/voice.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/weak_model.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/web.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/commands/workspace.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/deprecated_args.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/diffs.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/dump.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/editor.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/exceptions.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/format_settings.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/help.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/help_pats.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/agents/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/background_commands.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/command_parser.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/conversation/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/conversation/base_message.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/conversation/files.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/conversation/manager.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/conversation/service.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/conversation/tags.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/conversation/utils.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/copypaste.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/coroutines.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/file_searcher.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/grep_ast/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/grep_ast/dump.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/grep_ast/grep_ast.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/grep_ast/main.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/grep_ast/parsers.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/grep_ast/tsl.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/hashline.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/hashpos/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/hashpos/hashpos.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/io_proxy.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/leak_detect.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/model_providers.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/monorepo/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/monorepo/config.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/monorepo/project.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/monorepo/workspace.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/monorepo/worktree.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/nested.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/observations/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/plugin_manager.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/profiler.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/requests.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/helpers/similarity.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/hooks/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/hooks/base.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/hooks/integration.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/hooks/manager.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/hooks/registry.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/hooks/service.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/hooks/types.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/interruptible_input.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/linter.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/llm.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/mcp/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/mcp/manager.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/mcp/oauth.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/mcp/server.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/mcp/utils.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/mdstream.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/onboarding.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/architect.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/ask.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/context.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/copypaste.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/editblock.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/editblock_fenced.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/editblock_func.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/editor_diff_fenced.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/editor_editblock.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/editor_whole.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/hashline.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/help.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/patch.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/single_wholefile_func.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/udiff.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/udiff_simple.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/utils/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/utils/registry.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/utils/system.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/wholefile.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/prompts/wholefile_func.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/README.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/reasoning_tags.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/repo.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/report.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/resources/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/resources/model-settings.yml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/resources/providers.json +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/run_cmd.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/scrape.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/sendchat.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/special.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/command.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/command_interactive.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/context_manager.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/git_branch.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/git_diff.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/git_log.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/git_remote.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/git_show.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/git_status.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/ls.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/thinking.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/undo_change.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tools/utils/output.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tui/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tui/styles.tcss +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tui/widgets/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tui/widgets/completion_bar.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tui/widgets/file_list.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tui/widgets/input_area.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tui/widgets/input_container.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tui/widgets/key_hints.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tui/widgets/output.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/tui/widgets/subagent_pills.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/urls.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/versioncheck.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/voice.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/waiting.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/watch.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/watch_prompts.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/Gemfile +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_includes/blame.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_includes/get-started.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_includes/help-tip.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_includes/help.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_includes/install.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_includes/keys.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_includes/model-warnings.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_includes/multi-line.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_includes/python-m-aider.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_includes/recording.css +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_includes/recording.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_includes/works-best.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_sass/_features.scss +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_sass/_footer.scss +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_sass/_hero.scss +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_sass/_info.scss +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_sass/_layout.scss +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_sass/_reset.scss +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_sass/_testimonials.scss +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_sass/_typography.scss +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_sass/_variables.scss +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_sass/custom/custom.scss +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/_sass/global-overrides.scss +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/adv-model-settings.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/aider_conf.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/api-keys.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/custom-commands.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/custom-system-prompts.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/dotenv.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/editor.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/hooks.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/mcp.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/model-aliases.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/options.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/reasoning.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/security.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/skills.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/tui.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config/workspaces.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/config.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/faq.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/git.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/index.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/install/docker.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/install/optional.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/install.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/languages.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/legal/contributor-agreement.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/legal/privacy.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms/anthropic.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms/azure.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms/bedrock.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms/cohere.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms/deepseek.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms/gemini.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms/github.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms/groq.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms/lm-studio.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms/ollama.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms/openai-compat.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms/openai.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms/openrouter.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms/other.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms/vertex.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms/warnings.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms/xai.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/llms.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/more/analytics.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/more/edit-formats.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/more/infinite-output.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/more-info.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/repomap.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/scripting.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/troubleshooting/imports.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/troubleshooting/support.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/troubleshooting/warnings.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/troubleshooting.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/usage/commands.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/usage/conventions.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/usage/copypaste.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/usage/images-urls.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/usage/lint-test.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/usage/modes.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/usage/not-code.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/usage/notifications.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/usage/tips.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/usage/voice.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/usage/watch.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/docs/usage.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli/website/share/index.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli_dev.egg-info/dependency_links.txt +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli_dev.egg-info/entry_points.txt +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/cecli_dev.egg-info/top_level.txt +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/docker/Dockerfile +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/pyproject.toml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/pytest.ini +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/requirements/requirements-dev.in +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/requirements/requirements-dev.txt +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/requirements/requirements-help.in +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/requirements/requirements-help.txt +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/requirements/requirements-playwright.in +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/requirements/requirements-playwright.txt +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/requirements/tree-sitter.in +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/30k-image.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/Dockerfile.jekyll +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/blame.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/clean_metadata.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/cost_analyzer.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/cost_calculator.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/dl_icons.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/filter-chat-mode.js +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/generate_providers.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/get_contributor_list.js +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/get_hashline.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/history_prompts.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/homepage.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/issues.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/jekyll_build.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/jekyll_run.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/logo_svg.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/pip-compile.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/recording_audio.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/redact-cast.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/rename_to_cecli.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/tmux_record.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/tsl_pack_langs.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/update-blame.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/update-docs.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/update-history.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/versionbump.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/scripts/yank-old-versions.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/setup.cfg +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/shim.pyproject.toml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_aws_credentials.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_background_commands.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_custom_commands.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_deprecated.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_editblock.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_editor.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_exceptions.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_find_or_blocks.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_hashline.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_history.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_io.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_linter.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_main.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_model_info_manager.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_model_provider_manager.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_models.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_onboarding.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_plugin_manager.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_prompts.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_reasoning.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_repo.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_run_cmd.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_sanity_check_repo.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_scripting.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_sendchat.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_skills.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_special.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_ssl_verification.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_udiff.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_urls.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_voice.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_watch.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/basic/test_wholefile.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/coders/test_coder_switching.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/coders/test_copypaste_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/commands/test_compaction.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/commands/test_switch_agent.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/conftest.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/conversations/test_conversation_integration.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/conversations/test_conversation_system.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/chat-history.md +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/arduino/test.ino +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/bash/test.sh +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/c/test.c +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/chatito/test.chatito +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/clojure/test.clj +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/cpp/test.cpp +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/csharp/test.cs +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/d/test.d +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/dart/test.dart +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/elisp/test.el +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/elixir/test.ex +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/elm/test.elm +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/gleam/test.gleam +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/go/test.go +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/haskell/test.hs +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/hcl/test.tf +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/java/test.java +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/javascript/test.js +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/kotlin/test.kt +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/lua/test.lua +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/matlab/test.m +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/ocaml/test.ml +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/php/test.php +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/pony/test.pony +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/properties/test.properties +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/python/test.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/ql/test.ql +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/r/test.r +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/racket/test.rkt +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/ruby/test.rb +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/rust/test.rs +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/scala/test.scala +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/solidity/test.sol +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/swift/test.swift +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/tsx/test.tsx +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/typescript/test.ts +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/udev/test.rules +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/languages/zig/test.zig +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/sample-code-base/sample.js +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/sample-code-base/sample.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/watch.js +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/watch.lisp +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/watch.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/fixtures/watch_question.js +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/help/test_help.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/helpers/monorepo/test_config.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/helpers/monorepo/test_config_active.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/helpers/monorepo/test_workspace.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/hooks/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/hooks/test_base.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/hooks/test_manager.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/hooks/test_registry.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/mcp/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/mcp/test_manager.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/scrape/test_playwright_disable.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/scrape/test_scrape.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/subagents/__init__.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/subagents/conftest.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/subagents/test_config.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/subagents/test_io_proxy.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/subagents/test_sub_agent_coder.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/tools/test_get_lines.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/tools/test_git_branch.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/tools/test_git_diff.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/tools/test_grep.py +0 -0
- {cecli_dev-0.100.1 → cecli_dev-0.100.2}/tests/tools/test_insert_block.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cecli-dev
|
|
3
|
-
Version: 0.100.
|
|
3
|
+
Version: 0.100.2
|
|
4
4
|
Summary: we also can't pronounce cecli
|
|
5
5
|
Project-URL: Homepage, https://github.com/dwash96/cecli
|
|
6
6
|
Project-URL: Documentation, https://github.com/dwash96/cecli
|
|
@@ -52,6 +52,7 @@ Requires-Dist: tomlkit>=0.14.0
|
|
|
52
52
|
Requires-Dist: truststore
|
|
53
53
|
Requires-Dist: xxhash>=3.6.0
|
|
54
54
|
Requires-Dist: py-cymbal>=0.1.24
|
|
55
|
+
Requires-Dist: cryptography>=42.0.0
|
|
55
56
|
Requires-Dist: rustworkx>=0.15.0
|
|
56
57
|
Requires-Dist: scipy>=1.15.3
|
|
57
58
|
Requires-Dist: importlib-metadata>=7.2.1
|
|
@@ -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 = '0.100.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 100,
|
|
21
|
+
__version__ = version = '0.100.2'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 100, 2)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gb0fcce1f4'
|
|
@@ -370,6 +370,24 @@ def get_parser(default_config_files, git_root):
|
|
|
370
370
|
" (default: False)"
|
|
371
371
|
),
|
|
372
372
|
)
|
|
373
|
+
group.add_argument(
|
|
374
|
+
"--session-encrypt",
|
|
375
|
+
action=argparse.BooleanOptionalAction,
|
|
376
|
+
default=False,
|
|
377
|
+
help=(
|
|
378
|
+
"Encrypt saved sessions on disk (AES-256-GCM). Requires CECLI_SESSION_KEY or"
|
|
379
|
+
" --session-key-file (default: False)"
|
|
380
|
+
),
|
|
381
|
+
)
|
|
382
|
+
group.add_argument(
|
|
383
|
+
"--session-key-file",
|
|
384
|
+
metavar="SESSION_KEY_FILE",
|
|
385
|
+
default=None,
|
|
386
|
+
help=(
|
|
387
|
+
"File containing a urlsafe-base64 32-byte session encryption key"
|
|
388
|
+
" (default: use CECLI_SESSION_KEY only)"
|
|
389
|
+
),
|
|
390
|
+
).complete = shtab.FILE
|
|
373
391
|
group.add_argument(
|
|
374
392
|
"--mcp-servers",
|
|
375
393
|
metavar="MCP_CONFIG_JSON",
|
|
@@ -536,6 +554,16 @@ def get_parser(default_config_files, git_root):
|
|
|
536
554
|
" False)"
|
|
537
555
|
),
|
|
538
556
|
)
|
|
557
|
+
group.add_argument(
|
|
558
|
+
"--exempt-paths",
|
|
559
|
+
action="append",
|
|
560
|
+
default=[],
|
|
561
|
+
help=(
|
|
562
|
+
"Specify a regex pattern for paths that should be exempted from file creation. "
|
|
563
|
+
"When /add matches a path matching any exempt pattern, it will not offer to "
|
|
564
|
+
"create the file. Can be used multiple times."
|
|
565
|
+
),
|
|
566
|
+
)
|
|
539
567
|
##########
|
|
540
568
|
group = parser.add_argument_group("Output settings")
|
|
541
569
|
group.add_argument(
|
|
@@ -12,7 +12,6 @@ from collections import defaultdict
|
|
|
12
12
|
from datetime import datetime
|
|
13
13
|
from pathlib import Path
|
|
14
14
|
|
|
15
|
-
from cecli import utils
|
|
16
15
|
from cecli.change_tracker import ChangeTracker
|
|
17
16
|
from cecli.helpers import nested, responses
|
|
18
17
|
from cecli.helpers.agents.service import AgentService
|
|
@@ -265,7 +264,8 @@ class AgentCoder(Coder):
|
|
|
265
264
|
|
|
266
265
|
async def initialize_mcp_tools(self):
|
|
267
266
|
if not self.mcp_manager:
|
|
268
|
-
|
|
267
|
+
verbose = getattr(self.args, "verbose", False) if self.args else False
|
|
268
|
+
self.mcp_manager = McpServerManager([], self.io, verbose)
|
|
269
269
|
|
|
270
270
|
server_name = "Local"
|
|
271
271
|
server = self.mcp_manager.get_server(server_name)
|
|
@@ -540,6 +540,10 @@ class AgentCoder(Coder):
|
|
|
540
540
|
|
|
541
541
|
# Add post-message context blocks (priority 250 - between CUR and REMINDER)
|
|
542
542
|
ConversationService.get_chunks(self).add_post_message_context_blocks()
|
|
543
|
+
|
|
544
|
+
# Add sub-agent states context block (same priority as post-message blocks)
|
|
545
|
+
ConversationService.get_chunks(self).add_sub_agent_states()
|
|
546
|
+
|
|
543
547
|
ConversationService.get_chunks(self).add_randomized_cta()
|
|
544
548
|
|
|
545
549
|
return ConversationService.get_manager(self).get_messages_dict()
|
|
@@ -727,25 +731,23 @@ class AgentCoder(Coder):
|
|
|
727
731
|
continue
|
|
728
732
|
|
|
729
733
|
if args_string:
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
)
|
|
748
|
-
continue
|
|
734
|
+
parsed = responses.parse_tool_arguments(args_string)
|
|
735
|
+
if isinstance(parsed, dict) and "@error" in parsed:
|
|
736
|
+
self.io.tool_warning(
|
|
737
|
+
f"Malformed JSON arguments in tool {tool_name}: {parsed['@error']}"
|
|
738
|
+
)
|
|
739
|
+
tool_responses.append(
|
|
740
|
+
{
|
|
741
|
+
"role": "tool",
|
|
742
|
+
"tool_call_id": tool_call.id,
|
|
743
|
+
"content": (
|
|
744
|
+
f"Malformed JSON arguments in tool {tool_name}: {parsed['@error']}"
|
|
745
|
+
),
|
|
746
|
+
}
|
|
747
|
+
)
|
|
748
|
+
continue
|
|
749
|
+
parsed_args_list = [parsed]
|
|
750
|
+
|
|
749
751
|
if not parsed_args_list and not args_string:
|
|
750
752
|
parsed_args_list.append({})
|
|
751
753
|
all_results_content = []
|
|
@@ -837,20 +839,22 @@ class AgentCoder(Coder):
|
|
|
837
839
|
|
|
838
840
|
async def _execute_mcp_tools(self, server, tool_calls):
|
|
839
841
|
"""Execute MCP tools via LiteLLM."""
|
|
840
|
-
|
|
842
|
+
tool_responses = []
|
|
841
843
|
for tool_call in tool_calls:
|
|
842
844
|
# Use existing _execute_mcp_tool logic
|
|
843
845
|
result = await self._execute_mcp_tool(
|
|
844
|
-
server,
|
|
846
|
+
server,
|
|
847
|
+
tool_call.function.name,
|
|
848
|
+
responses.parse_tool_arguments(tool_call.function.arguments),
|
|
845
849
|
)
|
|
846
|
-
|
|
850
|
+
tool_responses.append(
|
|
847
851
|
{
|
|
848
852
|
"role": "tool",
|
|
849
853
|
"tool_call_id": tool_call.id,
|
|
850
854
|
"content": result,
|
|
851
855
|
}
|
|
852
856
|
)
|
|
853
|
-
return
|
|
857
|
+
return tool_responses
|
|
854
858
|
|
|
855
859
|
def get_active_model(self):
|
|
856
860
|
if self.main_model.agent_model:
|
|
@@ -871,6 +875,13 @@ class AgentCoder(Coder):
|
|
|
871
875
|
content = self.partial_response_content
|
|
872
876
|
tool_calls_found = bool(self.partial_response_tool_calls)
|
|
873
877
|
|
|
878
|
+
# Reap all finished sub-agents with auto_reap enabled
|
|
879
|
+
try:
|
|
880
|
+
service = AgentService.get_instance(self)
|
|
881
|
+
await service.reap_all_finished_agents(parent=service.get_parent(self))
|
|
882
|
+
except Exception:
|
|
883
|
+
logger.warning("Failed to reap finished sub-agents", exc_info=True)
|
|
884
|
+
|
|
874
885
|
# 1. Handle Tool Execution Follow-up (Reflection)
|
|
875
886
|
if self.agent_finished:
|
|
876
887
|
self.tool_usage_history = []
|
|
@@ -878,6 +889,7 @@ class AgentCoder(Coder):
|
|
|
878
889
|
self.reflected_message = None
|
|
879
890
|
if self.files_edited_by_tools:
|
|
880
891
|
_ = await self.auto_commit(self.files_edited_by_tools)
|
|
892
|
+
|
|
881
893
|
return False
|
|
882
894
|
|
|
883
895
|
# 2. Check for unfinished and recently finished background commands
|
|
@@ -938,7 +950,7 @@ class AgentCoder(Coder):
|
|
|
938
950
|
if self.tool_call_vectors:
|
|
939
951
|
if content and not tool_calls_found and self.num_reflections < self.max_reflections:
|
|
940
952
|
self.reflected_message = (
|
|
941
|
-
"Continue with your task. If you have completed it, call the `
|
|
953
|
+
"Continue with your task. If you have completed it, call the `Yield` tool."
|
|
942
954
|
)
|
|
943
955
|
return True
|
|
944
956
|
|
|
@@ -1490,12 +1502,53 @@ Todo list does not exist. Please update it with the `UpdateTodoList` tool.</cont
|
|
|
1490
1502
|
result += "\n"
|
|
1491
1503
|
|
|
1492
1504
|
result += "Use the `Delegate` tool with the sub-agent name to delegate tasks.\n"
|
|
1505
|
+
result += "Use the `Yield` tool to wait for responses for all active sub agents.\n"
|
|
1493
1506
|
result += "</context>"
|
|
1494
1507
|
return result
|
|
1495
1508
|
except Exception as e:
|
|
1496
1509
|
self.io.tool_error(f"Error generating sub-agents context: {str(e)}")
|
|
1497
1510
|
return None
|
|
1498
1511
|
|
|
1512
|
+
def get_child_agent_states(self):
|
|
1513
|
+
"""Get the state of all active child sub-agents.
|
|
1514
|
+
|
|
1515
|
+
Returns a formatted context block with each child sub-agent's name,
|
|
1516
|
+
UUID, and current status, or None if no children exist.
|
|
1517
|
+
This is used by ConversationChunks.add_sub_agent_states() to provide
|
|
1518
|
+
the model with visibility into active sub-agent states.
|
|
1519
|
+
"""
|
|
1520
|
+
if not self.use_enhanced_context:
|
|
1521
|
+
return None
|
|
1522
|
+
|
|
1523
|
+
# Sub-agents should only see child states when nested delegation is enabled
|
|
1524
|
+
if hasattr(self, "parent_uuid") and self.parent_uuid:
|
|
1525
|
+
if not self.agent_config.get("allow_nested_delegation", False):
|
|
1526
|
+
return None
|
|
1527
|
+
|
|
1528
|
+
try:
|
|
1529
|
+
service = AgentService.get_instance(self)
|
|
1530
|
+
children = service.get_children(self)
|
|
1531
|
+
|
|
1532
|
+
if not children:
|
|
1533
|
+
return None
|
|
1534
|
+
|
|
1535
|
+
result = '<context name="sub_agent_states" from="agent">\n'
|
|
1536
|
+
result += "## Active Sub-Agent States\n\n"
|
|
1537
|
+
result += f"Found {len(children)} active child sub-agent(s):\n\n"
|
|
1538
|
+
|
|
1539
|
+
for info in children:
|
|
1540
|
+
result += f"**{info.name}**:\n"
|
|
1541
|
+
result += f" - UUID: `{info.coder.uuid}`\n"
|
|
1542
|
+
result += f" - Status: {info.status.value}\n"
|
|
1543
|
+
if info.error:
|
|
1544
|
+
result += f" - Error: {info.error}\n"
|
|
1545
|
+
result += "\n"
|
|
1546
|
+
result += "</context>"
|
|
1547
|
+
return result
|
|
1548
|
+
except Exception as e:
|
|
1549
|
+
self.io.tool_error(f"Error generating child agent states: {str(e)}")
|
|
1550
|
+
return None
|
|
1551
|
+
|
|
1499
1552
|
def get_background_command_output(self):
|
|
1500
1553
|
"""
|
|
1501
1554
|
Get background command output to append after the main message.
|
|
@@ -1597,7 +1597,7 @@ class Coder(metaclass=UsageMeta):
|
|
|
1597
1597
|
self.io.output_task = asyncio.create_task(self.generate(user_message, preproc))
|
|
1598
1598
|
|
|
1599
1599
|
# Start spinner for output task
|
|
1600
|
-
self.io.start_spinner("Processing...")
|
|
1600
|
+
self.io.start_spinner("Processing...", coder_uuid=getattr(self, "uuid", None))
|
|
1601
1601
|
await self.io.recreate_input()
|
|
1602
1602
|
|
|
1603
1603
|
# Monitor output task
|
|
@@ -1914,6 +1914,7 @@ class Coder(metaclass=UsageMeta):
|
|
|
1914
1914
|
messages,
|
|
1915
1915
|
compaction_prompt,
|
|
1916
1916
|
self.context_compaction_summary_tokens,
|
|
1917
|
+
coder=self,
|
|
1917
1918
|
)
|
|
1918
1919
|
if not text:
|
|
1919
1920
|
raise ValueError(f"Summarization of {tag} messages returned empty.")
|
|
@@ -2306,6 +2307,16 @@ class Coder(metaclass=UsageMeta):
|
|
|
2306
2307
|
def get_active_model(self):
|
|
2307
2308
|
return self.main_model
|
|
2308
2309
|
|
|
2310
|
+
def empty_llm_tool_warning(self) -> str:
|
|
2311
|
+
"""Ollama-friendly copy for local models; cloud hint otherwise."""
|
|
2312
|
+
name = str(getattr(getattr(self, "main_model", None), "name", "") or "")
|
|
2313
|
+
if "ollama" in name.lower():
|
|
2314
|
+
return (
|
|
2315
|
+
"Empty response from the local model (Ollama). "
|
|
2316
|
+
"The model may have timed out, unloaded, or hit context limits."
|
|
2317
|
+
)
|
|
2318
|
+
return "Empty response received from LLM. Check API keys, quota, or provider status."
|
|
2319
|
+
|
|
2309
2320
|
async def send_message(self, inp):
|
|
2310
2321
|
# Notify IO that LLM processing is starting
|
|
2311
2322
|
self.io.llm_started()
|
|
@@ -2365,7 +2376,7 @@ class Coder(metaclass=UsageMeta):
|
|
|
2365
2376
|
if not self.tui:
|
|
2366
2377
|
spinner_text += f" • ${self.format_cost(self.total_cost)} session"
|
|
2367
2378
|
|
|
2368
|
-
self.io.start_spinner(spinner_text)
|
|
2379
|
+
self.io.start_spinner(spinner_text, coder_uuid=getattr(self, "uuid", None))
|
|
2369
2380
|
if self.stream:
|
|
2370
2381
|
self.mdstream = True
|
|
2371
2382
|
else:
|
|
@@ -2452,9 +2463,7 @@ class Coder(metaclass=UsageMeta):
|
|
|
2452
2463
|
self.mdstream = None
|
|
2453
2464
|
|
|
2454
2465
|
# Ensure any waiting spinner is stopped
|
|
2455
|
-
self.io.start_spinner("Processing Answer...")
|
|
2456
|
-
|
|
2457
|
-
self.partial_response_content = self.get_multi_response_content_in_progress(True)
|
|
2466
|
+
self.io.start_spinner("Processing Answer...", coder_uuid=getattr(self, "uuid", None))
|
|
2458
2467
|
self.remove_reasoning_content()
|
|
2459
2468
|
self.multi_response_content = ""
|
|
2460
2469
|
|
|
@@ -2645,6 +2654,13 @@ class Coder(metaclass=UsageMeta):
|
|
|
2645
2654
|
expanded_tool_calls.append(tool_call)
|
|
2646
2655
|
continue
|
|
2647
2656
|
|
|
2657
|
+
merged = responses.merge_glued_json_objects(json_chunks)
|
|
2658
|
+
if merged is not None:
|
|
2659
|
+
new_tool_call = copy_tool_call(tool_call)
|
|
2660
|
+
new_tool_call.function.arguments = json.dumps(merged)
|
|
2661
|
+
expanded_tool_calls.append(new_tool_call)
|
|
2662
|
+
continue
|
|
2663
|
+
|
|
2648
2664
|
# We have concatenated JSON, so expand it into multiple tool calls.
|
|
2649
2665
|
for i, chunk in enumerate(json_chunks):
|
|
2650
2666
|
if not chunk.strip():
|
|
@@ -3255,7 +3271,6 @@ class Coder(metaclass=UsageMeta):
|
|
|
3255
3271
|
functions,
|
|
3256
3272
|
self.stream,
|
|
3257
3273
|
self.temperature,
|
|
3258
|
-
# This could include any tools, but for now it is just MCP tools
|
|
3259
3274
|
tools=tools,
|
|
3260
3275
|
override_kwargs=self.model_kwargs.copy(),
|
|
3261
3276
|
interrupt_event=self.interrupt_event,
|
|
@@ -3363,7 +3378,7 @@ class Coder(metaclass=UsageMeta):
|
|
|
3363
3378
|
and not len(self.partial_response_tool_calls)
|
|
3364
3379
|
and not len(self.partial_response_reasoning_content)
|
|
3365
3380
|
):
|
|
3366
|
-
self.io.tool_warning(
|
|
3381
|
+
self.io.tool_warning(self.empty_llm_tool_warning())
|
|
3367
3382
|
|
|
3368
3383
|
self.io.assistant_output(show_resp, pretty=self.show_pretty())
|
|
3369
3384
|
|
|
@@ -3520,7 +3535,7 @@ class Coder(metaclass=UsageMeta):
|
|
|
3520
3535
|
return
|
|
3521
3536
|
|
|
3522
3537
|
if not received_content and len(self.partial_response_tool_calls) == 0:
|
|
3523
|
-
self.io.tool_warning(
|
|
3538
|
+
self.io.tool_warning(self.empty_llm_tool_warning())
|
|
3524
3539
|
|
|
3525
3540
|
def consolidate_chunks(self):
|
|
3526
3541
|
if self.partial_response_consolidated:
|
|
@@ -3628,12 +3643,19 @@ class Coder(metaclass=UsageMeta):
|
|
|
3628
3643
|
extracted_calls = responses.extract_tools_from_content_json(
|
|
3629
3644
|
self.partial_response_content
|
|
3630
3645
|
)
|
|
3646
|
+
|
|
3631
3647
|
if not extracted_calls:
|
|
3632
3648
|
extracted_calls = responses.extract_tools_from_content_xml(
|
|
3633
3649
|
self.partial_response_content
|
|
3634
3650
|
)
|
|
3635
3651
|
|
|
3652
|
+
if not extracted_calls:
|
|
3653
|
+
extracted_calls = responses.extract_tools_from_pseudo_json(
|
|
3654
|
+
self.partial_response_content
|
|
3655
|
+
)
|
|
3656
|
+
|
|
3636
3657
|
if extracted_calls:
|
|
3658
|
+
self.tool_reflection = True
|
|
3637
3659
|
self.partial_response_tool_calls = extracted_calls
|
|
3638
3660
|
|
|
3639
3661
|
self.partial_response_consolidated = (response, func_err, content_err)
|
|
@@ -33,7 +33,6 @@ from .help import HelpCommand
|
|
|
33
33
|
from .history_search import HistorySearchCommand
|
|
34
34
|
from .hooks import HooksCommand
|
|
35
35
|
from .include_skill import IncludeSkillCommand
|
|
36
|
-
from .invoke_agent import InvokeAgentCommand
|
|
37
36
|
from .lint import LintCommand
|
|
38
37
|
from .list_sessions import ListSessionsCommand
|
|
39
38
|
from .list_skills import ListSkillsCommand
|
|
@@ -117,7 +116,6 @@ CommandRegistry.register(HashlineCommand)
|
|
|
117
116
|
CommandRegistry.register(HelpCommand)
|
|
118
117
|
CommandRegistry.register(HistorySearchCommand)
|
|
119
118
|
CommandRegistry.register(HooksCommand)
|
|
120
|
-
CommandRegistry.register(InvokeAgentCommand)
|
|
121
119
|
CommandRegistry.register(ReapAgentCommand)
|
|
122
120
|
CommandRegistry.register(SpawnAgentCommand)
|
|
123
121
|
CommandRegistry.register(SwitchAgentCommand)
|
|
@@ -200,7 +198,6 @@ __all__ = [
|
|
|
200
198
|
"HistorySearchCommand",
|
|
201
199
|
"HooksCommand",
|
|
202
200
|
"IncludeSkillCommand",
|
|
203
|
-
"InvokeAgentCommand",
|
|
204
201
|
"ReapAgentCommand",
|
|
205
202
|
"SpawnAgentCommand",
|
|
206
203
|
"SwitchAgentCommand",
|
|
@@ -71,6 +71,20 @@ class AddCommand(BaseCommand):
|
|
|
71
71
|
if len(confirm_fname) > 64:
|
|
72
72
|
confirm_fname = f".../{os.path.basename(confirm_fname)}"
|
|
73
73
|
|
|
74
|
+
# Check if the path matches any exempt-path regex patterns
|
|
75
|
+
exempt_paths = getattr(coder.args, "exempt_paths", None) or []
|
|
76
|
+
if exempt_paths:
|
|
77
|
+
try:
|
|
78
|
+
rel_norm = os.path.relpath(fname, coder.root).replace("\\", "/")
|
|
79
|
+
except ValueError:
|
|
80
|
+
rel_norm = str(fname).replace("\\", "/")
|
|
81
|
+
if any(re.search(p, rel_norm) for p in exempt_paths):
|
|
82
|
+
io.tool_error(
|
|
83
|
+
f"Path '{confirm_fname}' matches an exempt-path pattern. "
|
|
84
|
+
"Skipping file creation."
|
|
85
|
+
)
|
|
86
|
+
continue
|
|
87
|
+
|
|
74
88
|
if await io.confirm_ask(
|
|
75
89
|
f"No files matched '{confirm_fname}'. Do you want to create this file?"
|
|
76
90
|
):
|
|
@@ -19,7 +19,7 @@ class ExcludeSkillCommand(BaseCommand):
|
|
|
19
19
|
skill_names = args.strip().split()
|
|
20
20
|
|
|
21
21
|
# Check if we're in agent mode
|
|
22
|
-
if not hasattr(coder, "edit_format") or coder.edit_format
|
|
22
|
+
if not hasattr(coder, "edit_format") or coder.edit_format not in ("agent", "subagent"):
|
|
23
23
|
io.tool_output("Skill exclusion is only available in agent mode.")
|
|
24
24
|
return format_command_result(
|
|
25
25
|
io, "exclude-skill", "Skill exclusion is only available in agent mode"
|
|
@@ -19,7 +19,7 @@ class IncludeSkillCommand(BaseCommand):
|
|
|
19
19
|
skill_names = args.strip().split()
|
|
20
20
|
|
|
21
21
|
# Check if we're in agent mode
|
|
22
|
-
if not hasattr(coder, "edit_format") or coder.edit_format
|
|
22
|
+
if not hasattr(coder, "edit_format") or coder.edit_format not in ("agent", "subagent"):
|
|
23
23
|
io.tool_output("Skill inclusion is only available in agent mode.")
|
|
24
24
|
return format_command_result(
|
|
25
25
|
io, "include-skill", "Skill inclusion is only available in agent mode"
|
|
@@ -19,7 +19,8 @@ class LoadSkillCommand(BaseCommand):
|
|
|
19
19
|
skill_names = args.strip().split()
|
|
20
20
|
|
|
21
21
|
# Check if we're in agent mode
|
|
22
|
-
|
|
22
|
+
io.tool_output(coder.edit_format)
|
|
23
|
+
if not hasattr(coder, "edit_format") or coder.edit_format not in ("agent", "subagent"):
|
|
23
24
|
io.tool_output("Skill loading is only available in agent mode.")
|
|
24
25
|
return format_command_result(
|
|
25
26
|
io, "load-skill", "Skill loading is only available in agent mode"
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"""Reap-agent command - force destroys the active sub-agent."""
|
|
2
|
+
|
|
3
|
+
import weakref
|
|
4
|
+
from typing import List
|
|
5
|
+
|
|
6
|
+
from cecli.helpers.agents.service import AgentService
|
|
7
|
+
|
|
8
|
+
from .utils.base_command import BaseCommand
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ReapAgentCommand(BaseCommand):
|
|
12
|
+
NORM_NAME = "reap-agent"
|
|
13
|
+
DESCRIPTION = "Force destroy the active sub-agent"
|
|
14
|
+
show_completion_notification = False
|
|
15
|
+
|
|
16
|
+
@classmethod
|
|
17
|
+
async def execute(cls, io, coder, args, **kwargs):
|
|
18
|
+
"""Destroy a sub-agent and clean up its resources.
|
|
19
|
+
|
|
20
|
+
If an agent identifier is provided, looks up the sub-agent by
|
|
21
|
+
name or UUID prefix (matching switch-agent semantics). Without
|
|
22
|
+
an argument the currently-active sub-agent (from the TUI) is
|
|
23
|
+
reaped.
|
|
24
|
+
"""
|
|
25
|
+
agent_identifier = args.strip() if args else ""
|
|
26
|
+
|
|
27
|
+
# --- Resolve the target UUID -------------------------------- #
|
|
28
|
+
agent_uuid = None
|
|
29
|
+
target_name = None
|
|
30
|
+
|
|
31
|
+
if agent_identifier:
|
|
32
|
+
# Lookup logic mirroring switch-agent
|
|
33
|
+
agent_service = AgentService.get_instance(coder)
|
|
34
|
+
|
|
35
|
+
# Try parsing "name (uuid_prefix)" format
|
|
36
|
+
if agent_identifier.endswith(")") and " (" in agent_identifier:
|
|
37
|
+
try:
|
|
38
|
+
uuid_prefix = agent_identifier.rsplit(" (", 1)[1][:-1]
|
|
39
|
+
for uuid, info in agent_service.sub_agents.items():
|
|
40
|
+
if uuid.startswith(uuid_prefix):
|
|
41
|
+
agent_uuid = uuid
|
|
42
|
+
target_name = info.name
|
|
43
|
+
break
|
|
44
|
+
except IndexError:
|
|
45
|
+
pass
|
|
46
|
+
|
|
47
|
+
# Try matching by name directly
|
|
48
|
+
if agent_uuid is None:
|
|
49
|
+
for uuid, info in agent_service.sub_agents.items():
|
|
50
|
+
if info.name == agent_identifier:
|
|
51
|
+
agent_uuid = uuid
|
|
52
|
+
target_name = info.name
|
|
53
|
+
break
|
|
54
|
+
|
|
55
|
+
# Try matching by UUID prefix directly
|
|
56
|
+
if agent_uuid is None:
|
|
57
|
+
for uuid, info in agent_service.sub_agents.items():
|
|
58
|
+
if uuid.startswith(agent_identifier):
|
|
59
|
+
agent_uuid = uuid
|
|
60
|
+
target_name = info.name
|
|
61
|
+
break
|
|
62
|
+
|
|
63
|
+
if agent_uuid is None:
|
|
64
|
+
io.tool_error(f"Error: Agent '{agent_identifier}' not found.")
|
|
65
|
+
return
|
|
66
|
+
|
|
67
|
+
# Prevent reaping the primary coder
|
|
68
|
+
if agent_uuid == str(coder.uuid):
|
|
69
|
+
io.tool_error("Cannot reap the primary coder.")
|
|
70
|
+
return
|
|
71
|
+
|
|
72
|
+
else:
|
|
73
|
+
# Original behaviour: reap the active sub-agent from the TUI
|
|
74
|
+
active_uuid = None
|
|
75
|
+
|
|
76
|
+
# Use _get_tui logic (same as AgentService._get_tui) to safely
|
|
77
|
+
# dereference the TUI weakref. The TUI stores itself on coders
|
|
78
|
+
# as a weakref.ref, so we must call it to get the live object.
|
|
79
|
+
tui_ref = getattr(coder, "tui", None)
|
|
80
|
+
if tui_ref is not None:
|
|
81
|
+
if isinstance(tui_ref, weakref.ref):
|
|
82
|
+
tui_instance = tui_ref()
|
|
83
|
+
else:
|
|
84
|
+
tui_instance = tui_ref
|
|
85
|
+
if tui_instance is not None:
|
|
86
|
+
active_uuid = tui_instance._get_visible_coder().uuid
|
|
87
|
+
|
|
88
|
+
if not active_uuid:
|
|
89
|
+
io.tool_error("No active sub-agent to reap.")
|
|
90
|
+
return
|
|
91
|
+
|
|
92
|
+
# Find the sub-agent info by UUID
|
|
93
|
+
agent_service = AgentService.get_instance(coder)
|
|
94
|
+
for name, info in list(agent_service.sub_agents.items()):
|
|
95
|
+
if info.coder.uuid == active_uuid:
|
|
96
|
+
agent_uuid = active_uuid
|
|
97
|
+
target_name = name
|
|
98
|
+
break
|
|
99
|
+
else:
|
|
100
|
+
io.tool_error("Could not find sub-agent for the active container.")
|
|
101
|
+
return
|
|
102
|
+
|
|
103
|
+
# --- Cleanup ------------------------------------------------ #
|
|
104
|
+
try:
|
|
105
|
+
# Cleanup conversation resources
|
|
106
|
+
from cecli.helpers.conversation.service import ConversationService
|
|
107
|
+
|
|
108
|
+
ConversationService.destroy_instances(agent_uuid)
|
|
109
|
+
|
|
110
|
+
# Remove from tracking and clean up
|
|
111
|
+
agent_service._cleanup_sub_agent(agent_uuid)
|
|
112
|
+
|
|
113
|
+
io.tool_output(f"Sub-agent '{target_name}' reaped.")
|
|
114
|
+
except (KeyError, AttributeError, RuntimeError) as e:
|
|
115
|
+
io.tool_error(f"Error reaping sub-agent: {e}")
|
|
116
|
+
except Exception as e:
|
|
117
|
+
io.tool_error(f"Unexpected error reaping sub-agent: {e}")
|
|
118
|
+
|
|
119
|
+
@classmethod
|
|
120
|
+
def get_completions(cls, io, coder, args) -> List[str]:
|
|
121
|
+
"""Get completion options for reap-agent command."""
|
|
122
|
+
try:
|
|
123
|
+
agent_service = AgentService.get_instance(coder)
|
|
124
|
+
names: List[str] = []
|
|
125
|
+
|
|
126
|
+
# Add sub-agent names
|
|
127
|
+
if agent_service and agent_service.sub_agents:
|
|
128
|
+
# First pass: count name occurrences
|
|
129
|
+
name_counts = {}
|
|
130
|
+
for uuid, sub_agent_info in agent_service.sub_agents.items():
|
|
131
|
+
name_counts[sub_agent_info.name] = name_counts.get(sub_agent_info.name, 0) + 1
|
|
132
|
+
|
|
133
|
+
# Second pass: only show UUID prefix when name appears multiple times
|
|
134
|
+
for uuid, sub_agent_info in agent_service.sub_agents.items():
|
|
135
|
+
name = sub_agent_info.name
|
|
136
|
+
if name_counts[name] > 1:
|
|
137
|
+
names.append(f"{name} ({uuid[:3]})")
|
|
138
|
+
else:
|
|
139
|
+
names.append(name)
|
|
140
|
+
|
|
141
|
+
current_arg = args.strip().lower()
|
|
142
|
+
if current_arg:
|
|
143
|
+
return [name for name in names if name.lower().startswith(current_arg)]
|
|
144
|
+
else:
|
|
145
|
+
return names
|
|
146
|
+
except Exception:
|
|
147
|
+
return []
|
|
148
|
+
|
|
149
|
+
@classmethod
|
|
150
|
+
def get_help(cls) -> str:
|
|
151
|
+
help_text = "Force destroy the active sub-agent (/reap-agent)"
|
|
152
|
+
help_text += "\n\nUsage:\n"
|
|
153
|
+
help_text += " /reap-agent # Reap the currently active sub-agent\n"
|
|
154
|
+
help_text += " /reap-agent <name> # Reap a sub-agent by name\n"
|
|
155
|
+
help_text += " /reap-agent <uuid> # Reap a sub-agent by UUID prefix\n"
|
|
156
|
+
help_text += " /reap-agent <name> (<prefix>) # Reap by name with UUID disambiguation\n"
|
|
157
|
+
help_text += "\nExamples:\n"
|
|
158
|
+
help_text += " /reap-agent reviewer\n"
|
|
159
|
+
help_text += " /reap-agent abc\n"
|
|
160
|
+
return help_text
|
|
@@ -19,7 +19,7 @@ class RemoveSkillCommand(BaseCommand):
|
|
|
19
19
|
skill_names = args.strip().split()
|
|
20
20
|
|
|
21
21
|
# Check if we're in agent mode
|
|
22
|
-
if not hasattr(coder, "edit_format") or coder.edit_format
|
|
22
|
+
if not hasattr(coder, "edit_format") or coder.edit_format not in ("agent", "subagent"):
|
|
23
23
|
io.tool_output("Skill removal is only available in agent mode.")
|
|
24
24
|
return format_command_result(
|
|
25
25
|
io, "remove-skill", "Skill removal is only available in agent mode"
|