cecli-dev 0.100.11rc2__tar.gz → 0.100.11rc3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/PKG-INFO +1 -1
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/_version.py +3 -3
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/hashline.py +101 -128
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/edit_text.py +74 -27
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli_dev.egg-info/PKG-INFO +1 -1
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli_dev.egg-info/scm_version.json +2 -2
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_hashline_closure.py +132 -44
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/.dockerignore +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/.flake8 +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/.gitattributes +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/.github/workflows/check_pypi_version.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/.github/workflows/docker-build-test.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/.github/workflows/docker-release.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/.github/workflows/issues.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/.github/workflows/pages.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/.github/workflows/pre-commit.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/.github/workflows/release.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/.github/workflows/ubuntu-tests.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/.github/workflows/windows-tests.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/.github/workflows/windows_check_pypi_version.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/.gitignore +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/.pre-commit-config.yaml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/CHANGELOG.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/CNAME +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/CONTRIBUTING.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/HISTORY.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/LICENSE.txt +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/MANIFEST.in +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/README.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/Dockerfile +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/README.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/benchmark.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/benchmark_classic.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/clone-exercism.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/cpp-test.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/docker.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/docker_build.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/install-docker-ubuntu.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/npm-test.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/over_time.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/plot.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/plots.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/problem_stats.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/prompts.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/refactor_tools.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/rsync.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/rungrid.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/swe-bench-lite.txt +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/swe-bench.txt +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/swe_bench.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/test_benchmark.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/variations.1.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/variations.2.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/variations.3.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/benchmark/variations.4.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/__main__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/args.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/args_formatter.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/change_tracker.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/agent_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/architect_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/ask_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/base_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/chat_chunks.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/context_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/copypaste_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/editblock_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/editblock_fenced_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/editblock_func_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/editor_diff_fenced_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/editor_editblock_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/editor_whole_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/hashline_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/help_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/patch_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/search_replace.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/shell.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/single_wholefile_func_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/sub_agent_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/udiff_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/udiff_simple.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/wholefile_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/coders/wholefile_func_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/add.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/agent.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/agent_model.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/architect.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/ask.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/chat_mode.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/clear.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/code.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/command_prefix.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/commit.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/compact.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/context.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/context_blocks.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/context_management.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/copy.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/copy_context.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/core.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/diff.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/drop.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/editor.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/editor_model.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/exclude_skill.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/exit.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/git.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/hashline.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/help.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/history_search.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/hooks.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/hot_reload.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/include_skill.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/lint.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/list_mcp.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/list_sessions.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/list_skills.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/load.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/load_hook.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/load_mcp.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/load_session.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/load_skill.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/ls.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/map.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/map_refresh.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/merge.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/model.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/models.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/multiline_mode.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/paste.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/quit.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/read_only.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/read_only_stub.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/reap_agent.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/reasoning_effort.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/remove_hook.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/remove_mcp.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/remove_skill.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/report.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/reset.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/rules.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/run.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/save.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/save_session.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/settings.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/spawn_agent.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/switch_agent.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/terminal_data/linux.keytab +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/terminal_setup.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/test.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/think_tokens.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/tokens.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/undo.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/utils/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/utils/base_command.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/utils/helpers.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/utils/registry.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/utils/save_load_manager.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/voice.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/weak_model.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/web.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/commands/workspace.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/deprecated_args.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/diffs.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/dump.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/editor.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/exceptions.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/format_settings.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/help.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/help_pats.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/agents/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/agents/config.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/agents/service.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/background_commands.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/command_parser.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/conversation/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/conversation/base_message.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/conversation/files.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/conversation/integration.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/conversation/manager.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/conversation/service.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/conversation/tags.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/conversation/utils.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/copypaste.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/coroutines.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/crypto.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/file_searcher.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/file_system/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/file_system/builders.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/file_system/ignore.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/file_system/ngram_index.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/file_system/service.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/file_system/trie_index.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/grep_ast/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/grep_ast/dump.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/grep_ast/grep_ast.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/grep_ast/main.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/grep_ast/parsers.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/grep_ast/tsl.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/hashpos/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/hashpos/hashpos.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/hashpos/hashpos.v1.bak +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/io_proxy.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/leak_detect.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/model_providers.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/monorepo/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/monorepo/config.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/monorepo/local_workspace.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/monorepo/project.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/monorepo/workspace.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/monorepo/worktree.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/nested.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/observations/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/observations/service.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/plugin_manager.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/profiler.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/requests.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/responses.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/similarity.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/skills.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/helpers/threading.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/history.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/hooks/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/hooks/base.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/hooks/integration.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/hooks/manager.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/hooks/registry.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/hooks/service.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/hooks/types.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/interruptible_input.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/io.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/linter.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/llm.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/main.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/mcp/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/mcp/manager.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/mcp/oauth.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/mcp/server.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/mcp/utils.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/mdstream.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/models.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/onboarding.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/agent.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/architect.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/ask.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/base.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/context.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/copypaste.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/editblock.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/editblock_fenced.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/editblock_func.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/editor_diff_fenced.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/editor_editblock.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/editor_whole.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/hashline.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/help.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/patch.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/single_wholefile_func.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/subagent.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/udiff.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/udiff_simple.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/utils/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/utils/registry.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/utils/system.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/wholefile.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/prompts/wholefile_func.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/bash-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/README.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/bash-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/reasoning_tags.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/repo.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/repomap.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/report.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/resources/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/resources/model-metadata.json +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/resources/model-settings.yml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/resources/providers.json +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/run_cmd.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/scrape.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/sendchat.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/sessions.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/special.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/_yield.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/command.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/command_interactive.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/delegate.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/explore_code.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/git_branch.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/git_diff.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/git_log.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/git_remote.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/git_show.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/git_status.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/grep.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/ls.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/read_range.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/resource_manager.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/thinking.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/undo_change.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/update_todo_list.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/utils/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/utils/base_tool.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/utils/helpers.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/utils/output.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/utils/registry.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/validations/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tools/validations/validations.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tui/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tui/app.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tui/io.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tui/styles.tcss +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tui/widgets/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tui/widgets/completion_bar.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tui/widgets/file_list.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tui/widgets/footer.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tui/widgets/input_area.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tui/widgets/input_container.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tui/widgets/key_hints.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tui/widgets/output.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tui/widgets/status_bar.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tui/widgets/subagent_pills.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/tui/worker.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/urls.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/utils.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/versioncheck.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/voice.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/waiting.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/watch.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/watch_prompts.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/Gemfile +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_includes/blame.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_includes/get-started.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_includes/help-tip.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_includes/help.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_includes/install.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_includes/keys.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_includes/model-warnings.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_includes/multi-line.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_includes/python-m-aider.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_includes/recording.css +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_includes/recording.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_includes/works-best.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_sass/_features.scss +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_sass/_footer.scss +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_sass/_hero.scss +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_sass/_info.scss +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_sass/_layout.scss +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_sass/_reset.scss +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_sass/_testimonials.scss +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_sass/_typography.scss +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_sass/_variables.scss +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_sass/custom/custom.scss +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/_sass/global-overrides.scss +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/adv-model-settings.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/agent-mode.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/api-keys.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/conf.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/custom-commands.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/custom-system-prompts.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/dotenv.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/editor.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/hooks.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/mcp.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/model-aliases.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/model-configuration.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/options.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/reasoning.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/security.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/skills.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/subagents.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/tui.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config/workspaces.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/config.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/git.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/index.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/install/docker.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/install.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/languages.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/legal/contributor-agreement.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/legal/privacy.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms/anthropic.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms/azure.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms/bedrock.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms/cohere.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms/deepseek.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms/gemini.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms/github.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms/groq.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms/lm-studio.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms/ollama.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms/openai-compat.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms/openai.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms/openrouter.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms/other.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms/vertex.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms/warnings.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms/xai.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/llms.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/more/analytics.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/more/edit-formats.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/more/infinite-output.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/more-info.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/repomap.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/scripting.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/troubleshooting/imports.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/troubleshooting/support.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/troubleshooting/warnings.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/troubleshooting.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/usage/commands.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/usage/conventions.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/usage/copypaste.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/usage/images-urls.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/usage/lint-test.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/usage/modes.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/usage/not-code.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/usage/notifications.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/usage/optional.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/usage/sessions.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/usage/tips.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/usage/voice.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/usage/watch.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/docs/usage.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli/website/share/index.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli_dev.egg-info/SOURCES.txt +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli_dev.egg-info/dependency_links.txt +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli_dev.egg-info/entry_points.txt +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli_dev.egg-info/requires.txt +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli_dev.egg-info/scm_file_list.json +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/cecli_dev.egg-info/top_level.txt +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/docker/Dockerfile +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/pyproject.toml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/pytest.ini +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/requirements/common-constraints.txt +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/requirements/requirements-dev.in +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/requirements/requirements-dev.txt +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/requirements/requirements-help.in +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/requirements/requirements-help.txt +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/requirements/requirements-playwright.in +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/requirements/requirements-playwright.txt +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/requirements/requirements.in +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/requirements/tree-sitter.in +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/requirements.txt +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/30k-image.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/Dockerfile.jekyll +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/blame.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/clean_metadata.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/compare-message-history.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/cost_analyzer.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/cost_calculator.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/dl_icons.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/filter-chat-mode.js +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/generate_providers.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/get_contributor_list.js +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/get_hashline.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/history_prompts.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/homepage.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/issues.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/jekyll_build.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/jekyll_run.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/logo_svg.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/pip-compile.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/recording_audio.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/redact-cast.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/rename_to_cecli.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/tmux_record.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/tsl_pack_langs.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/update-blame.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/update-docs.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/update-history.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/versionbump.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/scripts/yank-old-versions.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/setup.cfg +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/shim.pyproject.toml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/conftest.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_aws_credentials.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_background_commands.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_commands.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_custom_commands.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_deprecated.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_editblock.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_editor.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_exceptions.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_find_or_blocks.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_hashline.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_history.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_io.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_linter.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_main.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_model_info_manager.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_model_provider_manager.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_models.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_onboarding.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_plugin_manager.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_prompts.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_reasoning.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_repo.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_repomap.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_run_cmd.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_sanity_check_repo.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_scripting.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_sendchat.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_session_args.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_session_crypto.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_sessions.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_sessions_manager.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_skills.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_special.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_ssl_verification.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_udiff.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_urls.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_voice.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_watch.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/basic/test_wholefile.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/coders/test_coder_switching.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/coders/test_copypaste_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/commands/test_compaction.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/commands/test_switch_agent.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/conftest.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/conversations/test_conversation_integration.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/conversations/test_conversation_system.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/chat-history.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/arduino/test.ino +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/bash/test.sh +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/c/test.c +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/chatito/test.chatito +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/clojure/test.clj +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/cpp/test.cpp +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/csharp/test.cs +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/d/test.d +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/dart/test.dart +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/elisp/test.el +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/elixir/test.ex +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/elm/test.elm +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/gleam/test.gleam +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/go/test.go +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/haskell/test.hs +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/hcl/test.tf +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/java/test.java +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/javascript/test.js +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/kotlin/test.kt +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/lua/test.lua +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/matlab/test.m +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/ocaml/test.ml +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/php/test.php +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/pony/test.pony +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/properties/test.properties +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/python/test.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/ql/test.ql +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/r/test.r +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/racket/test.rkt +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/ruby/test.rb +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/rust/test.rs +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/scala/test.scala +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/solidity/test.sol +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/swift/test.swift +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/tsx/test.tsx +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/typescript/test.ts +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/udev/test.rules +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/languages/zig/test.zig +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/sample-code-base/sample.js +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/sample-code-base/sample.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/watch.js +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/watch.lisp +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/watch.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/fixtures/watch_question.js +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/help/test_help.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/helpers/monorepo/LOCAL_WORKSPACE.md +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/helpers/monorepo/test_config.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/helpers/monorepo/test_config_active.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/helpers/monorepo/test_ignore_logic.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/helpers/monorepo/test_local_workspace.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/helpers/monorepo/test_workspace.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/helpers/observations/test_observation_service.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/hooks/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/hooks/test_base.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/hooks/test_manager.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/hooks/test_registry.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/integration/test_agent_mcp_management.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/integration/test_mcp_management.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/mcp/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/mcp/test_manager.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/scrape/test_playwright_disable.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/scrape/test_scrape.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/subagents/__init__.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/subagents/conftest.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/subagents/test_commands.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/subagents/test_config.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/subagents/test_delegate.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/subagents/test_finished.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/subagents/test_io_proxy.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/subagents/test_service.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/subagents/test_sub_agent_coder.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/tools/test_extractions.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/tools/test_get_lines.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/tools/test_git_branch.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/tools/test_git_diff.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/tools/test_grep.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/tools/test_insert_block.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/tools/test_read_range_execute.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/tools/test_registry.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/tools/test_remove_mcp_tool.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/tools/test_tool_arguments.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/tools/test_tools_load_mcp_tool.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/tools/validations.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/tui/test_app.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/unit/test_load_mcp.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/unit/test_remove_mcp.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/unit/test_unit_load_mcp_tool.py +0 -0
- {cecli_dev-0.100.11rc2 → cecli_dev-0.100.11rc3}/tests/unit/test_unit_remove_mcp_tool.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.100.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 100, 11, '
|
|
21
|
+
__version__ = version = '0.100.11rc3'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 100, 11, 'rc3')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g11ba4d315'
|
|
@@ -1427,109 +1427,89 @@ def _apply_closure_safeguard(
|
|
|
1427
1427
|
original_content: str,
|
|
1428
1428
|
resolved_ops: list,
|
|
1429
1429
|
file_path: str = None,
|
|
1430
|
-
) -> list:
|
|
1430
|
+
) -> tuple[list, list]:
|
|
1431
1431
|
"""
|
|
1432
|
-
Use tree-sitter to heal edit boundaries by simulating edits and
|
|
1433
|
-
|
|
1434
|
-
For each replace/delete operation, this simulates applying the edit with
|
|
1435
|
-
the replacement text, parses the resulting code with tree-sitter, and
|
|
1436
|
-
checks if the result is syntactically valid (no ERROR/MISSING nodes).
|
|
1437
|
-
|
|
1438
|
-
If the edit produces invalid syntax (e.g., missing closing braces),
|
|
1439
|
-
it progressively expands/contracts the start and end boundaries by a
|
|
1440
|
-
step and re-tests until the resulting code parses correctly or the
|
|
1441
|
-
maximum number of expansion steps is exhausted.
|
|
1442
|
-
|
|
1443
|
-
This prevents the common LLM edit error of "eating" outer scope
|
|
1444
|
-
closing braces, parentheses, or brackets by finding the nearest
|
|
1445
|
-
syntactically valid edit boundary.
|
|
1446
|
-
|
|
1447
|
-
Args:
|
|
1448
|
-
original_content: Original source code (without hashlines)
|
|
1449
|
-
resolved_ops: List of resolved operation dicts with start_idx/end_idx
|
|
1450
|
-
file_path: File path to determine tree-sitter language
|
|
1432
|
+
Use tree-sitter to heal edit boundaries by simulating edits and scoring by AST health.
|
|
1433
|
+
Evicts edits that strictly increase the number of syntax errors.
|
|
1451
1434
|
|
|
1452
1435
|
Returns:
|
|
1453
|
-
|
|
1436
|
+
tuple: (safe_resolved_ops, rejected_ops)
|
|
1437
|
+
- safe_resolved_ops: Operations with healed boundaries
|
|
1438
|
+
- rejected_ops: List of dicts with {"index": int, "error": str} for evicted operations
|
|
1454
1439
|
"""
|
|
1455
|
-
|
|
1456
|
-
def is_syntactically_valid(source_bytes: bytes, parser) -> bool:
|
|
1457
|
-
try:
|
|
1458
|
-
tree = parser.parse(source_bytes)
|
|
1459
|
-
return not tree.root_node.has_error
|
|
1460
|
-
except Exception:
|
|
1461
|
-
return False
|
|
1462
|
-
|
|
1463
|
-
def apply_edit(
|
|
1464
|
-
source_lines: list[str],
|
|
1465
|
-
start: int,
|
|
1466
|
-
end: int,
|
|
1467
|
-
replacement: list[str],
|
|
1468
|
-
) -> bytes:
|
|
1469
|
-
"""Applies the edit and returns the new source code as bytes."""
|
|
1470
|
-
new_lines = source_lines[:start] + replacement + source_lines[end + 1 :]
|
|
1471
|
-
return "\n".join(new_lines).encode("utf-8")
|
|
1472
|
-
|
|
1473
|
-
def count_closures(source_bytes: bytes) -> int:
|
|
1474
|
-
"""Counts the total number of brackets, braces, and parenthesis."""
|
|
1475
|
-
return sum(source_bytes.count(b) for b in b"{}[]()")
|
|
1476
|
-
|
|
1477
|
-
def get_indentation(line: str) -> int:
|
|
1478
|
-
"""Helper to safely calculate the leading whitespace of a line."""
|
|
1479
|
-
return len(line) - len(line.lstrip(" \t"))
|
|
1480
|
-
|
|
1481
1440
|
if not resolved_ops or not file_path:
|
|
1482
|
-
return resolved_ops
|
|
1441
|
+
return resolved_ops, []
|
|
1483
1442
|
|
|
1484
|
-
# Determine language from file path
|
|
1485
1443
|
from cecli.helpers.grep_ast.parsers import filename_to_lang
|
|
1486
1444
|
from cecli.helpers.grep_ast.tsl import get_language, get_parser
|
|
1487
1445
|
|
|
1488
1446
|
lang = filename_to_lang(file_path)
|
|
1489
1447
|
if not lang:
|
|
1490
|
-
return resolved_ops
|
|
1448
|
+
return resolved_ops, []
|
|
1491
1449
|
|
|
1492
|
-
# Set up tree-sitter parser
|
|
1493
1450
|
try:
|
|
1494
1451
|
language = get_language(lang) # noqa
|
|
1495
1452
|
parser = get_parser(lang)
|
|
1496
1453
|
except Exception:
|
|
1497
|
-
|
|
1498
|
-
return resolved_ops
|
|
1454
|
+
return resolved_ops, []
|
|
1499
1455
|
|
|
1500
1456
|
source_lines = original_content.splitlines()
|
|
1457
|
+
source_bytes = original_content.encode("utf-8")
|
|
1458
|
+
|
|
1459
|
+
def apply_edit(
|
|
1460
|
+
lines: list[str],
|
|
1461
|
+
start: int,
|
|
1462
|
+
end: int,
|
|
1463
|
+
replacement: list[str],
|
|
1464
|
+
) -> bytes:
|
|
1465
|
+
"""Applies the edit and returns the new source code as bytes."""
|
|
1466
|
+
new_lines = lines[:start] + replacement + lines[end + 1 :]
|
|
1467
|
+
return "\n".join(new_lines).encode("utf-8")
|
|
1468
|
+
|
|
1469
|
+
def count_ast_errors(node) -> int:
|
|
1470
|
+
"""
|
|
1471
|
+
Recursively counts MISSING or ERROR nodes in the AST.
|
|
1472
|
+
"""
|
|
1473
|
+
errors = 0
|
|
1474
|
+
if node.is_missing or node.type == "ERROR":
|
|
1475
|
+
errors += 1
|
|
1476
|
+
for child in node.children:
|
|
1477
|
+
errors += count_ast_errors(child)
|
|
1478
|
+
return errors
|
|
1479
|
+
|
|
1480
|
+
# Establish the baseline syntax health of the original file
|
|
1481
|
+
base_tree = parser.parse(source_bytes)
|
|
1482
|
+
baseline_error_count = count_ast_errors(base_tree.root_node)
|
|
1483
|
+
|
|
1484
|
+
safe_resolved_ops = []
|
|
1485
|
+
rejected_ops = []
|
|
1501
1486
|
|
|
1502
1487
|
for resolved in resolved_ops:
|
|
1503
1488
|
op = resolved["op"]
|
|
1504
1489
|
if op["operation"] not in {"replace", "insert", "delete"}:
|
|
1490
|
+
safe_resolved_ops.append(resolved)
|
|
1505
1491
|
continue
|
|
1506
1492
|
|
|
1507
1493
|
llm_start = resolved["start_idx"]
|
|
1508
1494
|
llm_end = resolved["end_idx"]
|
|
1509
1495
|
|
|
1510
|
-
# Clamp to valid bounds
|
|
1511
1496
|
if llm_start < 0 or llm_start >= len(source_lines):
|
|
1497
|
+
safe_resolved_ops.append(resolved)
|
|
1512
1498
|
continue
|
|
1513
1499
|
if llm_end < llm_start:
|
|
1500
|
+
safe_resolved_ops.append(resolved)
|
|
1514
1501
|
continue
|
|
1515
1502
|
|
|
1516
|
-
# Get replacement text
|
|
1517
1503
|
replacement_text = op.get("text", "") or ""
|
|
1518
1504
|
if op["operation"] == "delete":
|
|
1519
1505
|
replacement_text = ""
|
|
1520
1506
|
repl_lines = replacement_text.splitlines()
|
|
1521
1507
|
|
|
1522
|
-
# Clamp end to valid range
|
|
1523
1508
|
llm_end = min(llm_end, len(source_lines) - 1)
|
|
1524
1509
|
|
|
1525
|
-
# --- THE HEALING LOOP ---
|
|
1526
|
-
# Generate all combinations of offsets in {-2, -1, 0, 1, 2} for both
|
|
1527
|
-
# start and end, then filter to syntactically valid edits and rank
|
|
1528
|
-
# by cumulative movement (abs(start_shift) + abs(end_shift)) as a
|
|
1529
|
-
# primary criterion to bias toward minimal range perturbation.
|
|
1530
|
-
|
|
1531
1510
|
offsets = [0, 1, -1, 2, -2]
|
|
1532
1511
|
all_candidates = []
|
|
1512
|
+
|
|
1533
1513
|
for start_shift in offsets:
|
|
1534
1514
|
for end_shift in offsets:
|
|
1535
1515
|
candidate_start = max(0, llm_start - start_shift)
|
|
@@ -1538,7 +1518,6 @@ def _apply_closure_safeguard(
|
|
|
1538
1518
|
if candidate_end < candidate_start:
|
|
1539
1519
|
continue
|
|
1540
1520
|
|
|
1541
|
-
# Skip candidates that overlap with other operations' ranges
|
|
1542
1521
|
overlaps = False
|
|
1543
1522
|
for other_op in resolved_ops:
|
|
1544
1523
|
if other_op is resolved:
|
|
@@ -1552,87 +1531,52 @@ def _apply_closure_safeguard(
|
|
|
1552
1531
|
if overlaps:
|
|
1553
1532
|
continue
|
|
1554
1533
|
|
|
1555
|
-
# Skip candidates that would create duplicate adjacent content at edit boundaries
|
|
1556
1534
|
if _would_create_duplicate_content(
|
|
1557
1535
|
source_lines, candidate_start, candidate_end, repl_lines
|
|
1558
1536
|
):
|
|
1559
1537
|
continue
|
|
1560
1538
|
|
|
1561
|
-
|
|
1539
|
+
test_source_bytes = apply_edit(
|
|
1562
1540
|
source_lines,
|
|
1563
1541
|
candidate_start,
|
|
1564
1542
|
candidate_end,
|
|
1565
1543
|
repl_lines,
|
|
1566
1544
|
)
|
|
1567
1545
|
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
) == get_indentation(source_start_line):
|
|
1593
|
-
indent_score += 1
|
|
1594
|
-
|
|
1595
|
-
# Check End Boundary Match
|
|
1596
|
-
if last_repl and candidate_end < len(source_lines):
|
|
1597
|
-
source_end_line = source_lines[candidate_end]
|
|
1598
|
-
if source_end_line.strip() and get_indentation(
|
|
1599
|
-
last_repl
|
|
1600
|
-
) == get_indentation(source_end_line):
|
|
1601
|
-
indent_score += 1
|
|
1602
|
-
|
|
1603
|
-
all_candidates.append(
|
|
1604
|
-
{
|
|
1605
|
-
"start_idx": candidate_start,
|
|
1606
|
-
"end_idx": candidate_end,
|
|
1607
|
-
"start_line_match": start_line_match,
|
|
1608
|
-
"end_line_match": end_line_match,
|
|
1609
|
-
"source_len": len(test_source),
|
|
1610
|
-
"is_partial": is_partial,
|
|
1611
|
-
"is_downward": is_downward,
|
|
1612
|
-
"is_both": is_both,
|
|
1613
|
-
"closure_count": closures,
|
|
1614
|
-
"indent_score": indent_score,
|
|
1615
|
-
"cumulative_movement": cumulative_movement,
|
|
1616
|
-
"offsets": (start_shift, end_shift),
|
|
1617
|
-
}
|
|
1618
|
-
)
|
|
1546
|
+
# Parse the candidate to get structural truth
|
|
1547
|
+
edited_tree = parser.parse(test_source_bytes)
|
|
1548
|
+
ast_error_count = count_ast_errors(edited_tree.root_node)
|
|
1549
|
+
|
|
1550
|
+
is_partial = (start_shift == 0) ^ (end_shift == 0)
|
|
1551
|
+
is_downward = start_shift <= 0
|
|
1552
|
+
is_both = start_shift == end_shift
|
|
1553
|
+
start_line_match = source_lines[candidate_start] == source_lines[llm_start]
|
|
1554
|
+
end_line_match = source_lines[candidate_end] == source_lines[llm_end]
|
|
1555
|
+
cumulative_movement = abs(start_shift) + abs(end_shift)
|
|
1556
|
+
|
|
1557
|
+
all_candidates.append(
|
|
1558
|
+
{
|
|
1559
|
+
"start_idx": candidate_start,
|
|
1560
|
+
"end_idx": candidate_end,
|
|
1561
|
+
"ast_error_count": ast_error_count,
|
|
1562
|
+
"start_line_match": start_line_match,
|
|
1563
|
+
"end_line_match": end_line_match,
|
|
1564
|
+
"cumulative_movement": cumulative_movement,
|
|
1565
|
+
"is_partial": is_partial,
|
|
1566
|
+
"is_downward": is_downward,
|
|
1567
|
+
"is_both": is_both,
|
|
1568
|
+
}
|
|
1569
|
+
)
|
|
1619
1570
|
|
|
1620
1571
|
if all_candidates:
|
|
1621
|
-
#
|
|
1622
|
-
#
|
|
1623
|
-
# 2. Fewest total closures (minimize structural pollution)
|
|
1624
|
-
# 3. Indentation Score (Descending: 2 is better than 0)
|
|
1625
|
-
# 4. Longest source (preserve more file content)
|
|
1626
|
-
# 5. Partial expansions over full range shifts
|
|
1627
|
-
# 6. Downward changes over upward changes
|
|
1572
|
+
# 1. AST Health is the absolute highest priority.
|
|
1573
|
+
# 2. Cumulative movement acts as the tie-breaker for equally valid ASTs.
|
|
1628
1574
|
all_candidates.sort(
|
|
1629
1575
|
key=lambda r: (
|
|
1576
|
+
r["ast_error_count"], # Ascending: fewer syntax errors wins
|
|
1630
1577
|
not r["start_line_match"], # Descending: True first
|
|
1631
1578
|
not r["end_line_match"], # Descending: True first
|
|
1632
1579
|
r["cumulative_movement"], # Ascending: smaller is better
|
|
1633
|
-
-r["indent_score"], # Descending: larger score is better (2 > 1 > 0)
|
|
1634
|
-
-r["source_len"], # Descending: larger is better
|
|
1635
|
-
r["closure_count"], # Ascending: smaller is better
|
|
1636
1580
|
not r["is_partial"], # Booleans: False comes before True
|
|
1637
1581
|
not r["is_downward"], # Booleans: False comes before True
|
|
1638
1582
|
r["is_both"], # Booleans: False comes before True
|
|
@@ -1640,10 +1584,30 @@ def _apply_closure_safeguard(
|
|
|
1640
1584
|
)
|
|
1641
1585
|
|
|
1642
1586
|
best = all_candidates[0]
|
|
1587
|
+
|
|
1588
|
+
# EVICTION GATE: If the absolute best boundary still introduces NEW
|
|
1589
|
+
# syntax errors compared to the original file, discard the edit entirely.
|
|
1590
|
+
if best["ast_error_count"] > baseline_error_count:
|
|
1591
|
+
|
|
1592
|
+
rejected_ops.append(
|
|
1593
|
+
{
|
|
1594
|
+
"index": resolved["index"],
|
|
1595
|
+
"error": (
|
|
1596
|
+
f"Edit introduces new syntax error(s) (baseline: {baseline_error_count}, "
|
|
1597
|
+
f"after edit: {best['ast_error_count']}) and none of the "
|
|
1598
|
+
f"{len(all_candidates)} candidate boundary adjustments could resolve it"
|
|
1599
|
+
),
|
|
1600
|
+
"operation": op,
|
|
1601
|
+
}
|
|
1602
|
+
)
|
|
1603
|
+
continue
|
|
1604
|
+
|
|
1643
1605
|
resolved["start_idx"] = best["start_idx"]
|
|
1644
1606
|
resolved["end_idx"] = best["end_idx"]
|
|
1645
1607
|
|
|
1646
|
-
|
|
1608
|
+
safe_resolved_ops.append(resolved)
|
|
1609
|
+
|
|
1610
|
+
return safe_resolved_ops, rejected_ops
|
|
1647
1611
|
|
|
1648
1612
|
|
|
1649
1613
|
def apply_hashline_operations(
|
|
@@ -1794,7 +1758,16 @@ def apply_hashline_operations(
|
|
|
1794
1758
|
|
|
1795
1759
|
if file_path:
|
|
1796
1760
|
# Apply tree-sitter based closure safeguard to snap boundaries to AST nodes
|
|
1797
|
-
|
|
1761
|
+
safe_ops, rejected_ops = _apply_closure_safeguard(original_content, resolved_ops, file_path)
|
|
1762
|
+
resolved_ops = safe_ops
|
|
1763
|
+
for rejected in rejected_ops:
|
|
1764
|
+
failed_ops.append(
|
|
1765
|
+
{
|
|
1766
|
+
"index": rejected["index"],
|
|
1767
|
+
"error": rejected["error"],
|
|
1768
|
+
"operation": rejected["operation"],
|
|
1769
|
+
}
|
|
1770
|
+
)
|
|
1798
1771
|
|
|
1799
1772
|
# Fix edit boundaries where replacement content duplicates adjacent lines
|
|
1800
1773
|
source_lines = original_content.splitlines()
|
|
@@ -24,6 +24,12 @@ OPERATION_NOUNS = {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
|
|
27
|
+
USER_EDIT_CATEGORIES = {
|
|
28
|
+
"no_changes": "No Changes",
|
|
29
|
+
"syntax_errors": "Syntax Errors",
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
27
33
|
class Tool(BaseTool):
|
|
28
34
|
NORM_NAME = "edittext"
|
|
29
35
|
TRACK_INVOCATIONS = False
|
|
@@ -37,54 +43,58 @@ class Tool(BaseTool):
|
|
|
37
43
|
"name": "EditText",
|
|
38
44
|
"description": (
|
|
39
45
|
"Edit text in one or more files using content ID markers. "
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"content ID references. "
|
|
46
|
-
"Start and end values are inclusive: start and end content IDs both count as "
|
|
47
|
-
"part of the range to replace or delete. "
|
|
48
|
-
"Edits within a file must not be adjacent or overlapping."
|
|
46
|
+
"You can perform multiple 'replace' or 'delete' operations in a single call. "
|
|
47
|
+
"CRITICAL RULES: "
|
|
48
|
+
"1. Start and end content IDs are INCLUSIVE. Both will be modified or deleted. "
|
|
49
|
+
"2. Edits within the same file MUST NOT be adjacent or overlapping. "
|
|
50
|
+
"3. For empty files, you MUST use '@000' as the content ID reference."
|
|
49
51
|
),
|
|
50
52
|
"parameters": {
|
|
51
53
|
"type": "object",
|
|
52
54
|
"properties": {
|
|
53
55
|
"edits": {
|
|
54
56
|
"type": "array",
|
|
57
|
+
"description": (
|
|
58
|
+
"List of edit operations to apply. Each edit requires a "
|
|
59
|
+
"file path, operation type, start/end IDs, and text."
|
|
60
|
+
),
|
|
55
61
|
"items": {
|
|
56
62
|
"type": "object",
|
|
57
63
|
"properties": {
|
|
58
64
|
"file_path": {
|
|
59
65
|
"type": "string",
|
|
60
|
-
"description":
|
|
66
|
+
"description": (
|
|
67
|
+
"The absolute or relative path to the file being edited."
|
|
68
|
+
),
|
|
61
69
|
},
|
|
62
70
|
"operation": {
|
|
63
71
|
"type": "string",
|
|
64
72
|
"enum": ["replace", "delete"],
|
|
65
73
|
"description": (
|
|
66
|
-
"
|
|
67
|
-
"
|
|
74
|
+
"Choose 'replace' to swap the ID range with new text, "
|
|
75
|
+
"or 'delete' to remove the ID range entirely."
|
|
68
76
|
),
|
|
69
77
|
},
|
|
70
78
|
"start_line": {
|
|
71
79
|
"type": "string",
|
|
72
80
|
"description": (
|
|
73
|
-
"
|
|
81
|
+
"The exact content ID and demarcator for the start of the edit "
|
|
82
|
+
"(e.g., 'abc::'). For empty files, use '@000'."
|
|
74
83
|
),
|
|
75
84
|
},
|
|
76
85
|
"end_line": {
|
|
77
86
|
"type": "string",
|
|
78
87
|
"description": (
|
|
79
|
-
"
|
|
88
|
+
"The exact content ID and demarcator for the end of the edit "
|
|
89
|
+
"(e.g., 'xyz::'). For empty files, use '@000'."
|
|
80
90
|
),
|
|
81
91
|
},
|
|
82
92
|
"text": {
|
|
83
93
|
"type": "string",
|
|
84
94
|
"description": (
|
|
85
|
-
"
|
|
86
|
-
|
|
87
|
-
"
|
|
95
|
+
"The exact replacement text. If operation is 'delete', "
|
|
96
|
+
'this MUST be an empty string (""). '
|
|
97
|
+
"NEVER include content IDs in this text."
|
|
88
98
|
),
|
|
89
99
|
},
|
|
90
100
|
},
|
|
@@ -96,9 +106,11 @@ class Tool(BaseTool):
|
|
|
96
106
|
"text",
|
|
97
107
|
],
|
|
98
108
|
},
|
|
99
|
-
"description": "Array of edits to apply.",
|
|
100
109
|
},
|
|
101
|
-
"change_id": {
|
|
110
|
+
"change_id": {
|
|
111
|
+
"type": "string",
|
|
112
|
+
"description": "Optional tracking ID for this batch of edits.",
|
|
113
|
+
},
|
|
102
114
|
},
|
|
103
115
|
"required": ["edits"],
|
|
104
116
|
},
|
|
@@ -255,7 +267,9 @@ class Tool(BaseTool):
|
|
|
255
267
|
|
|
256
268
|
except Exception as e:
|
|
257
269
|
# Record failed edit but continue with others
|
|
258
|
-
file_failed_edits.append(
|
|
270
|
+
file_failed_edits.append(
|
|
271
|
+
f"Edit {edit_index + 1} - {cls._categorize_edit_error(str(e))}"
|
|
272
|
+
)
|
|
259
273
|
continue
|
|
260
274
|
|
|
261
275
|
# Apply all operations in batch
|
|
@@ -269,13 +283,27 @@ class Tool(BaseTool):
|
|
|
269
283
|
if new_content != original_content:
|
|
270
284
|
file_successful_edits += len(successful_ops)
|
|
271
285
|
else:
|
|
272
|
-
|
|
286
|
+
# Be specific about why content didn't change
|
|
287
|
+
if failed_ops:
|
|
288
|
+
error_details = "; ".join(
|
|
289
|
+
f"Edit {op['index'] + 1}: {op['error']}" for op in failed_ops
|
|
290
|
+
)
|
|
291
|
+
raise ToolError(
|
|
292
|
+
f"Invalid Edit - Update content ID bounds: {error_details}"
|
|
293
|
+
)
|
|
294
|
+
else:
|
|
295
|
+
raise ToolError(
|
|
296
|
+
"Invalid Edit - Update content ID bounds - "
|
|
297
|
+
"all edits resulted in unchanged content"
|
|
298
|
+
)
|
|
273
299
|
|
|
274
300
|
if len(failed_ops):
|
|
275
301
|
for failed_op in failed_ops:
|
|
276
302
|
op_index = failed_op["index"]
|
|
277
303
|
op_error = failed_op["error"]
|
|
278
|
-
file_failed_edits.append(
|
|
304
|
+
file_failed_edits.append(
|
|
305
|
+
f"Edit {op_index + 1} - {cls._categorize_edit_error(str(op_error))}"
|
|
306
|
+
)
|
|
279
307
|
except Exception as e:
|
|
280
308
|
# If batch operation fails, mark all operations as failed
|
|
281
309
|
for edit_index, _ in file_edits:
|
|
@@ -339,7 +367,9 @@ class Tool(BaseTool):
|
|
|
339
367
|
except Exception as e:
|
|
340
368
|
# Record all edits for this file as failed
|
|
341
369
|
for edit_index, _ in file_edits:
|
|
342
|
-
all_failed_edits.append(
|
|
370
|
+
all_failed_edits.append(
|
|
371
|
+
f"Edit {edit_index + 1} - {cls._categorize_edit_error(str(e))}"
|
|
372
|
+
)
|
|
343
373
|
continue
|
|
344
374
|
|
|
345
375
|
# If dry run, return all results
|
|
@@ -360,10 +390,6 @@ class Tool(BaseTool):
|
|
|
360
390
|
raise ToolError(error_msg)
|
|
361
391
|
|
|
362
392
|
# 5. Format and return result
|
|
363
|
-
# Log failed edit messages to console for visibility
|
|
364
|
-
if all_failed_edits:
|
|
365
|
-
for failed_msg in all_failed_edits:
|
|
366
|
-
coder.io.tool_error(failed_msg)
|
|
367
393
|
|
|
368
394
|
if files_processed == 1:
|
|
369
395
|
# Single file case
|
|
@@ -459,6 +485,9 @@ class Tool(BaseTool):
|
|
|
459
485
|
original_content = coder.io.read_text(abs_path)
|
|
460
486
|
|
|
461
487
|
if original_content is not None:
|
|
488
|
+
start_line, end_line = resolve_content_to_hashline_ids(
|
|
489
|
+
original_content, start_line, end_line
|
|
490
|
+
)
|
|
462
491
|
diff_output = get_hashline_diff(
|
|
463
492
|
original_content=strip_hashline(original_content),
|
|
464
493
|
start_line_hash=start_line,
|
|
@@ -483,3 +512,21 @@ class Tool(BaseTool):
|
|
|
483
512
|
coder.io.tool_output("")
|
|
484
513
|
|
|
485
514
|
tool_footer(coder=coder, tool_response=tool_response, params=params)
|
|
515
|
+
|
|
516
|
+
@classmethod
|
|
517
|
+
def _categorize_edit_error(cls, error_msg: str) -> str:
|
|
518
|
+
"""Categorize an edit error message into a user-friendly display category.
|
|
519
|
+
|
|
520
|
+
Maps errors from apply_hashline_operations to simplified category names
|
|
521
|
+
for user-facing output instead of displaying full error details.
|
|
522
|
+
|
|
523
|
+
Args:
|
|
524
|
+
error_msg: The raw error message string.
|
|
525
|
+
|
|
526
|
+
Returns:
|
|
527
|
+
str: The display category name (e.g., "No Changes", "Syntax Errors").
|
|
528
|
+
"""
|
|
529
|
+
error_lower = error_msg.lower()
|
|
530
|
+
if "syntax error" in error_lower or "introduces new syntax" in error_lower:
|
|
531
|
+
return USER_EDIT_CATEGORIES["syntax_errors"]
|
|
532
|
+
return USER_EDIT_CATEGORIES["no_changes"]
|