cecli-dev 0.99.8__tar.gz → 0.99.10__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.99.8 → cecli_dev-0.99.10}/PKG-INFO +1 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/__init__.py +1 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/_version.py +3 -3
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/agent_coder.py +31 -11
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/base_coder.py +95 -53
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/__init__.py +9 -0
- cecli_dev-0.99.10/cecli/commands/exclude_skill.py +72 -0
- cecli_dev-0.99.10/cecli/commands/include_skill.py +72 -0
- cecli_dev-0.99.10/cecli/commands/list_skills.py +51 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/load_mcp.py +41 -21
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/load_session.py +1 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/load_skill.py +0 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/remove_mcp.py +40 -19
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/remove_skill.py +0 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/utils/helpers.py +2 -2
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/conversation/files.py +20 -14
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/conversation/integration.py +52 -11
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/conversation/manager.py +28 -0
- cecli_dev-0.99.10/cecli/helpers/coroutines.py +45 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/hashpos/hashpos.py +50 -8
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/skills.py +281 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/io.py +2 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/main.py +4 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/models.py +10 -2
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/agent.yml +5 -2
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/repo.py +23 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/sessions.py +95 -3
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/__init__.py +2 -2
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/command.py +9 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/context_manager.py +15 -15
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/edit_text.py +10 -10
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/grep.py +2 -1
- cecli_dev-0.99.8/cecli/tools/get_lines.py → cecli_dev-0.99.10/cecli/tools/read_range.py +96 -68
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/utils/base_tool.py +2 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/utils/helpers.py +5 -5
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/app.py +10 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli_dev.egg-info/PKG-INFO +1 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli_dev.egg-info/SOURCES.txt +6 -2
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_sessions.py +112 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/tools/test_get_lines.py +7 -5
- cecli_dev-0.99.10/tests/tui/test_app.py +37 -0
- cecli_dev-0.99.8/cecli/helpers/coroutines.py +0 -8
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.dockerignore +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.flake8 +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.gitattributes +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/check_pypi_version.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/docker-build-test.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/docker-release.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/issues.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/pages.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/pre-commit.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/release.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/ubuntu-tests.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/windows-tests.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.github/workflows/windows_check_pypi_version.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.gitignore +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/.pre-commit-config.yaml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/CHANGELOG.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/CNAME +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/CONTRIBUTING.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/HISTORY.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/LICENSE.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/MANIFEST.in +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/README.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/Dockerfile +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/README.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/benchmark.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/benchmark_classic.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/clone-exercism.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/cpp-test.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/docker.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/docker_build.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/install-docker-ubuntu.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/npm-test.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/over_time.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/plot.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/plots.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/problem_stats.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/prompts.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/refactor_tools.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/rsync.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/rungrid.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/swe-bench-lite.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/swe-bench.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/swe_bench.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/test_benchmark.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/variations.1.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/variations.2.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/variations.3.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/benchmark/variations.4.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/__main__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/args.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/args_formatter.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/change_tracker.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/architect_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/ask_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/chat_chunks.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/context_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/copypaste_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/editblock_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/editblock_fenced_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/editblock_func_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/editor_diff_fenced_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/editor_editblock_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/editor_whole_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/hashline_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/help_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/patch_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/search_replace.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/shell.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/single_wholefile_func_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/udiff_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/udiff_simple.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/wholefile_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/coders/wholefile_func_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/add.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/agent.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/agent_model.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/architect.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/ask.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/chat_mode.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/clear.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/code.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/command_prefix.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/commit.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/compact.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/context.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/context_blocks.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/context_management.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/copy.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/copy_context.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/core.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/diff.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/drop.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/editor.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/editor_model.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/exit.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/git.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/hashline.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/help.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/history_search.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/hooks.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/lint.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/list_sessions.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/load.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/load_hook.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/ls.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/map.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/map_refresh.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/model.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/models.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/multiline_mode.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/paste.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/quit.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/read_only.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/read_only_stub.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/reasoning_effort.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/remove_hook.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/report.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/reset.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/rules.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/run.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/save.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/save_session.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/settings.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/terminal_data/linux.keytab +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/terminal_setup.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/test.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/think_tokens.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/tokens.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/undo.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/utils/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/utils/base_command.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/utils/registry.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/utils/save_load_manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/voice.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/weak_model.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/web.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/commands/workspace.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/deprecated_args.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/diffs.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/dump.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/editor.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/exceptions.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/format_settings.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/help.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/help_pats.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/background_commands.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/command_parser.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/conversation/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/conversation/base_message.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/conversation/service.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/conversation/tags.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/conversation/utils.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/copypaste.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/file_searcher.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/dump.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/grep_ast.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/main.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/parsers.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/grep_ast/tsl.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/hashline.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/hashpos/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/leak_detect.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/model_providers.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/monorepo/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/monorepo/config.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/monorepo/project.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/monorepo/workspace.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/monorepo/worktree.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/nested.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/observations/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/observations/manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/plugin_manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/profiler.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/requests.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/responses.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/helpers/similarity.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/history.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/hooks/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/hooks/base.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/hooks/integration.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/hooks/manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/hooks/registry.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/hooks/types.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/interruptible_input.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/linter.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/llm.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/mcp/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/mcp/manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/mcp/oauth.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/mcp/server.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/mcp/utils.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/mdstream.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/onboarding.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/architect.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/ask.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/base.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/context.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/copypaste.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/editblock.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/editblock_fenced.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/editblock_func.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/editor_diff_fenced.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/editor_editblock.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/editor_whole.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/hashline.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/help.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/patch.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/single_wholefile_func.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/udiff.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/udiff_simple.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/utils/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/utils/registry.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/utils/system.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/wholefile.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/prompts/wholefile_func.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/README.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/reasoning_tags.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/repomap.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/report.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/resources/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/resources/model-metadata.json +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/resources/model-settings.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/resources/providers.json +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/run_cmd.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/scrape.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/sendchat.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/special.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/command_interactive.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/explore_code.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/finished.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/git_branch.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/git_diff.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/git_log.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/git_remote.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/git_show.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/git_status.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/load_skill.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/ls.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/remove_skill.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/thinking.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/undo_change.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/update_todo_list.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/utils/output.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tools/utils/registry.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/io.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/styles.tcss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/completion_bar.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/file_list.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/footer.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/input_area.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/input_container.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/key_hints.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/output.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/widgets/status_bar.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/tui/worker.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/urls.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/utils.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/versioncheck.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/voice.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/waiting.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/watch.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/watch_prompts.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/Gemfile +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/blame.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/get-started.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/help-tip.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/help.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/install.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/keys.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/model-warnings.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/multi-line.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/python-m-aider.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/recording.css +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/recording.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_includes/works-best.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_features.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_footer.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_hero.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_info.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_layout.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_reset.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_testimonials.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_typography.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/_variables.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/custom/custom.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/_sass/global-overrides.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/adv-model-settings.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/agent-mode.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/aider_conf.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/api-keys.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/custom-commands.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/custom-system-prompts.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/dotenv.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/editor.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/hooks.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/mcp.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/model-aliases.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/options.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/reasoning.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/security.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/skills.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/tui.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config/workspaces.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/config.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/faq.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/git.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/index.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/install/docker.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/install/optional.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/install.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/languages.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/legal/contributor-agreement.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/legal/privacy.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/anthropic.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/azure.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/bedrock.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/cohere.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/deepseek.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/gemini.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/github.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/groq.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/lm-studio.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/ollama.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/openai-compat.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/openai.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/openrouter.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/other.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/vertex.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/warnings.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms/xai.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/llms.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/more/analytics.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/more/edit-formats.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/more/infinite-output.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/more-info.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/repomap.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/scripting.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/imports.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/support.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting/warnings.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/troubleshooting.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/commands.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/conventions.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/copypaste.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/images-urls.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/lint-test.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/modes.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/not-code.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/notifications.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/sessions.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/tips.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/voice.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage/watch.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/docs/usage.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli/website/share/index.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli_dev.egg-info/dependency_links.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli_dev.egg-info/entry_points.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli_dev.egg-info/requires.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/cecli_dev.egg-info/top_level.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/docker/Dockerfile +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/pyproject.toml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/pytest.ini +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/common-constraints.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/requirements-dev.in +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/requirements-dev.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/requirements-help.in +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/requirements-help.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/requirements-playwright.in +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/requirements-playwright.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/requirements.in +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements/tree-sitter.in +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/requirements.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/30k-image.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/Dockerfile.jekyll +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/blame.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/clean_metadata.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/cost_analyzer.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/dl_icons.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/filter-chat-mode.js +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/generate_providers.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/get_contributor_list.js +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/get_hashline.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/history_prompts.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/homepage.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/issues.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/jekyll_build.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/jekyll_run.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/logo_svg.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/pip-compile.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/recording_audio.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/redact-cast.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/rename_to_cecli.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/tmux_record.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/tsl_pack_langs.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/update-blame.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/update-docs.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/update-history.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/versionbump.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/scripts/yank-old-versions.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/setup.cfg +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/shim.pyproject.toml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_aws_credentials.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_background_commands.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_commands.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_custom_commands.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_deprecated.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_editblock.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_editor.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_exceptions.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_find_or_blocks.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_hashline.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_history.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_io.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_linter.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_main.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_model_info_manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_model_provider_manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_models.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_onboarding.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_plugin_manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_prompts.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_reasoning.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_repo.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_repomap.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_run_cmd.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_sanity_check_repo.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_scripting.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_sendchat.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_skills.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_special.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_ssl_verification.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_udiff.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_urls.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_voice.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_watch.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/basic/test_wholefile.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/coders/test_copypaste_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/conftest.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/conversations/test_conversation_integration.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/conversations/test_conversation_system.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/chat-history.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/arduino/test.ino +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/c/test.c +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/chatito/test.chatito +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/clojure/test.clj +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/cpp/test.cpp +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/csharp/test.cs +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/d/test.d +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/dart/test.dart +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/elisp/test.el +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/elixir/test.ex +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/elm/test.elm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/gleam/test.gleam +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/go/test.go +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/haskell/test.hs +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/hcl/test.tf +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/java/test.java +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/javascript/test.js +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/kotlin/test.kt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/lua/test.lua +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/matlab/test.m +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/ocaml/test.ml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/php/test.php +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/pony/test.pony +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/properties/test.properties +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/python/test.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/ql/test.ql +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/r/test.r +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/racket/test.rkt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/ruby/test.rb +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/rust/test.rs +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/scala/test.scala +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/solidity/test.sol +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/swift/test.swift +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/tsx/test.tsx +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/typescript/test.ts +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/udev/test.rules +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/languages/zig/test.zig +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/sample-code-base/sample.js +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/sample-code-base/sample.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/watch.js +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/watch.lisp +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/watch.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/fixtures/watch_question.js +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/help/test_help.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/helpers/monorepo/test_config.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/helpers/monorepo/test_config_active.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/helpers/monorepo/test_workspace.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/helpers/observations/test_observation_manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/hooks/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/hooks/test_base.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/hooks/test_manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/hooks/test_registry.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/mcp/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/mcp/test_manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/scrape/test_playwright_disable.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/scrape/test_scrape.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/tools/test_git_branch.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/tools/test_git_diff.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/tools/test_grep.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/tools/test_insert_block.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.10}/tests/tools/test_registry.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 = '0.99.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 99,
|
|
21
|
+
__version__ = version = '0.99.10'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 99, 10)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gdd5ec67da'
|
|
@@ -31,6 +31,8 @@ from cecli.utils import copy_tool_call, tool_call_to_dict
|
|
|
31
31
|
|
|
32
32
|
from .base_coder import Coder
|
|
33
33
|
|
|
34
|
+
from cecli.helpers.coroutines import interruptible # isort:skip
|
|
35
|
+
|
|
34
36
|
|
|
35
37
|
class AgentCoder(Coder):
|
|
36
38
|
"""Mode where the LLM autonomously manages which files are in context."""
|
|
@@ -42,6 +44,9 @@ class AgentCoder(Coder):
|
|
|
42
44
|
stop_on_empty = False
|
|
43
45
|
|
|
44
46
|
def __init__(self, *args, **kwargs):
|
|
47
|
+
if kwargs.get("uuid", None):
|
|
48
|
+
self.uuid = kwargs.get("uuid")
|
|
49
|
+
|
|
45
50
|
self.recently_removed = {}
|
|
46
51
|
self.tool_usage_history = []
|
|
47
52
|
self.loaded_custom_tools = []
|
|
@@ -55,7 +60,7 @@ class AgentCoder(Coder):
|
|
|
55
60
|
"commandinteractive",
|
|
56
61
|
"explorecode",
|
|
57
62
|
"ls",
|
|
58
|
-
"
|
|
63
|
+
"readrange",
|
|
59
64
|
"grep",
|
|
60
65
|
"thinking",
|
|
61
66
|
"updatetodolist",
|
|
@@ -301,8 +306,23 @@ class AgentCoder(Coder):
|
|
|
301
306
|
else:
|
|
302
307
|
all_results_content.append(f"Error: Unknown tool name '{tool_name}'")
|
|
303
308
|
if tasks:
|
|
304
|
-
|
|
305
|
-
|
|
309
|
+
|
|
310
|
+
async def gather_and_await():
|
|
311
|
+
return await asyncio.gather(*tasks, return_exceptions=True)
|
|
312
|
+
|
|
313
|
+
task_results, interrupted = await interruptible(
|
|
314
|
+
gather_and_await(), self.interrupt_event
|
|
315
|
+
)
|
|
316
|
+
|
|
317
|
+
if interrupted:
|
|
318
|
+
self.io.tool_warning("Tool execution interrupted.")
|
|
319
|
+
all_results_content.append("Tool execution interrupted by user.")
|
|
320
|
+
elif task_results:
|
|
321
|
+
for res in task_results:
|
|
322
|
+
if isinstance(res, Exception):
|
|
323
|
+
all_results_content.append(f"Error in tool execution: {res}")
|
|
324
|
+
else:
|
|
325
|
+
all_results_content.append(str(res))
|
|
306
326
|
|
|
307
327
|
if not await HookIntegration.call_post_tool_hooks(
|
|
308
328
|
self, tool_name, args_string, "\n\n".join(all_results_content)
|
|
@@ -393,7 +413,11 @@ class AgentCoder(Coder):
|
|
|
393
413
|
""")
|
|
394
414
|
return f"Error executing tool call {tool_name}: {e}"
|
|
395
415
|
|
|
396
|
-
|
|
416
|
+
result, interrupted = await interruptible(_exec_async(), self.interrupt_event)
|
|
417
|
+
|
|
418
|
+
if interrupted:
|
|
419
|
+
return "Tool execution interrupted by user."
|
|
420
|
+
return result
|
|
397
421
|
|
|
398
422
|
def _calculate_context_block_tokens(self, force=False):
|
|
399
423
|
"""
|
|
@@ -618,9 +642,7 @@ class AgentCoder(Coder):
|
|
|
618
642
|
total_file_tokens += tokens
|
|
619
643
|
editable_tokens += tokens
|
|
620
644
|
size_indicator = (
|
|
621
|
-
"
|
|
622
|
-
if tokens > 5000
|
|
623
|
-
else "🟡 Medium" if tokens > 1000 else "🟢 Small"
|
|
645
|
+
"Large" if tokens > 5000 else "Medium" if tokens > 1000 else "Small"
|
|
624
646
|
)
|
|
625
647
|
editable_files.append(
|
|
626
648
|
f"- {rel_fname}: {tokens:,} tokens ({size_indicator})"
|
|
@@ -642,9 +664,7 @@ class AgentCoder(Coder):
|
|
|
642
664
|
total_file_tokens += tokens
|
|
643
665
|
readonly_tokens += tokens
|
|
644
666
|
size_indicator = (
|
|
645
|
-
"
|
|
646
|
-
if tokens > 5000
|
|
647
|
-
else "🟡 Medium" if tokens > 1000 else "🟢 Small"
|
|
667
|
+
"Large" if tokens > 5000 else "Medium" if tokens > 1000 else "Small"
|
|
648
668
|
)
|
|
649
669
|
readonly_files.append(
|
|
650
670
|
f"- {rel_fname}: {tokens:,} tokens ({size_indicator})"
|
|
@@ -999,7 +1019,7 @@ I will proceed based on the tool results and updated context.""")
|
|
|
999
1019
|
context_parts.append("\n\n")
|
|
1000
1020
|
context_parts.append("## File Editing Tools Disabled")
|
|
1001
1021
|
context_parts.append(
|
|
1002
|
-
"File editing tools are currently disabled.Use `
|
|
1022
|
+
"File editing tools are currently disabled.Use `ReadRange` to determine the"
|
|
1003
1023
|
" current hashline prefixes needed to perform an edit and activate them when you"
|
|
1004
1024
|
" are ready to edit a file."
|
|
1005
1025
|
)
|
|
@@ -139,6 +139,12 @@ class Coder:
|
|
|
139
139
|
partial_response_tool_calls = []
|
|
140
140
|
commit_before_message = []
|
|
141
141
|
message_cost = 0.0
|
|
142
|
+
total_tokens_sent = 0
|
|
143
|
+
total_tokens_received = 0
|
|
144
|
+
total_cached_tokens = 0
|
|
145
|
+
message_tokens_sent = 0
|
|
146
|
+
message_tokens_received = 0
|
|
147
|
+
message_cached_tokens = 0
|
|
142
148
|
add_cache_headers = False
|
|
143
149
|
cache_warming_thread = None
|
|
144
150
|
num_cache_warming_pings = 0
|
|
@@ -227,6 +233,7 @@ class Coder:
|
|
|
227
233
|
ignore_mentions=from_coder.ignore_mentions,
|
|
228
234
|
total_tokens_sent=from_coder.total_tokens_sent,
|
|
229
235
|
total_tokens_received=from_coder.total_tokens_received,
|
|
236
|
+
total_cached_tokens=from_coder.total_cached_tokens,
|
|
230
237
|
file_watcher=from_coder.file_watcher,
|
|
231
238
|
mcp_manager=from_coder.mcp_manager,
|
|
232
239
|
uuid=from_coder.uuid,
|
|
@@ -316,6 +323,7 @@ class Coder:
|
|
|
316
323
|
ignore_mentions=None,
|
|
317
324
|
total_tokens_sent=0,
|
|
318
325
|
total_tokens_received=0,
|
|
326
|
+
total_cached_tokens=0,
|
|
319
327
|
file_watcher=None,
|
|
320
328
|
auto_copy_context=False,
|
|
321
329
|
auto_accept_architect=True,
|
|
@@ -331,6 +339,7 @@ class Coder:
|
|
|
331
339
|
):
|
|
332
340
|
# initialize from args.map_cache_dir
|
|
333
341
|
self.interrupt_event = asyncio.Event()
|
|
342
|
+
self.coroutines = coroutines
|
|
334
343
|
self.uuid = generate_unique_id()
|
|
335
344
|
if uuid:
|
|
336
345
|
self.uuid = uuid
|
|
@@ -388,8 +397,10 @@ class Coder:
|
|
|
388
397
|
self.total_cost = total_cost
|
|
389
398
|
self.total_tokens_sent = total_tokens_sent
|
|
390
399
|
self.total_tokens_received = total_tokens_received
|
|
400
|
+
self.total_cached_tokens = total_cached_tokens
|
|
391
401
|
self.message_tokens_sent = 0
|
|
392
402
|
self.message_tokens_received = 0
|
|
403
|
+
self.message_cached_tokens = 0
|
|
393
404
|
|
|
394
405
|
self.token_profiler = TokenProfiler(
|
|
395
406
|
enable_printing=nested.getter(self.args, "show_speed", False)
|
|
@@ -1370,11 +1381,6 @@ class Coder:
|
|
|
1370
1381
|
except (SwitchCoderSignal, SystemExit):
|
|
1371
1382
|
# Re-raise SwitchCoder to be handled by outer try block
|
|
1372
1383
|
raise
|
|
1373
|
-
except KeyboardInterrupt:
|
|
1374
|
-
# Handle keyboard interrupt gracefully
|
|
1375
|
-
self.io.set_placeholder("")
|
|
1376
|
-
self.io.stop_spinner()
|
|
1377
|
-
self.keyboard_interrupt()
|
|
1378
1384
|
finally:
|
|
1379
1385
|
# Signal tasks to stop
|
|
1380
1386
|
self.input_running = False
|
|
@@ -1454,10 +1460,6 @@ class Coder:
|
|
|
1454
1460
|
|
|
1455
1461
|
await asyncio.sleep(0.1) # Small yield to prevent tight loop
|
|
1456
1462
|
|
|
1457
|
-
except KeyboardInterrupt:
|
|
1458
|
-
self.io.set_placeholder("")
|
|
1459
|
-
self.keyboard_interrupt()
|
|
1460
|
-
await self.io.stop_task_streams()
|
|
1461
1463
|
except (SwitchCoderSignal, SystemExit):
|
|
1462
1464
|
raise
|
|
1463
1465
|
except Exception as e:
|
|
@@ -1738,8 +1740,7 @@ class Coder:
|
|
|
1738
1740
|
# Ensure cursor is visible on exit
|
|
1739
1741
|
Console().show_cursor(True)
|
|
1740
1742
|
|
|
1741
|
-
self.io.tool_warning("
|
|
1742
|
-
|
|
1743
|
+
self.io.tool_warning("^C KeyboardInterrupt")
|
|
1743
1744
|
self.interrupt_event.set()
|
|
1744
1745
|
self.last_keyboard_interrupt = time.time()
|
|
1745
1746
|
|
|
@@ -2178,6 +2179,8 @@ class Coder:
|
|
|
2178
2179
|
# Notify IO that LLM processing is starting
|
|
2179
2180
|
self.io.llm_started()
|
|
2180
2181
|
|
|
2182
|
+
ConversationService.get_manager(self).flush_queue()
|
|
2183
|
+
|
|
2181
2184
|
if inp:
|
|
2182
2185
|
# Make sure current coder actually has control of conversation system
|
|
2183
2186
|
ConversationService.get_chunks(self).initialize_conversation_system()
|
|
@@ -2260,9 +2263,16 @@ class Coder:
|
|
|
2260
2263
|
self.io.tool_error(err_msg)
|
|
2261
2264
|
|
|
2262
2265
|
self.io.tool_output(f"Retrying in {retry_delay:.1f} seconds...")
|
|
2263
|
-
|
|
2266
|
+
|
|
2267
|
+
_res, interrupted_sleep = await coroutines.interruptible(
|
|
2268
|
+
asyncio.sleep(retry_delay), self.interrupt_event
|
|
2269
|
+
)
|
|
2270
|
+
if interrupted_sleep:
|
|
2271
|
+
interrupted = True
|
|
2272
|
+
break
|
|
2273
|
+
|
|
2264
2274
|
continue
|
|
2265
|
-
except KeyboardInterrupt:
|
|
2275
|
+
except (KeyboardInterrupt, asyncio.CancelledError):
|
|
2266
2276
|
interrupted = True
|
|
2267
2277
|
break
|
|
2268
2278
|
except FinishReasonLength:
|
|
@@ -2627,11 +2637,19 @@ class Coder:
|
|
|
2627
2637
|
all_results_content.append("Tool Request Aborted.")
|
|
2628
2638
|
continue
|
|
2629
2639
|
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2640
|
+
async def do_tool_call():
|
|
2641
|
+
return await experimental_mcp_client.call_openai_tool(
|
|
2642
|
+
session=session,
|
|
2643
|
+
openai_tool=new_tool_call,
|
|
2644
|
+
)
|
|
2645
|
+
|
|
2646
|
+
call_result, interrupted = await coroutines.interruptible(
|
|
2647
|
+
do_tool_call(), self.interrupt_event
|
|
2633
2648
|
)
|
|
2634
2649
|
|
|
2650
|
+
if interrupted:
|
|
2651
|
+
raise KeyboardInterrupt("Tool call interrupted")
|
|
2652
|
+
|
|
2635
2653
|
content_parts = []
|
|
2636
2654
|
if call_result.content:
|
|
2637
2655
|
for item in call_result.content:
|
|
@@ -2676,6 +2694,9 @@ class Coder:
|
|
|
2676
2694
|
}
|
|
2677
2695
|
)
|
|
2678
2696
|
|
|
2697
|
+
except KeyboardInterrupt:
|
|
2698
|
+
self.io.tool_warning(f"Tool call {tool_call.function.name} interrupted.")
|
|
2699
|
+
raise
|
|
2679
2700
|
except Exception as e:
|
|
2680
2701
|
tool_error = f"Error executing tool call {tool_call.function.name}: \n{e}"
|
|
2681
2702
|
self.io.tool_warning(
|
|
@@ -2692,6 +2713,9 @@ class Coder:
|
|
|
2692
2713
|
tool_responses.append(
|
|
2693
2714
|
{"role": "tool", "tool_call_id": tool_call.id, "content": connection_error}
|
|
2694
2715
|
)
|
|
2716
|
+
except asyncio.CancelledError:
|
|
2717
|
+
# Re-raise CancelledError to ensure the task cancellation propagates
|
|
2718
|
+
raise
|
|
2695
2719
|
except Exception as e:
|
|
2696
2720
|
connection_error = f"Could not connect to server {server.name}\n{e}"
|
|
2697
2721
|
self.io.tool_warning(connection_error)
|
|
@@ -2726,7 +2750,15 @@ class Coder:
|
|
|
2726
2750
|
return False
|
|
2727
2751
|
|
|
2728
2752
|
# 5. Execute tools
|
|
2729
|
-
|
|
2753
|
+
self.interrupt_event.clear()
|
|
2754
|
+
|
|
2755
|
+
tool_responses_by_server, interrupted = await coroutines.interruptible(
|
|
2756
|
+
self._execute_tool_groups(tool_groups), self.interrupt_event
|
|
2757
|
+
)
|
|
2758
|
+
|
|
2759
|
+
if interrupted:
|
|
2760
|
+
self.io.tool_warning("Tool execution interrupted.")
|
|
2761
|
+
return False
|
|
2730
2762
|
|
|
2731
2763
|
# 6. Add responses to conversation (re-prefixing if necessary)
|
|
2732
2764
|
tool_responses = []
|
|
@@ -3038,33 +3070,22 @@ class Coder:
|
|
|
3038
3070
|
self.token_profiler.start()
|
|
3039
3071
|
|
|
3040
3072
|
try:
|
|
3041
|
-
|
|
3042
|
-
|
|
3043
|
-
|
|
3044
|
-
|
|
3045
|
-
|
|
3046
|
-
|
|
3047
|
-
|
|
3048
|
-
|
|
3049
|
-
|
|
3050
|
-
)
|
|
3073
|
+
completion_coro = model.send_completion(
|
|
3074
|
+
messages,
|
|
3075
|
+
functions,
|
|
3076
|
+
self.stream,
|
|
3077
|
+
self.temperature,
|
|
3078
|
+
# This could include any tools, but for now it is just MCP tools
|
|
3079
|
+
tools=tools,
|
|
3080
|
+
override_kwargs=self.model_kwargs.copy(),
|
|
3081
|
+
interrupt_event=self.interrupt_event,
|
|
3051
3082
|
)
|
|
3052
|
-
interrupt_task = asyncio.create_task(self.interrupt_event.wait())
|
|
3053
3083
|
|
|
3054
|
-
|
|
3055
|
-
|
|
3056
|
-
return_when=asyncio.FIRST_COMPLETED,
|
|
3084
|
+
(hash_object, completion), interrupted = await coroutines.interruptible(
|
|
3085
|
+
completion_coro, self.interrupt_event
|
|
3057
3086
|
)
|
|
3058
|
-
|
|
3059
|
-
if interrupt_task in done:
|
|
3060
|
-
completion_task.cancel()
|
|
3061
|
-
try:
|
|
3062
|
-
await completion_task
|
|
3063
|
-
except asyncio.CancelledError:
|
|
3064
|
-
pass
|
|
3087
|
+
if interrupted:
|
|
3065
3088
|
raise KeyboardInterrupt
|
|
3066
|
-
|
|
3067
|
-
hash_object, completion = completion_task.result()
|
|
3068
3089
|
self.chat_completion_call_hashes.append(hash_object.hexdigest())
|
|
3069
3090
|
|
|
3070
3091
|
if not isinstance(completion, ModelResponse):
|
|
@@ -3087,7 +3108,7 @@ class Coder:
|
|
|
3087
3108
|
self.token_profiler.on_error()
|
|
3088
3109
|
self.calculate_and_show_tokens_and_cost(messages, completion)
|
|
3089
3110
|
raise
|
|
3090
|
-
except KeyboardInterrupt as kbi:
|
|
3111
|
+
except (KeyboardInterrupt, asyncio.CancelledError) as kbi:
|
|
3091
3112
|
self.keyboard_interrupt()
|
|
3092
3113
|
raise kbi
|
|
3093
3114
|
finally:
|
|
@@ -3496,10 +3517,13 @@ class Coder:
|
|
|
3496
3517
|
if completion and hasattr(completion, "usage") and completion.usage is not None:
|
|
3497
3518
|
prompt_tokens = completion.usage.prompt_tokens
|
|
3498
3519
|
completion_tokens = completion.usage.completion_tokens
|
|
3499
|
-
cache_hit_tokens =
|
|
3500
|
-
completion.usage, "
|
|
3520
|
+
cache_hit_tokens = (
|
|
3521
|
+
getattr(completion.usage, "prompt_cache_hit_tokens", 0)
|
|
3522
|
+
or getattr(completion.usage, "cache_read_input_tokens", 0)
|
|
3523
|
+
or 0
|
|
3501
3524
|
)
|
|
3502
|
-
cache_write_tokens = getattr(completion.usage, "cache_creation_input_tokens", 0)
|
|
3525
|
+
cache_write_tokens = getattr(completion.usage, "cache_creation_input_tokens", 0) or 0
|
|
3526
|
+
self.message_cached_tokens += cache_hit_tokens
|
|
3503
3527
|
|
|
3504
3528
|
if hasattr(completion.usage, "cache_read_input_tokens") or hasattr(
|
|
3505
3529
|
completion.usage, "cache_creation_input_tokens"
|
|
@@ -3532,8 +3556,22 @@ class Coder:
|
|
|
3532
3556
|
tokens_report, self.message_tokens_sent, self.message_tokens_received
|
|
3533
3557
|
)
|
|
3534
3558
|
|
|
3559
|
+
total_combined_tokens = (
|
|
3560
|
+
self.total_tokens_sent
|
|
3561
|
+
+ self.total_tokens_received
|
|
3562
|
+
+ self.message_tokens_sent
|
|
3563
|
+
+ self.message_tokens_received
|
|
3564
|
+
)
|
|
3565
|
+
total_combined_cached = self.total_cached_tokens + self.message_cached_tokens
|
|
3566
|
+
|
|
3567
|
+
total_stats = f"{format_tokens(total_combined_tokens)}"
|
|
3568
|
+
if total_combined_cached:
|
|
3569
|
+
total_stats += f"/{format_tokens(total_combined_cached)}"
|
|
3570
|
+
|
|
3571
|
+
total_stats += " ↑↓"
|
|
3572
|
+
|
|
3535
3573
|
if not self.get_active_model().info.get("input_cost_per_token"):
|
|
3536
|
-
self.usage_report = tokens_report
|
|
3574
|
+
self.usage_report = tokens_report + "\n" + total_stats
|
|
3537
3575
|
return
|
|
3538
3576
|
|
|
3539
3577
|
try:
|
|
@@ -3550,11 +3588,8 @@ class Coder:
|
|
|
3550
3588
|
self.total_cost += cost
|
|
3551
3589
|
self.message_cost += cost
|
|
3552
3590
|
|
|
3553
|
-
total_combined_tokens = (
|
|
3554
|
-
self.total_tokens_sent + self.total_tokens_received + prompt_tokens + completion_tokens
|
|
3555
|
-
)
|
|
3556
3591
|
cost_report = (
|
|
3557
|
-
f"${self.format_cost(self.message_cost)} • {
|
|
3592
|
+
f"${self.format_cost(self.message_cost)} • {total_stats}"
|
|
3558
3593
|
f" ${self.format_cost(self.total_cost)}"
|
|
3559
3594
|
)
|
|
3560
3595
|
|
|
@@ -3612,6 +3647,7 @@ class Coder:
|
|
|
3612
3647
|
|
|
3613
3648
|
self.total_tokens_sent += self.message_tokens_sent
|
|
3614
3649
|
self.total_tokens_received += self.message_tokens_received
|
|
3650
|
+
self.total_cached_tokens += self.message_cached_tokens
|
|
3615
3651
|
|
|
3616
3652
|
if self.tui and self.tui():
|
|
3617
3653
|
self.tui().update_cost(self.usage_report.replace("\n", " "))
|
|
@@ -3622,6 +3658,7 @@ class Coder:
|
|
|
3622
3658
|
self.message_cost = 0.0
|
|
3623
3659
|
self.message_tokens_sent = 0
|
|
3624
3660
|
self.message_tokens_received = 0
|
|
3661
|
+
self.message_cached_tokens = 0
|
|
3625
3662
|
|
|
3626
3663
|
def get_multi_response_content_in_progress(self, final=False):
|
|
3627
3664
|
cur = self.multi_response_content or ""
|
|
@@ -3723,7 +3760,7 @@ class Coder:
|
|
|
3723
3760
|
self.check_for_dirty_commit(path)
|
|
3724
3761
|
return True
|
|
3725
3762
|
|
|
3726
|
-
if self.repo and self.repo.git_ignored_file(path):
|
|
3763
|
+
if self.repo and self.repo.git_ignored_file(path) and not self.add_gitignore_files:
|
|
3727
3764
|
self.io.tool_warning(f"Skipping edits to {path} that matches gitignore spec.")
|
|
3728
3765
|
return
|
|
3729
3766
|
|
|
@@ -3742,7 +3779,8 @@ class Coder:
|
|
|
3742
3779
|
# actually already part of the repo.
|
|
3743
3780
|
# But let's only add if we need to, just to be safe.
|
|
3744
3781
|
if need_to_add:
|
|
3745
|
-
self.
|
|
3782
|
+
if not (self.add_gitignore_files and self.repo.git_ignored_file(path)):
|
|
3783
|
+
self.repo.repo.git.add(full_path)
|
|
3746
3784
|
|
|
3747
3785
|
self.abs_fnames.add(full_path)
|
|
3748
3786
|
self.check_added_files()
|
|
@@ -3756,7 +3794,8 @@ class Coder:
|
|
|
3756
3794
|
return
|
|
3757
3795
|
|
|
3758
3796
|
if need_to_add:
|
|
3759
|
-
self.
|
|
3797
|
+
if not (self.add_gitignore_files and self.repo.git_ignored_file(path)):
|
|
3798
|
+
self.repo.repo.git.add(full_path)
|
|
3760
3799
|
|
|
3761
3800
|
self.abs_fnames.add(full_path)
|
|
3762
3801
|
self.check_added_files()
|
|
@@ -4003,7 +4042,10 @@ class Coder:
|
|
|
4003
4042
|
return edits
|
|
4004
4043
|
|
|
4005
4044
|
def local_agent_folder(self, path):
|
|
4006
|
-
os.makedirs(
|
|
4045
|
+
os.makedirs(
|
|
4046
|
+
self.abs_root_path(f".cecli/agents/{GLOBAL_DATE}/{self.uuid}"),
|
|
4047
|
+
exist_ok=True,
|
|
4048
|
+
)
|
|
4007
4049
|
|
|
4008
4050
|
stripped = path.lstrip("/")
|
|
4009
4051
|
return f".cecli/agents/{GLOBAL_DATE}/{self.uuid}/{stripped}"
|
|
@@ -25,14 +25,17 @@ from .diff import DiffCommand
|
|
|
25
25
|
from .drop import DropCommand
|
|
26
26
|
from .editor import EditCommand, EditorCommand
|
|
27
27
|
from .editor_model import EditorModelCommand
|
|
28
|
+
from .exclude_skill import ExcludeSkillCommand
|
|
28
29
|
from .exit import ExitCommand
|
|
29
30
|
from .git import GitCommand
|
|
30
31
|
from .hashline import HashlineCommand
|
|
31
32
|
from .help import HelpCommand
|
|
32
33
|
from .history_search import HistorySearchCommand
|
|
33
34
|
from .hooks import HooksCommand
|
|
35
|
+
from .include_skill import IncludeSkillCommand
|
|
34
36
|
from .lint import LintCommand
|
|
35
37
|
from .list_sessions import ListSessionsCommand
|
|
38
|
+
from .list_skills import ListSkillsCommand
|
|
36
39
|
from .load import LoadCommand
|
|
37
40
|
from .load_hook import LoadHookCommand
|
|
38
41
|
from .load_mcp import LoadMcpCommand
|
|
@@ -102,14 +105,17 @@ CommandRegistry.register(DropCommand)
|
|
|
102
105
|
CommandRegistry.register(EditCommand)
|
|
103
106
|
CommandRegistry.register(EditorCommand)
|
|
104
107
|
CommandRegistry.register(EditorModelCommand)
|
|
108
|
+
CommandRegistry.register(ExcludeSkillCommand)
|
|
105
109
|
CommandRegistry.register(ExitCommand)
|
|
106
110
|
CommandRegistry.register(GitCommand)
|
|
107
111
|
CommandRegistry.register(HashlineCommand)
|
|
108
112
|
CommandRegistry.register(HelpCommand)
|
|
109
113
|
CommandRegistry.register(HistorySearchCommand)
|
|
110
114
|
CommandRegistry.register(HooksCommand)
|
|
115
|
+
CommandRegistry.register(IncludeSkillCommand)
|
|
111
116
|
CommandRegistry.register(LintCommand)
|
|
112
117
|
CommandRegistry.register(ListSessionsCommand)
|
|
118
|
+
CommandRegistry.register(ListSkillsCommand)
|
|
113
119
|
CommandRegistry.register(LoadCommand)
|
|
114
120
|
CommandRegistry.register(LoadHookCommand)
|
|
115
121
|
CommandRegistry.register(LoadMcpCommand)
|
|
@@ -172,6 +178,7 @@ __all__ = [
|
|
|
172
178
|
"EditCommand",
|
|
173
179
|
"EditorCommand",
|
|
174
180
|
"EditorModelCommand",
|
|
181
|
+
"ExcludeSkillCommand",
|
|
175
182
|
"ExitCommand",
|
|
176
183
|
"expand_subdir",
|
|
177
184
|
"format_command_result",
|
|
@@ -182,8 +189,10 @@ __all__ = [
|
|
|
182
189
|
"HelpCommand",
|
|
183
190
|
"HistorySearchCommand",
|
|
184
191
|
"HookCommand",
|
|
192
|
+
"IncludeSkillCommand",
|
|
185
193
|
"LintCommand",
|
|
186
194
|
"ListSessionsCommand",
|
|
195
|
+
"ListSkillsCommand",
|
|
187
196
|
"LoadCommand",
|
|
188
197
|
"LoadHookCommand",
|
|
189
198
|
"LoadMcpCommand",
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
from typing import List
|
|
2
|
+
|
|
3
|
+
from cecli.commands.utils.base_command import BaseCommand
|
|
4
|
+
from cecli.commands.utils.helpers import format_command_result
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ExcludeSkillCommand(BaseCommand):
|
|
8
|
+
NORM_NAME = "exclude-skill"
|
|
9
|
+
DESCRIPTION = "Exclude a skill by name (agent mode only)"
|
|
10
|
+
|
|
11
|
+
@classmethod
|
|
12
|
+
async def execute(cls, io, coder, args, **kwargs):
|
|
13
|
+
"""Execute the exclude-skill command with given parameters."""
|
|
14
|
+
if not args.strip():
|
|
15
|
+
io.tool_output("Usage: /exclude-skill <skill-name>")
|
|
16
|
+
return format_command_result(io, "exclude-skill", "Usage: /exclude-skill <skill-name>")
|
|
17
|
+
|
|
18
|
+
skill_names = args.strip().split()
|
|
19
|
+
|
|
20
|
+
# Check if we're in agent mode
|
|
21
|
+
if not hasattr(coder, "edit_format") or coder.edit_format != "agent":
|
|
22
|
+
io.tool_output("Skill exclusion is only available in agent mode.")
|
|
23
|
+
return format_command_result(
|
|
24
|
+
io, "exclude-skill", "Skill exclusion is only available in agent mode"
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
# Check if skills_manager is available
|
|
28
|
+
if not hasattr(coder, "skills_manager") or coder.skills_manager is None:
|
|
29
|
+
io.tool_output("Skills manager is not initialized. Skills may not be configured.")
|
|
30
|
+
# Check if skills directories are configured
|
|
31
|
+
if hasattr(coder, "skills_directory_paths") and not coder.skills_directory_paths:
|
|
32
|
+
io.tool_output(
|
|
33
|
+
"No skills directories configured. Use --skills-paths to configure skill"
|
|
34
|
+
" directories."
|
|
35
|
+
)
|
|
36
|
+
return format_command_result(io, "exclude-skill", "Skills manager is not initialized")
|
|
37
|
+
|
|
38
|
+
results = []
|
|
39
|
+
for skill_name in skill_names:
|
|
40
|
+
# Use the instance method on skills_manager
|
|
41
|
+
result = coder.skills_manager.exclude_skill(skill_name)
|
|
42
|
+
results.append(result)
|
|
43
|
+
|
|
44
|
+
return format_command_result(io, "exclude-skill", "\n".join(results))
|
|
45
|
+
|
|
46
|
+
@classmethod
|
|
47
|
+
def get_completions(cls, io, coder, args) -> List[str]:
|
|
48
|
+
"""Get completion options for exclude-skill command."""
|
|
49
|
+
if not hasattr(coder, "skills_manager") or coder.skills_manager is None:
|
|
50
|
+
return []
|
|
51
|
+
|
|
52
|
+
try:
|
|
53
|
+
skills = coder.skills_manager.find_skills()
|
|
54
|
+
return [skill.name for skill in skills]
|
|
55
|
+
except Exception:
|
|
56
|
+
return []
|
|
57
|
+
|
|
58
|
+
@classmethod
|
|
59
|
+
def get_help(cls) -> str:
|
|
60
|
+
"""Get help text for the exclude-skill command."""
|
|
61
|
+
help_text = super().get_help()
|
|
62
|
+
help_text += "\nUsage:\n"
|
|
63
|
+
help_text += " /exclude-skill <skill-name>... # Exclude one or more skills by name\n"
|
|
64
|
+
help_text += "\nExamples:\n"
|
|
65
|
+
help_text += " /exclude-skill pdf # Exclude (blacklist) the PDF skill\n"
|
|
66
|
+
help_text += " /exclude-skill web pdf # Exclude both web and PDF skills\n"
|
|
67
|
+
help_text += (
|
|
68
|
+
"\nThis command excludes one or more skills by name, adding them to the blacklist. "
|
|
69
|
+
"Skills are only available in agent mode.\n"
|
|
70
|
+
)
|
|
71
|
+
help_text += "Excluded skills will be hidden from discovery and unavailable for loading.\n"
|
|
72
|
+
return help_text
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
from typing import List
|
|
2
|
+
|
|
3
|
+
from cecli.commands.utils.base_command import BaseCommand
|
|
4
|
+
from cecli.commands.utils.helpers import format_command_result
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class IncludeSkillCommand(BaseCommand):
|
|
8
|
+
NORM_NAME = "include-skill"
|
|
9
|
+
DESCRIPTION = "Include a skill by name (agent mode only)"
|
|
10
|
+
|
|
11
|
+
@classmethod
|
|
12
|
+
async def execute(cls, io, coder, args, **kwargs):
|
|
13
|
+
"""Execute the include-skill command with given parameters."""
|
|
14
|
+
if not args.strip():
|
|
15
|
+
io.tool_output("Usage: /include-skill <skill-name>")
|
|
16
|
+
return format_command_result(io, "include-skill", "Usage: /include-skill <skill-name>")
|
|
17
|
+
|
|
18
|
+
skill_names = args.strip().split()
|
|
19
|
+
|
|
20
|
+
# Check if we're in agent mode
|
|
21
|
+
if not hasattr(coder, "edit_format") or coder.edit_format != "agent":
|
|
22
|
+
io.tool_output("Skill inclusion is only available in agent mode.")
|
|
23
|
+
return format_command_result(
|
|
24
|
+
io, "include-skill", "Skill inclusion is only available in agent mode"
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
# Check if skills_manager is available
|
|
28
|
+
if not hasattr(coder, "skills_manager") or coder.skills_manager is None:
|
|
29
|
+
io.tool_output("Skills manager is not initialized. Skills may not be configured.")
|
|
30
|
+
# Check if skills directories are configured
|
|
31
|
+
if hasattr(coder, "skills_directory_paths") and not coder.skills_directory_paths:
|
|
32
|
+
io.tool_output(
|
|
33
|
+
"No skills directories configured. Use --skills-paths to configure skill"
|
|
34
|
+
" directories."
|
|
35
|
+
)
|
|
36
|
+
return format_command_result(io, "include-skill", "Skills manager is not initialized")
|
|
37
|
+
|
|
38
|
+
results = []
|
|
39
|
+
for skill_name in skill_names:
|
|
40
|
+
# Use the instance method on skills_manager
|
|
41
|
+
result = coder.skills_manager.include_skill(skill_name)
|
|
42
|
+
results.append(result)
|
|
43
|
+
|
|
44
|
+
return format_command_result(io, "include-skill", "\n".join(results))
|
|
45
|
+
|
|
46
|
+
@classmethod
|
|
47
|
+
def get_completions(cls, io, coder, args) -> List[str]:
|
|
48
|
+
"""Get completion options for include-skill command."""
|
|
49
|
+
if not hasattr(coder, "skills_manager") or coder.skills_manager is None:
|
|
50
|
+
return []
|
|
51
|
+
|
|
52
|
+
try:
|
|
53
|
+
skills = coder.skills_manager.find_skills()
|
|
54
|
+
return [skill.name for skill in skills]
|
|
55
|
+
except Exception:
|
|
56
|
+
return []
|
|
57
|
+
|
|
58
|
+
@classmethod
|
|
59
|
+
def get_help(cls) -> str:
|
|
60
|
+
"""Get help text for the include-skill command."""
|
|
61
|
+
help_text = super().get_help()
|
|
62
|
+
help_text += "\nUsage:\n"
|
|
63
|
+
help_text += " /include-skill <skill-name>... # Include one or more skills by name\n"
|
|
64
|
+
help_text += "\nExamples:\n"
|
|
65
|
+
help_text += " /include-skill pdf # Include (whitelist) the PDF skill\n"
|
|
66
|
+
help_text += " /include-skill web pdf # Include both web and PDF skills\n"
|
|
67
|
+
help_text += (
|
|
68
|
+
"\nThis command includes one or more skills by name, adding them to the whitelist. "
|
|
69
|
+
"Skills are only available in agent mode.\n"
|
|
70
|
+
)
|
|
71
|
+
help_text += "When a skill is included, only whitelisted skills will be discoverable.\n"
|
|
72
|
+
return help_text
|