cecli-dev 0.99.8__tar.gz → 0.99.9__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.9}/PKG-INFO +1 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/__init__.py +1 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/_version.py +3 -3
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/agent_coder.py +2 -6
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/base_coder.py +11 -4
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/load_session.py +1 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/conversation/integration.py +3 -3
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/conversation/manager.py +28 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/main.py +1 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/agent.yml +5 -2
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/repo.py +23 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/sessions.py +83 -3
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/edit_text.py +9 -9
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/get_lines.py +73 -61
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/utils/helpers.py +5 -5
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tui/app.py +6 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli_dev.egg-info/PKG-INFO +1 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli_dev.egg-info/SOURCES.txt +2 -1
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_sessions.py +112 -1
- cecli_dev-0.99.9/tests/tui/test_app.py +37 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/.dockerignore +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/.flake8 +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/.gitattributes +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/.github/workflows/check_pypi_version.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/.github/workflows/docker-build-test.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/.github/workflows/docker-release.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/.github/workflows/issues.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/.github/workflows/pages.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/.github/workflows/pre-commit.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/.github/workflows/release.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/.github/workflows/ubuntu-tests.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/.github/workflows/windows-tests.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/.github/workflows/windows_check_pypi_version.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/.gitignore +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/.pre-commit-config.yaml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/CHANGELOG.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/CNAME +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/CONTRIBUTING.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/HISTORY.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/LICENSE.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/MANIFEST.in +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/README.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/Dockerfile +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/README.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/benchmark.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/benchmark_classic.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/clone-exercism.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/cpp-test.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/docker.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/docker_build.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/install-docker-ubuntu.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/npm-test.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/over_time.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/plot.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/plots.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/problem_stats.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/prompts.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/refactor_tools.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/rsync.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/rungrid.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/swe-bench-lite.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/swe-bench.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/swe_bench.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/test_benchmark.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/variations.1.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/variations.2.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/variations.3.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/benchmark/variations.4.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/__main__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/args.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/args_formatter.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/change_tracker.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/architect_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/ask_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/chat_chunks.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/context_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/copypaste_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/editblock_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/editblock_fenced_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/editblock_func_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/editor_diff_fenced_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/editor_editblock_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/editor_whole_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/hashline_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/help_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/patch_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/search_replace.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/shell.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/single_wholefile_func_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/udiff_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/udiff_simple.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/wholefile_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/coders/wholefile_func_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/add.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/agent.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/agent_model.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/architect.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/ask.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/chat_mode.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/clear.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/code.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/command_prefix.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/commit.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/compact.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/context.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/context_blocks.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/context_management.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/copy.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/copy_context.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/core.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/diff.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/drop.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/editor.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/editor_model.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/exit.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/git.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/hashline.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/help.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/history_search.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/hooks.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/lint.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/list_sessions.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/load.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/load_hook.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/load_mcp.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/load_skill.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/ls.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/map.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/map_refresh.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/model.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/models.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/multiline_mode.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/paste.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/quit.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/read_only.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/read_only_stub.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/reasoning_effort.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/remove_hook.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/remove_mcp.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/remove_skill.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/report.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/reset.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/rules.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/run.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/save.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/save_session.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/settings.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/terminal_data/linux.keytab +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/terminal_setup.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/test.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/think_tokens.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/tokens.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/undo.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/utils/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/utils/base_command.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/utils/helpers.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/utils/registry.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/utils/save_load_manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/voice.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/weak_model.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/web.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/commands/workspace.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/deprecated_args.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/diffs.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/dump.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/editor.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/exceptions.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/format_settings.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/help.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/help_pats.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/background_commands.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/command_parser.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/conversation/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/conversation/base_message.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/conversation/files.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/conversation/service.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/conversation/tags.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/conversation/utils.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/copypaste.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/coroutines.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/file_searcher.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/grep_ast/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/grep_ast/dump.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/grep_ast/grep_ast.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/grep_ast/main.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/grep_ast/parsers.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/grep_ast/tsl.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/hashline.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/hashpos/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/hashpos/hashpos.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/leak_detect.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/model_providers.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/monorepo/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/monorepo/config.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/monorepo/project.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/monorepo/workspace.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/monorepo/worktree.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/nested.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/observations/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/observations/manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/plugin_manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/profiler.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/requests.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/responses.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/similarity.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/helpers/skills.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/history.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/hooks/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/hooks/base.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/hooks/integration.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/hooks/manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/hooks/registry.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/hooks/types.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/interruptible_input.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/io.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/linter.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/llm.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/mcp/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/mcp/manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/mcp/oauth.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/mcp/server.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/mcp/utils.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/mdstream.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/models.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/onboarding.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/architect.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/ask.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/base.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/context.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/copypaste.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/editblock.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/editblock_fenced.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/editblock_func.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/editor_diff_fenced.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/editor_editblock.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/editor_whole.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/hashline.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/help.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/patch.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/single_wholefile_func.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/udiff.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/udiff_simple.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/utils/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/utils/registry.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/utils/system.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/wholefile.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/prompts/wholefile_func.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/README.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/reasoning_tags.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/repomap.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/report.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/resources/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/resources/model-metadata.json +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/resources/model-settings.yml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/resources/providers.json +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/run_cmd.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/scrape.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/sendchat.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/special.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/command.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/command_interactive.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/context_manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/explore_code.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/finished.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/git_branch.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/git_diff.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/git_log.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/git_remote.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/git_show.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/git_status.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/grep.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/load_skill.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/ls.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/remove_skill.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/thinking.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/undo_change.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/update_todo_list.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/utils/base_tool.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/utils/output.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tools/utils/registry.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tui/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tui/io.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tui/styles.tcss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tui/widgets/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tui/widgets/completion_bar.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tui/widgets/file_list.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tui/widgets/footer.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tui/widgets/input_area.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tui/widgets/input_container.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tui/widgets/key_hints.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tui/widgets/output.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tui/widgets/status_bar.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/tui/worker.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/urls.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/utils.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/versioncheck.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/voice.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/waiting.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/watch.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/watch_prompts.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/Gemfile +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_includes/blame.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_includes/get-started.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_includes/help-tip.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_includes/help.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_includes/install.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_includes/keys.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_includes/model-warnings.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_includes/multi-line.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_includes/python-m-aider.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_includes/recording.css +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_includes/recording.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_includes/works-best.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_sass/_features.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_sass/_footer.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_sass/_hero.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_sass/_info.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_sass/_layout.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_sass/_reset.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_sass/_testimonials.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_sass/_typography.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_sass/_variables.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_sass/custom/custom.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/_sass/global-overrides.scss +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config/adv-model-settings.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config/agent-mode.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config/aider_conf.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config/api-keys.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config/custom-commands.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config/custom-system-prompts.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config/dotenv.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config/editor.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config/hooks.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config/mcp.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config/model-aliases.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config/options.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config/reasoning.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config/security.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config/skills.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config/tui.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config/workspaces.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/config.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/faq.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/git.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/index.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/install/docker.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/install/optional.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/install.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/languages.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/legal/contributor-agreement.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/legal/privacy.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms/anthropic.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms/azure.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms/bedrock.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms/cohere.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms/deepseek.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms/gemini.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms/github.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms/groq.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms/lm-studio.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms/ollama.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms/openai-compat.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms/openai.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms/openrouter.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms/other.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms/vertex.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms/warnings.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms/xai.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/llms.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/more/analytics.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/more/edit-formats.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/more/infinite-output.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/more-info.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/repomap.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/scripting.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/troubleshooting/imports.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/troubleshooting/support.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/troubleshooting/warnings.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/troubleshooting.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/usage/commands.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/usage/conventions.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/usage/copypaste.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/usage/images-urls.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/usage/lint-test.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/usage/modes.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/usage/not-code.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/usage/notifications.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/usage/sessions.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/usage/tips.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/usage/voice.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/usage/watch.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/docs/usage.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli/website/share/index.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli_dev.egg-info/dependency_links.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli_dev.egg-info/entry_points.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli_dev.egg-info/requires.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/cecli_dev.egg-info/top_level.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/docker/Dockerfile +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/pyproject.toml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/pytest.ini +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/requirements/common-constraints.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/requirements/requirements-dev.in +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/requirements/requirements-dev.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/requirements/requirements-help.in +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/requirements/requirements-help.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/requirements/requirements-playwright.in +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/requirements/requirements-playwright.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/requirements/requirements.in +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/requirements/tree-sitter.in +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/requirements.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/30k-image.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/Dockerfile.jekyll +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/blame.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/clean_metadata.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/cost_analyzer.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/dl_icons.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/filter-chat-mode.js +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/generate_providers.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/get_contributor_list.js +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/get_hashline.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/history_prompts.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/homepage.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/issues.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/jekyll_build.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/jekyll_run.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/logo_svg.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/pip-compile.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/recording_audio.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/redact-cast.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/rename_to_cecli.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/tmux_record.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/tsl_pack_langs.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/update-blame.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/update-docs.sh +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/update-history.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/versionbump.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/scripts/yank-old-versions.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/setup.cfg +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/shim.pyproject.toml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_aws_credentials.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_background_commands.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_commands.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_custom_commands.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_deprecated.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_editblock.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_editor.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_exceptions.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_find_or_blocks.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_hashline.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_history.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_io.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_linter.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_main.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_model_info_manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_model_provider_manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_models.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_onboarding.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_plugin_manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_prompts.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_reasoning.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_repo.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_repomap.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_run_cmd.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_sanity_check_repo.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_scripting.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_sendchat.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_skills.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_special.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_ssl_verification.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_udiff.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_urls.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_voice.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_watch.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/basic/test_wholefile.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/coders/test_copypaste_coder.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/conftest.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/conversations/test_conversation_integration.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/conversations/test_conversation_system.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/chat-history.md +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/arduino/test.ino +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/c/test.c +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/chatito/test.chatito +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/clojure/test.clj +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/cpp/test.cpp +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/csharp/test.cs +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/d/test.d +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/dart/test.dart +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/elisp/test.el +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/elixir/test.ex +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/elm/test.elm +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/gleam/test.gleam +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/go/test.go +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/haskell/test.hs +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/hcl/test.tf +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/java/test.java +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/javascript/test.js +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/kotlin/test.kt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/lua/test.lua +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/matlab/test.m +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/ocaml/test.ml +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/php/test.php +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/pony/test.pony +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/properties/test.properties +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/python/test.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/ql/test.ql +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/r/test.r +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/racket/test.rkt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/ruby/test.rb +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/rust/test.rs +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/scala/test.scala +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/solidity/test.sol +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/swift/test.swift +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/tsx/test.tsx +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/typescript/test.ts +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/udev/test.rules +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/languages/zig/test.zig +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/sample-code-base/sample.js +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/sample-code-base/sample.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/watch.js +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/watch.lisp +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/watch.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/fixtures/watch_question.js +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/help/test_help.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/helpers/monorepo/test_config.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/helpers/monorepo/test_config_active.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/helpers/monorepo/test_workspace.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/helpers/observations/test_observation_manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/hooks/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/hooks/test_base.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/hooks/test_manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/hooks/test_registry.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/mcp/__init__.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/mcp/test_manager.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/scrape/test_playwright_disable.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/scrape/test_scrape.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/tools/test_get_lines.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/tools/test_git_branch.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/tools/test_git_diff.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/tools/test_grep.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/tests/tools/test_insert_block.py +0 -0
- {cecli_dev-0.99.8 → cecli_dev-0.99.9}/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.9'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 99, 9)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g7edfde9ea'
|
|
@@ -618,9 +618,7 @@ class AgentCoder(Coder):
|
|
|
618
618
|
total_file_tokens += tokens
|
|
619
619
|
editable_tokens += tokens
|
|
620
620
|
size_indicator = (
|
|
621
|
-
"
|
|
622
|
-
if tokens > 5000
|
|
623
|
-
else "🟡 Medium" if tokens > 1000 else "🟢 Small"
|
|
621
|
+
"Large" if tokens > 5000 else "Medium" if tokens > 1000 else "Small"
|
|
624
622
|
)
|
|
625
623
|
editable_files.append(
|
|
626
624
|
f"- {rel_fname}: {tokens:,} tokens ({size_indicator})"
|
|
@@ -642,9 +640,7 @@ class AgentCoder(Coder):
|
|
|
642
640
|
total_file_tokens += tokens
|
|
643
641
|
readonly_tokens += tokens
|
|
644
642
|
size_indicator = (
|
|
645
|
-
"
|
|
646
|
-
if tokens > 5000
|
|
647
|
-
else "🟡 Medium" if tokens > 1000 else "🟢 Small"
|
|
643
|
+
"Large" if tokens > 5000 else "Medium" if tokens > 1000 else "Small"
|
|
648
644
|
)
|
|
649
645
|
readonly_files.append(
|
|
650
646
|
f"- {rel_fname}: {tokens:,} tokens ({size_indicator})"
|
|
@@ -2178,6 +2178,8 @@ class Coder:
|
|
|
2178
2178
|
# Notify IO that LLM processing is starting
|
|
2179
2179
|
self.io.llm_started()
|
|
2180
2180
|
|
|
2181
|
+
ConversationService.get_manager(self).flush_queue()
|
|
2182
|
+
|
|
2181
2183
|
if inp:
|
|
2182
2184
|
# Make sure current coder actually has control of conversation system
|
|
2183
2185
|
ConversationService.get_chunks(self).initialize_conversation_system()
|
|
@@ -3723,7 +3725,7 @@ class Coder:
|
|
|
3723
3725
|
self.check_for_dirty_commit(path)
|
|
3724
3726
|
return True
|
|
3725
3727
|
|
|
3726
|
-
if self.repo and self.repo.git_ignored_file(path):
|
|
3728
|
+
if self.repo and self.repo.git_ignored_file(path) and not self.add_gitignore_files:
|
|
3727
3729
|
self.io.tool_warning(f"Skipping edits to {path} that matches gitignore spec.")
|
|
3728
3730
|
return
|
|
3729
3731
|
|
|
@@ -3742,7 +3744,8 @@ class Coder:
|
|
|
3742
3744
|
# actually already part of the repo.
|
|
3743
3745
|
# But let's only add if we need to, just to be safe.
|
|
3744
3746
|
if need_to_add:
|
|
3745
|
-
self.
|
|
3747
|
+
if not (self.add_gitignore_files and self.repo.git_ignored_file(path)):
|
|
3748
|
+
self.repo.repo.git.add(full_path)
|
|
3746
3749
|
|
|
3747
3750
|
self.abs_fnames.add(full_path)
|
|
3748
3751
|
self.check_added_files()
|
|
@@ -3756,7 +3759,8 @@ class Coder:
|
|
|
3756
3759
|
return
|
|
3757
3760
|
|
|
3758
3761
|
if need_to_add:
|
|
3759
|
-
self.
|
|
3762
|
+
if not (self.add_gitignore_files and self.repo.git_ignored_file(path)):
|
|
3763
|
+
self.repo.repo.git.add(full_path)
|
|
3760
3764
|
|
|
3761
3765
|
self.abs_fnames.add(full_path)
|
|
3762
3766
|
self.check_added_files()
|
|
@@ -4003,7 +4007,10 @@ class Coder:
|
|
|
4003
4007
|
return edits
|
|
4004
4008
|
|
|
4005
4009
|
def local_agent_folder(self, path):
|
|
4006
|
-
os.makedirs(
|
|
4010
|
+
os.makedirs(
|
|
4011
|
+
self.abs_root_path(f".cecli/agents/{GLOBAL_DATE}/{self.uuid}"),
|
|
4012
|
+
exist_ok=True,
|
|
4013
|
+
)
|
|
4007
4014
|
|
|
4008
4015
|
stripped = path.lstrip("/")
|
|
4009
4016
|
return f".cecli/agents/{GLOBAL_DATE}/{self.uuid}/{stripped}"
|
|
@@ -18,7 +18,7 @@ class LoadSessionCommand(BaseCommand):
|
|
|
18
18
|
from cecli import sessions
|
|
19
19
|
|
|
20
20
|
session_manager = sessions.SessionManager(coder, io)
|
|
21
|
-
session_manager.load_session(args.strip())
|
|
21
|
+
await session_manager.load_session(args.strip())
|
|
22
22
|
|
|
23
23
|
return format_command_result(io, "load-session", f"Loaded session: {args.strip()}")
|
|
24
24
|
|
|
@@ -446,7 +446,7 @@ class ConversationChunks:
|
|
|
446
446
|
dict(role="user", content=repo_content),
|
|
447
447
|
dict(
|
|
448
448
|
role="assistant",
|
|
449
|
-
content="
|
|
449
|
+
content="Thank you, these files will help with navigating the codebase.",
|
|
450
450
|
),
|
|
451
451
|
]
|
|
452
452
|
|
|
@@ -781,14 +781,14 @@ class ConversationChunks:
|
|
|
781
781
|
}
|
|
782
782
|
|
|
783
783
|
# Add to conversation manager
|
|
784
|
-
ConversationService.get_manager(coder).
|
|
784
|
+
ConversationService.get_manager(coder).queue_message(
|
|
785
785
|
message_dict=user_msg,
|
|
786
786
|
tag=MessageTag.FILE_CONTEXTS,
|
|
787
787
|
hash_key=("file_context_user", file_path),
|
|
788
788
|
force=True,
|
|
789
789
|
)
|
|
790
790
|
|
|
791
|
-
ConversationService.get_manager(coder).
|
|
791
|
+
ConversationService.get_manager(coder).queue_message(
|
|
792
792
|
message_dict=assistant_msg,
|
|
793
793
|
tag=MessageTag.FILE_CONTEXTS,
|
|
794
794
|
hash_key=("file_context_assistant", file_path),
|
|
@@ -25,6 +25,7 @@ class ConversationManager:
|
|
|
25
25
|
self._tag_cache: Dict[str, List[Dict[str, Any]]] = {}
|
|
26
26
|
self._ALL_MESSAGES_CACHE_KEY = "__all__"
|
|
27
27
|
self.DEFAULT_TAG_PROMOTION_VALUE: int = 999
|
|
28
|
+
self._queue: List[Dict[str, Any]] = []
|
|
28
29
|
|
|
29
30
|
@classmethod
|
|
30
31
|
def get_instance(cls, coder) -> "ConversationManager":
|
|
@@ -193,6 +194,33 @@ class ConversationManager:
|
|
|
193
194
|
self._tag_cache.pop(self._ALL_MESSAGES_CACHE_KEY, None)
|
|
194
195
|
return message
|
|
195
196
|
|
|
197
|
+
def queue_message(self, **kwargs) -> None:
|
|
198
|
+
"""
|
|
199
|
+
Queue an add_message() call for later insertion.
|
|
200
|
+
|
|
201
|
+
Accepts the same keyword arguments as add_message()
|
|
202
|
+
and stores them in an internal queue to be flushed
|
|
203
|
+
later via flush_queue().
|
|
204
|
+
"""
|
|
205
|
+
self._queue.append(kwargs)
|
|
206
|
+
|
|
207
|
+
def flush_queue(self) -> List[Any]:
|
|
208
|
+
"""
|
|
209
|
+
Flush all queued add_message() calls.
|
|
210
|
+
|
|
211
|
+
Calls add_message() for each set of kwargs in the
|
|
212
|
+
internal queue, then clears the queue.
|
|
213
|
+
|
|
214
|
+
Returns:
|
|
215
|
+
List of BaseMessage instances returned by add_message()
|
|
216
|
+
"""
|
|
217
|
+
results = []
|
|
218
|
+
while self._queue:
|
|
219
|
+
kwargs = self._queue.pop(0)
|
|
220
|
+
result = self.add_message(**kwargs)
|
|
221
|
+
results.append(result)
|
|
222
|
+
return results
|
|
223
|
+
|
|
196
224
|
def base_sort(self, messages: List[BaseMessage]) -> List[BaseMessage]:
|
|
197
225
|
"""
|
|
198
226
|
Sorts messages by effective priority (promotion if mark_for_demotion has not elapsed yet), then timestamp.
|
|
@@ -1198,7 +1198,7 @@ async def main_async(argv=None, input=None, output=None, force_git_root=None, re
|
|
|
1198
1198
|
from cecli.sessions import SessionManager
|
|
1199
1199
|
|
|
1200
1200
|
session_manager = SessionManager(coder, io)
|
|
1201
|
-
session_manager.load_session(
|
|
1201
|
+
await session_manager.load_session(
|
|
1202
1202
|
args.auto_save_session_name if args.auto_save_session_name else "auto-save"
|
|
1203
1203
|
)
|
|
1204
1204
|
except Exception:
|
|
@@ -14,6 +14,10 @@ files_no_full_files_with_repo_map: |
|
|
|
14
14
|
I have a repository map. I will use it to target my navigation and add relevant files to the context.
|
|
15
15
|
</context>
|
|
16
16
|
|
|
17
|
+
repo_content_prefix: |
|
|
18
|
+
Here are summaries of some files present in my git repository.
|
|
19
|
+
These files should be helpful for navigating the codebase.
|
|
20
|
+
|
|
17
21
|
main_system: |
|
|
18
22
|
<context name="role_and_directives">
|
|
19
23
|
## Core Directives
|
|
@@ -34,7 +38,7 @@ main_system: |
|
|
|
34
38
|
uXdn::def example_method():
|
|
35
39
|
WAR5:: return "example"
|
|
36
40
|
vwkS::
|
|
37
|
-
|
|
41
|
+
</context>
|
|
38
42
|
|
|
39
43
|
<context name="workflow_and_tool_usage">
|
|
40
44
|
## Core Workflow
|
|
@@ -60,7 +64,6 @@ system_reminder: |
|
|
|
60
64
|
## Operational Rules
|
|
61
65
|
- **Scope**: No unrequested refactors. Edit files incrementally; avoid full-file rewrites.
|
|
62
66
|
- **Hygiene**: Use `ContextManager`/`RemoveSkill` to evict unneeded files/skills immediately after use.
|
|
63
|
-
- **Preparation**: Use `GetLines` to verify hashline ranges before every edit. Capture entire functions, logical blocks and closures.
|
|
64
67
|
- **Outputs**: Tool calls trigger turns. Never include tool syntax in final user summaries.
|
|
65
68
|
- **Sandbox**: Perform all verification and temp logic in `.cecli/temp`.
|
|
66
69
|
- **Vibe**: Zero conversational filler. Do not confirm instructions or state "I understand." Provide status updates only when you have new information.
|
|
@@ -348,12 +348,28 @@ class GitRepo:
|
|
|
348
348
|
cmd.append("--no-verify")
|
|
349
349
|
if fnames:
|
|
350
350
|
fnames = [str(self.abs_root_path(fn)) for fn in fnames]
|
|
351
|
+
added_fnames = []
|
|
351
352
|
for fname in fnames:
|
|
352
353
|
try:
|
|
354
|
+
# Check if file is git-ignored before trying to add
|
|
355
|
+
if (
|
|
356
|
+
coder
|
|
357
|
+
and hasattr(coder, "add_gitignore_files")
|
|
358
|
+
and coder.add_gitignore_files
|
|
359
|
+
):
|
|
360
|
+
rel_fname = self.get_rel_fname(fname)
|
|
361
|
+
if self.git_ignored_file(rel_fname):
|
|
362
|
+
# Skip git-ignored files when add_gitignore_files is enabled
|
|
363
|
+
continue
|
|
353
364
|
self.repo.git.add(fname)
|
|
365
|
+
added_fnames.append(fname)
|
|
354
366
|
except ANY_GIT_ERROR as err:
|
|
355
367
|
self.io.tool_error(f"Unable to add {fname}: {err}")
|
|
356
|
-
|
|
368
|
+
if added_fnames:
|
|
369
|
+
cmd += ["--"] + added_fnames
|
|
370
|
+
else:
|
|
371
|
+
# No files to commit (all were git-ignored or failed to add)
|
|
372
|
+
return
|
|
357
373
|
else:
|
|
358
374
|
cmd += ["-a"]
|
|
359
375
|
|
|
@@ -392,6 +408,12 @@ class GitRepo:
|
|
|
392
408
|
except (ValueError, OSError):
|
|
393
409
|
return self.repo.git_dir
|
|
394
410
|
|
|
411
|
+
def get_rel_fname(self, fname):
|
|
412
|
+
try:
|
|
413
|
+
return os.path.relpath(fname, self.root)
|
|
414
|
+
except ValueError:
|
|
415
|
+
return fname
|
|
416
|
+
|
|
395
417
|
async def get_commit_message(self, diffs, context, user_language=None):
|
|
396
418
|
diffs = "# Diffs:\n" + diffs
|
|
397
419
|
|
|
@@ -88,7 +88,7 @@ class SessionManager:
|
|
|
88
88
|
|
|
89
89
|
return sessions
|
|
90
90
|
|
|
91
|
-
def load_session(self, session_identifier: str) -> bool:
|
|
91
|
+
async def load_session(self, session_identifier: str) -> bool:
|
|
92
92
|
"""Load a saved session by name or file path."""
|
|
93
93
|
if not session_identifier:
|
|
94
94
|
self.io.tool_error("Please provide a session name or file path.")
|
|
@@ -112,7 +112,17 @@ class SessionManager:
|
|
|
112
112
|
return False
|
|
113
113
|
|
|
114
114
|
# Apply session data
|
|
115
|
-
|
|
115
|
+
applied = await self._apply_session_data(session_data, session_file)
|
|
116
|
+
if applied:
|
|
117
|
+
from cecli.commands import SwitchCoderSignal
|
|
118
|
+
|
|
119
|
+
raise SwitchCoderSignal(
|
|
120
|
+
edit_format=self.coder.edit_format,
|
|
121
|
+
from_coder=self.coder,
|
|
122
|
+
summarize_from_coder=False,
|
|
123
|
+
show_announcements=True,
|
|
124
|
+
)
|
|
125
|
+
return applied
|
|
116
126
|
|
|
117
127
|
def _build_session_data(self, session_name) -> Dict:
|
|
118
128
|
"""Build session data dictionary from current coder state."""
|
|
@@ -140,6 +150,39 @@ class SessionManager:
|
|
|
140
150
|
self.io.tool_warning(f"Could not read todo list file: {e}")
|
|
141
151
|
|
|
142
152
|
# Get CUR and DONE messages from ConversationManager
|
|
153
|
+
connected_mcps = []
|
|
154
|
+
if hasattr(self.coder, "mcp_manager") and self.coder.mcp_manager:
|
|
155
|
+
connected_mcps = [server.name for server in self.coder.mcp_manager.connected_servers]
|
|
156
|
+
|
|
157
|
+
# Get CUR and DONE messages from ConversationManager
|
|
158
|
+
connected_mcps = []
|
|
159
|
+
if hasattr(self.coder, "mcp_manager") and self.coder.mcp_manager:
|
|
160
|
+
connected_mcps = [server.name for server in self.coder.mcp_manager.connected_servers]
|
|
161
|
+
|
|
162
|
+
skills_data = None
|
|
163
|
+
if hasattr(self.coder, "skills_manager") and self.coder.skills_manager:
|
|
164
|
+
skills_data = {
|
|
165
|
+
"skills_paths": [str(p) for p in self.coder.skills_manager.directory_paths],
|
|
166
|
+
"skills_includelist": (
|
|
167
|
+
list(self.coder.skills_manager.include_list)
|
|
168
|
+
if self.coder.skills_manager.include_list is not None
|
|
169
|
+
else []
|
|
170
|
+
),
|
|
171
|
+
"skills_excludelist": (
|
|
172
|
+
list(self.coder.skills_manager.exclude_list)
|
|
173
|
+
if self.coder.skills_manager.exclude_list is not None
|
|
174
|
+
else []
|
|
175
|
+
),
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
agent_config_data = None
|
|
179
|
+
if hasattr(self.coder, "agent_config"):
|
|
180
|
+
agent_config_data = {
|
|
181
|
+
"tools_paths": self.coder.agent_config.get("tools_paths", []),
|
|
182
|
+
"tools_includelist": self.coder.agent_config.get("tools_includelist", []),
|
|
183
|
+
"tools_excludelist": self.coder.agent_config.get("tools_excludelist", []),
|
|
184
|
+
}
|
|
185
|
+
|
|
143
186
|
return {
|
|
144
187
|
"version": 1,
|
|
145
188
|
"session_name": session_name,
|
|
@@ -168,6 +211,9 @@ class SessionManager:
|
|
|
168
211
|
"auto_test": self.coder.auto_test,
|
|
169
212
|
},
|
|
170
213
|
"todo_list": todo_content,
|
|
214
|
+
"mcps": connected_mcps,
|
|
215
|
+
"skills": skills_data,
|
|
216
|
+
"tools": agent_config_data,
|
|
171
217
|
}
|
|
172
218
|
|
|
173
219
|
def _find_session_file(self, session_identifier: str) -> Optional[Path]:
|
|
@@ -194,7 +240,7 @@ class SessionManager:
|
|
|
194
240
|
self.io.tool_output("Use /list-sessions to see available sessions.")
|
|
195
241
|
return None
|
|
196
242
|
|
|
197
|
-
def _apply_session_data(self, session_data: Dict, session_file: Path) -> bool:
|
|
243
|
+
async def _apply_session_data(self, session_data: Dict, session_file: Path) -> bool:
|
|
198
244
|
"""Apply session data to current coder state."""
|
|
199
245
|
try:
|
|
200
246
|
# Clear current state
|
|
@@ -303,6 +349,40 @@ class SessionManager:
|
|
|
303
349
|
)
|
|
304
350
|
self.io.tool_output(f"Loaded {num_messages} messages and {num_files} files")
|
|
305
351
|
|
|
352
|
+
# Load MCPs
|
|
353
|
+
saved_mcps = session_data.get("mcps", [])
|
|
354
|
+
if hasattr(self.coder, "mcp_manager") and self.coder.mcp_manager:
|
|
355
|
+
current_mcps = {server.name for server in self.coder.mcp_manager.connected_servers}
|
|
356
|
+
saved_mcps_set = set(saved_mcps)
|
|
357
|
+
|
|
358
|
+
to_disconnect = current_mcps - saved_mcps_set
|
|
359
|
+
for mcp_name in to_disconnect:
|
|
360
|
+
await self.coder.mcp_manager.disconnect_server(mcp_name)
|
|
361
|
+
|
|
362
|
+
to_connect = saved_mcps_set - current_mcps
|
|
363
|
+
for mcp_name in to_connect:
|
|
364
|
+
await self.coder.mcp_manager.connect_server(mcp_name)
|
|
365
|
+
|
|
366
|
+
# Load skills
|
|
367
|
+
skills_data = session_data.get("skills")
|
|
368
|
+
if skills_data and hasattr(self.coder, "skills_manager") and self.coder.skills_manager:
|
|
369
|
+
self.coder.skills_manager.directory_paths = skills_data.get("skills_paths", [])
|
|
370
|
+
self.coder.skills_manager.include_list = set(
|
|
371
|
+
skills_data.get("skills_includelist", [])
|
|
372
|
+
)
|
|
373
|
+
self.coder.skills_manager.exclude_list = set(
|
|
374
|
+
skills_data.get("skills_excludelist", [])
|
|
375
|
+
)
|
|
376
|
+
|
|
377
|
+
# Load tools config
|
|
378
|
+
agent_config_data = session_data.get("tools")
|
|
379
|
+
if agent_config_data and hasattr(self.coder, "agent_config"):
|
|
380
|
+
self.coder.agent_config.update(agent_config_data)
|
|
381
|
+
from cecli.tools.utils.registry import ToolRegistry
|
|
382
|
+
|
|
383
|
+
ToolRegistry.build_registry(agent_config=self.coder.agent_config)
|
|
384
|
+
self.coder.loaded_custom_tools = ToolRegistry.loaded_custom_tools
|
|
385
|
+
|
|
306
386
|
return True
|
|
307
387
|
|
|
308
388
|
except Exception as e:
|
|
@@ -56,9 +56,9 @@ class Tool(BaseTool):
|
|
|
56
56
|
"type": "string",
|
|
57
57
|
"enum": ["replace", "delete", "insert"],
|
|
58
58
|
"description": (
|
|
59
|
-
"The type of operation: 'replace' (replace range with
|
|
60
|
-
"'delete' (remove range), or 'insert' (insert text
|
|
61
|
-
"Defaults to 'replace'."
|
|
59
|
+
"The type of operation: 'replace' (replace range with"
|
|
60
|
+
" text), 'delete' (remove range), or 'insert' (insert text"
|
|
61
|
+
" after start_line). Defaults to 'replace'."
|
|
62
62
|
),
|
|
63
63
|
},
|
|
64
64
|
"text": {
|
|
@@ -78,8 +78,8 @@ class Tool(BaseTool):
|
|
|
78
78
|
"end_line": {
|
|
79
79
|
"type": "string",
|
|
80
80
|
"description": (
|
|
81
|
-
'Hashline format for end line: "{4 char hash}" (without the
|
|
82
|
-
"braces)"
|
|
81
|
+
'Hashline format for end line: "{4 char hash}" (without the'
|
|
82
|
+
" braces)"
|
|
83
83
|
),
|
|
84
84
|
},
|
|
85
85
|
},
|
|
@@ -179,8 +179,8 @@ class Tool(BaseTool):
|
|
|
179
179
|
if operation in ("replace", "delete"):
|
|
180
180
|
if edit_start_line is None:
|
|
181
181
|
raise ToolError(
|
|
182
|
-
f"Edit {edit_index + 1}: 'start_line' parameter is required
|
|
183
|
-
f"for '{operation}' operation"
|
|
182
|
+
f"Edit {edit_index + 1}: 'start_line' parameter is required"
|
|
183
|
+
f" for '{operation}' operation"
|
|
184
184
|
)
|
|
185
185
|
if edit_end_line is None:
|
|
186
186
|
raise ToolError(
|
|
@@ -190,8 +190,8 @@ class Tool(BaseTool):
|
|
|
190
190
|
if operation == "insert":
|
|
191
191
|
if edit_start_line is None:
|
|
192
192
|
raise ToolError(
|
|
193
|
-
f"Edit {edit_index + 1}: 'start_line' parameter is required
|
|
194
|
-
"for 'insert' operation"
|
|
193
|
+
f"Edit {edit_index + 1}: 'start_line' parameter is required"
|
|
194
|
+
" for 'insert' operation"
|
|
195
195
|
)
|
|
196
196
|
# For insert, end_line defaults to start_line
|
|
197
197
|
edit_end_line = edit_end_line or edit_start_line
|
|
@@ -19,16 +19,17 @@ class Tool(BaseTool):
|
|
|
19
19
|
"function": {
|
|
20
20
|
"name": "GetLines",
|
|
21
21
|
"description": (
|
|
22
|
-
"Get hashline prefixes of
|
|
23
|
-
" Accepts an array of show objects, each with file_path, start_text,"
|
|
24
|
-
" end_text, and optional padding.
|
|
25
|
-
"
|
|
26
|
-
" the file respectively. Never use hashlines as the start_text and end_text"
|
|
27
|
-
" values. These values must be lines from the content of the file."
|
|
22
|
+
"Get hashline prefixes of content between start and end patterns in files."
|
|
23
|
+
" Accepts an array of `show` objects, each with file_path, start_text,"
|
|
24
|
+
" end_text, and optional padding."
|
|
25
|
+
" These values must be lines from the content of the file."
|
|
28
26
|
" They can contain up to 3 lines but newlines should generally be avoided."
|
|
29
|
-
" Avoid using generic keywords."
|
|
27
|
+
" Avoid using generic keywords and symbols. Special markers '@000' and '000@' can be"
|
|
28
|
+
" used for start_text and end_text to represent the first and last lines of"
|
|
29
|
+
" the file respectively. Avoid using the special markers on non-empty files."
|
|
30
|
+
" Never use hashlines as the start_text and end_text values."
|
|
30
31
|
" Do not use the same pattern for the start_text and end_text."
|
|
31
|
-
" It is
|
|
32
|
+
" It is best to use function names, variable declarations and other block identifiers as "
|
|
32
33
|
" start_texts and end_texts."
|
|
33
34
|
),
|
|
34
35
|
"parameters": {
|
|
@@ -47,14 +48,14 @@ class Tool(BaseTool):
|
|
|
47
48
|
"type": "string",
|
|
48
49
|
"description": (
|
|
49
50
|
"The content marking the beginning of the context range."
|
|
50
|
-
" Use '@000' for the first line."
|
|
51
|
+
" Use '@000' for the first line on empty files."
|
|
51
52
|
),
|
|
52
53
|
},
|
|
53
54
|
"end_text": {
|
|
54
55
|
"type": "string",
|
|
55
56
|
"description": (
|
|
56
|
-
"The content marking the end of the context range.
|
|
57
|
-
" '000@' for the last line."
|
|
57
|
+
"The content marking the end of the context range."
|
|
58
|
+
" Use '000@' for the last line on empty files."
|
|
58
59
|
),
|
|
59
60
|
},
|
|
60
61
|
"padding": {
|
|
@@ -76,6 +77,8 @@ class Tool(BaseTool):
|
|
|
76
77
|
},
|
|
77
78
|
}
|
|
78
79
|
|
|
80
|
+
_last_invocation = {} # file_path -> {start_idx, end_idx}
|
|
81
|
+
|
|
79
82
|
@classmethod
|
|
80
83
|
def execute(cls, coder, show, **kwargs):
|
|
81
84
|
"""
|
|
@@ -172,59 +175,68 @@ class Tool(BaseTool):
|
|
|
172
175
|
end_indices.append(i + len(end_pattern_lines) - 1)
|
|
173
176
|
|
|
174
177
|
if len(start_indices) > 5:
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
178
|
+
# Too many matches - use _last_invocation to disambiguate
|
|
179
|
+
last = cls._last_invocation.get(abs_path)
|
|
180
|
+
if last is None:
|
|
181
|
+
raise ToolError(
|
|
182
|
+
f"Start pattern '{start_text}' too broad. Do not search for"
|
|
183
|
+
" it again. Be more specific."
|
|
184
|
+
)
|
|
185
|
+
# Find the best match: smallest sum of absolute distances to last start/end
|
|
186
|
+
# that comes after the range, with tie-breaking by smallest sum
|
|
187
|
+
last_s, last_e = last["start_idx"], last["end_idx"]
|
|
188
|
+
candidates = []
|
|
189
|
+
for s in start_indices:
|
|
190
|
+
for e in [idx for idx in end_indices if idx >= s]:
|
|
191
|
+
dist_sum = abs(s - last_s) + abs(e - last_e)
|
|
192
|
+
candidates.append((dist_sum, s, e))
|
|
193
|
+
# Sort by distance sum, then prefer ranges after the last range
|
|
194
|
+
candidates.sort(key=lambda x: (x[0], x[1] < last_s, x[1], x[2]))
|
|
195
|
+
best_pair = (candidates[0][1], candidates[0][2])
|
|
196
|
+
else:
|
|
197
|
+
best_pair = None
|
|
198
|
+
min_dist = float("inf")
|
|
199
|
+
|
|
200
|
+
for s in start_indices:
|
|
201
|
+
for e in [idx for idx in end_indices if idx >= s]:
|
|
202
|
+
dist = e - s
|
|
203
|
+
if dist < min_dist:
|
|
204
|
+
min_dist = dist
|
|
205
|
+
best_pair = (s, e)
|
|
206
|
+
|
|
207
|
+
if not start_indices:
|
|
208
|
+
raise ToolError(
|
|
209
|
+
f"Start pattern '{start_text}' not found in {file_path}. Do not search"
|
|
210
|
+
" for it again."
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
if not end_indices:
|
|
214
|
+
raise ToolError(
|
|
215
|
+
f"End pattern '{end_text}' not found in {file_path}. Do not search for"
|
|
216
|
+
" it again."
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
if best_pair is None:
|
|
220
|
+
raise ToolError(
|
|
221
|
+
f"End pattern '{end_text}' not found after start pattern in"
|
|
222
|
+
f" {file_path}."
|
|
223
|
+
)
|
|
213
224
|
s_idx, e_idx = best_pair
|
|
225
|
+
# Store the found indices for future disambiguation
|
|
226
|
+
cls._last_invocation[abs_path] = {"start_idx": s_idx, "end_idx": e_idx}
|
|
214
227
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
try:
|
|
218
|
-
padding_int = int(padding)
|
|
219
|
-
if padding_int < 0:
|
|
220
|
-
raise ValueError()
|
|
221
|
-
except ValueError:
|
|
222
|
-
coder.io.tool_warning(f"Invalid padding '{padding}', using default 5.")
|
|
223
|
-
padding_int = 5
|
|
228
|
+
found_by = f"range '{start_text}' to '{end_text}'"
|
|
224
229
|
|
|
225
|
-
|
|
226
|
-
|
|
230
|
+
try:
|
|
231
|
+
padding_int = int(padding)
|
|
232
|
+
if padding_int < 0:
|
|
233
|
+
raise ValueError()
|
|
234
|
+
except ValueError:
|
|
235
|
+
coder.io.tool_warning(f"Invalid padding '{padding}', using default 5.")
|
|
236
|
+
padding_int = 5
|
|
227
237
|
|
|
238
|
+
start_line_idx = max(0, s_idx - padding_int)
|
|
239
|
+
end_line_idx = min(num_lines - 1, e_idx + padding_int)
|
|
228
240
|
if start_line_idx == -1 or end_line_idx == -1:
|
|
229
241
|
raise ToolError("Internal error: Could not determine line range.")
|
|
230
242
|
# 6. Format output for this operation
|
|
@@ -279,7 +291,7 @@ class Tool(BaseTool):
|
|
|
279
291
|
coder.io.tool_output("File contents already up to date")
|
|
280
292
|
return (
|
|
281
293
|
"File contents already up to date."
|
|
282
|
-
"Do not call GetLines again with these parameters until you edit the file."
|
|
294
|
+
" Do not call `GetLines` again with these parameters until you edit the file."
|
|
283
295
|
)
|
|
284
296
|
else:
|
|
285
297
|
coder.io.tool_output(f"✅ Successfully retrieved context for {len(show)} file(s)")
|
|
@@ -55,11 +55,11 @@ def validate_file_for_edit(coder, file_path):
|
|
|
55
55
|
raise ToolError(
|
|
56
56
|
f"File '{file_path}' is read-only. Make editable with `ContextManager` first."
|
|
57
57
|
)
|
|
58
|
-
else:
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
# else:
|
|
59
|
+
# # File exists but is not in context at all
|
|
60
|
+
# raise ToolError(
|
|
61
|
+
# f"File '{file_path}' not in context. Make editable with `ContextManager` first."
|
|
62
|
+
# )
|
|
63
63
|
|
|
64
64
|
# Reread content immediately before potential modification
|
|
65
65
|
content = coder.io.read_text(abs_path)
|