cecli-dev 0.96.4__tar.gz → 0.96.6__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.96.4 → cecli_dev-0.96.6}/PKG-INFO +12 -12
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/README.md +11 -11
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/__init__.py +1 -1
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/_version.py +3 -3
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/agent_coder.py +1 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/architect_coder.py +8 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/base_coder.py +21 -6
- cecli_dev-0.96.6/cecli/helpers/command_parser.py +179 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/io.py +44 -15
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/main.py +2 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tui/app.py +23 -6
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tui/widgets/output.py +21 -18
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tui/worker.py +1 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli_dev.egg-info/PKG-INFO +12 -12
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli_dev.egg-info/SOURCES.txt +1 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/.dockerignore +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/.flake8 +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/.gitattributes +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/.github/workflows/check_pypi_version.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/.github/workflows/docker-build-test.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/.github/workflows/docker-release.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/.github/workflows/issues.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/.github/workflows/pages.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/.github/workflows/pre-commit.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/.github/workflows/release.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/.github/workflows/ubuntu-tests.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/.github/workflows/windows-tests.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/.github/workflows/windows_check_pypi_version.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/.gitignore +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/.pre-commit-config.yaml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/CHANGELOG.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/CNAME +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/CONTRIBUTING.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/HISTORY.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/LICENSE.txt +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/MANIFEST.in +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/Dockerfile +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/README.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/__init__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/benchmark.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/benchmark_classic.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/clone-exercism.sh +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/cpp-test.sh +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/docker.sh +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/docker_build.sh +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/install-docker-ubuntu.sh +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/npm-test.sh +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/over_time.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/plot.sh +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/plots.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/problem_stats.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/prompts.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/refactor_tools.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/rsync.sh +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/rungrid.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/swe-bench-lite.txt +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/swe-bench.txt +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/swe_bench.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/benchmark/test_benchmark.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/__main__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/args.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/args_formatter.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/change_tracker.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/__init__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/ask_coder.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/chat_chunks.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/context_coder.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/copypaste_coder.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/editblock_coder.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/editblock_fenced_coder.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/editblock_func_coder.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/editor_diff_fenced_coder.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/editor_editblock_coder.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/editor_whole_coder.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/help_coder.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/patch_coder.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/search_replace.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/shell.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/single_wholefile_func_coder.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/udiff_coder.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/udiff_simple.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/wholefile_coder.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/coders/wholefile_func_coder.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/__init__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/add.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/agent.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/architect.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/ask.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/chat_mode.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/clear.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/code.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/command_prefix.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/commit.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/compact.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/context.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/context_blocks.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/context_management.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/copy.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/copy_context.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/core.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/diff.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/drop.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/editor.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/editor_model.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/exit.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/git.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/help.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/history_search.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/lint.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/list_sessions.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/load.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/load_mcp.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/load_session.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/load_skill.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/ls.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/map.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/map_refresh.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/model.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/models.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/multiline_mode.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/paste.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/quit.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/read_only.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/read_only_stub.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/reasoning_effort.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/remove_mcp.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/remove_skill.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/report.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/reset.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/run.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/save.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/save_session.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/settings.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/terminal_data/linux.keytab +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/terminal_setup.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/test.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/think_tokens.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/tokens.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/undo.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/utils/__init__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/utils/base_command.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/utils/helpers.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/utils/registry.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/utils/save_load_manager.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/voice.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/weak_model.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/commands/web.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/deprecated_args.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/diffs.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/dump.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/editor.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/exceptions.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/format_settings.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/help.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/help_pats.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/__init__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/background_commands.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/conversation/__init__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/conversation/base_message.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/conversation/files.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/conversation/integration.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/conversation/manager.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/conversation/tags.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/conversation/utils.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/copypaste.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/coroutines.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/file_searcher.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/model_providers.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/nested.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/plugin_manager.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/profiler.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/requests.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/similarity.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/helpers/skills.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/history.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/linter.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/llm.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/mcp/__init__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/mcp/manager.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/mcp/oauth.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/mcp/server.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/mcp/utils.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/mdstream.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/models.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/onboarding.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/__init__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/agent.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/architect.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/ask.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/base.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/context.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/copypaste.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/editblock.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/editblock_fenced.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/editblock_func.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/editor_diff_fenced.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/editor_editblock.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/editor_whole.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/help.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/patch.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/single_wholefile_func.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/udiff.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/udiff_simple.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/utils/__init__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/utils/registry.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/utils/system.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/wholefile.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/prompts/wholefile_func.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/README.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/reasoning_tags.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/repo.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/repomap.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/report.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/resources/__init__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/resources/model-metadata.json +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/resources/model-settings.yml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/resources/providers.json +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/run_cmd.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/scrape.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/sendchat.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/sessions.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/special.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/__init__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/command.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/command_interactive.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/context_manager.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/delete_block.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/delete_line.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/delete_lines.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/extract_lines.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/finished.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/git_branch.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/git_diff.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/git_log.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/git_remote.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/git_show.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/git_status.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/grep.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/indent_lines.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/insert_block.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/list_changes.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/load_skill.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/ls.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/remove_skill.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/replace_text.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/show_numbered_context.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/thinking.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/undo_change.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/update_todo_list.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/utils/base_tool.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/utils/helpers.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/utils/output.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/utils/registry.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/view_files_matching.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tools/view_files_with_symbol.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tui/__init__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tui/io.py +2 -2
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tui/styles.tcss +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tui/widgets/__init__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tui/widgets/completion_bar.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tui/widgets/file_list.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tui/widgets/footer.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tui/widgets/input_area.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tui/widgets/input_container.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tui/widgets/key_hints.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/tui/widgets/status_bar.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/urls.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/utils.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/versioncheck.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/voice.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/waiting.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/watch.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/watch_prompts.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/Gemfile +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/_includes/blame.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/_includes/get-started.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/_includes/help-tip.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/_includes/help.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/_includes/install.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/_includes/keys.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/_includes/model-warnings.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/_includes/multi-line.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/_includes/python-m-aider.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/_includes/recording.css +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/_includes/recording.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/_includes/replit-pipx.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/_includes/works-best.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/_sass/custom/custom.scss +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/config/adv-model-settings.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/config/agent-mode.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/config/aider_conf.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/config/api-keys.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/config/custom-commands.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/config/custom-system-prompts.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/config/dotenv.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/config/editor.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/config/mcp.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/config/model-aliases.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/config/options.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/config/reasoning.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/config/skills.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/config/tui.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/config.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/faq.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/git.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/index.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/install/codespaces.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/install/docker.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/install/optional.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/install/replit.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/install.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/languages.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/legal/contributor-agreement.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/legal/privacy.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms/anthropic.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms/azure.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms/bedrock.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms/cohere.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms/deepseek.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms/gemini.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms/github.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms/groq.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms/lm-studio.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms/ollama.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms/openai-compat.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms/openai.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms/openrouter.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms/other.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms/vertex.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms/warnings.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms/xai.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/llms.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/more/analytics.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/more/edit-formats.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/more/infinite-output.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/more-info.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/recordings/auto-accept-architect.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/recordings/dont-drop-original-read-files.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/recordings/index.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/recordings/model-accepts-settings.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/recordings/tree-sitter-language-pack.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/repomap.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/scripting.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/sessions.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/troubleshooting/aider-not-found.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/troubleshooting/imports.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/troubleshooting/support.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/troubleshooting/warnings.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/troubleshooting.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/usage/browser.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/usage/caching.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/usage/commands.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/usage/conventions.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/usage/copypaste.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/usage/images-urls.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/usage/lint-test.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/usage/modes.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/usage/not-code.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/usage/notifications.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/usage/tips.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/usage/tutorials.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/usage/voice.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/usage/watch.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/docs/usage.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli/website/share/index.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli_dev.egg-info/dependency_links.txt +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli_dev.egg-info/entry_points.txt +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli_dev.egg-info/requires.txt +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/cecli_dev.egg-info/top_level.txt +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/docker/Dockerfile +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/pyproject.toml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/pytest.ini +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/requirements/common-constraints.txt +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/requirements/requirements-dev.in +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/requirements/requirements-dev.txt +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/requirements/requirements-help.in +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/requirements/requirements-help.txt +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/requirements/requirements-playwright.in +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/requirements/requirements-playwright.txt +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/requirements/requirements.in +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/requirements/tree-sitter.in +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/requirements.txt +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/30k-image.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/Dockerfile.jekyll +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/__init__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/blame.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/clean_metadata.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/cost_analyzer.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/dl_icons.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/filter-chat-mode.js +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/generate_providers.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/get_contributor_list.js +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/history_prompts.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/homepage.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/issues.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/jekyll_build.sh +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/jekyll_run.sh +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/logo_svg.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/pip-compile.sh +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/recording_audio.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/redact-cast.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/rename_to_cecli.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/tmux_record.sh +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/tsl_pack_langs.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/update-blame.sh +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/update-docs.sh +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/update-history.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/versionbump.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/scripts/yank-old-versions.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/setup.cfg +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/shim.pyproject.toml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/__init__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/__init__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_aws_credentials.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_background_commands.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_coder.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_commands.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_custom_commands.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_deprecated.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_editblock.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_editor.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_exceptions.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_find_or_blocks.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_history.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_io.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_linter.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_main.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_model_info_manager.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_model_provider_manager.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_models.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_onboarding.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_plugin_manager.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_prompts.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_reasoning.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_repo.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_repomap.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_run_cmd.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_sanity_check_repo.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_scripting.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_sendchat.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_sessions.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_skills.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_special.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_ssl_verification.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_udiff.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_urls.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_voice.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_watch.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/basic/test_wholefile.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/coders/test_copypaste_coder.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/conftest.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/chat-history.md +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/arduino/test.ino +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/c/test.c +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/chatito/test.chatito +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/clojure/test.clj +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/cpp/test.cpp +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/csharp/test.cs +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/d/test.d +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/dart/test.dart +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/elisp/test.el +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/elixir/test.ex +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/elm/test.elm +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/gleam/test.gleam +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/go/test.go +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/haskell/test.hs +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/hcl/test.tf +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/java/test.java +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/javascript/test.js +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/kotlin/test.kt +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/lua/test.lua +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/matlab/test.m +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/ocaml/test.ml +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/php/test.php +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/pony/test.pony +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/properties/test.properties +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/python/test.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/ql/test.ql +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/r/test.r +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/racket/test.rkt +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/ruby/test.rb +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/rust/test.rs +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/scala/test.scala +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/solidity/test.sol +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/swift/test.swift +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/tsx/test.tsx +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/typescript/test.ts +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/udev/test.rules +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/languages/zig/test.zig +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/sample-code-base/sample.js +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/sample-code-base/sample.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/watch.js +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/watch.lisp +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/watch.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/fixtures/watch_question.js +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/help/test_help.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/mcp/__init__.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/mcp/test_manager.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/scrape/test_playwright_disable.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/scrape/test_scrape.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/test_conversation_integration.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/test_conversation_system.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/tools/test_git_branch.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/tools/test_git_diff.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/tools/test_grep.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/tools/test_insert_block.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/tools/test_registry.py +0 -0
- {cecli_dev-0.96.4 → cecli_dev-0.96.6}/tests/tools/test_show_numbered_context.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cecli-dev
|
|
3
|
-
Version: 0.96.
|
|
3
|
+
Version: 0.96.6
|
|
4
4
|
Summary: we also can't pronounce cecli
|
|
5
5
|
Project-URL: Homepage, https://github.com/dwash96/cecli
|
|
6
6
|
Project-URL: Documentation, https://github.com/dwash96/cecli
|
|
@@ -131,14 +131,14 @@ or
|
|
|
131
131
|
uv pip install --native-tls cecli-dev
|
|
132
132
|
```
|
|
133
133
|
|
|
134
|
-
The package exports a `cecli` command that accepts all of Aider's configuration options
|
|
134
|
+
The package exports a `cecli` command that accepts all of Aider's configuration options (and a few more!)
|
|
135
135
|
|
|
136
136
|
### Tool Installation
|
|
137
137
|
```bash
|
|
138
138
|
uv tool install --native-tls --python python3.12 cecli-dev
|
|
139
139
|
```
|
|
140
140
|
|
|
141
|
-
Use the tool installation so
|
|
141
|
+
Use the tool installation so cecli doesn't interfere with your development environment
|
|
142
142
|
|
|
143
143
|
## Configuration
|
|
144
144
|
|
|
@@ -155,15 +155,15 @@ cache-prompts: true
|
|
|
155
155
|
check-update: true
|
|
156
156
|
debug: false
|
|
157
157
|
enable-context-compaction: true
|
|
158
|
-
context-compaction-max-tokens:
|
|
159
|
-
env-file: .
|
|
158
|
+
context-compaction-max-tokens: 0.8
|
|
159
|
+
env-file: .cecli.env
|
|
160
160
|
show-model-warnings: true
|
|
161
|
-
use-enhanced-map: true
|
|
161
|
+
use-enhanced-map: true.p
|
|
162
162
|
watch-files: false
|
|
163
163
|
tui: true
|
|
164
164
|
|
|
165
165
|
agent-config:
|
|
166
|
-
large_file_token_threshold:
|
|
166
|
+
large_file_token_threshold: 8192
|
|
167
167
|
skip_cli_confirmations: false
|
|
168
168
|
|
|
169
169
|
mcp-servers:
|
|
@@ -173,7 +173,7 @@ mcp-servers:
|
|
|
173
173
|
url: https://mcp.context7.com/mcp
|
|
174
174
|
```
|
|
175
175
|
|
|
176
|
-
Use the adjacent .
|
|
176
|
+
Use the adjacent .cecli.env file to store model api keys as environment variables, e.g:
|
|
177
177
|
|
|
178
178
|
```
|
|
179
179
|
ANTHROPIC_API_KEY="..."
|
|
@@ -185,7 +185,7 @@ DEEPSEEK_API_KEY="..."
|
|
|
185
185
|
|
|
186
186
|
### Run Program
|
|
187
187
|
|
|
188
|
-
If you are in the directory with your .
|
|
188
|
+
If you are in the directory with your .cecli.conf.yml file, then simply running `cecli` or `aider-ce` will start the agent with your configuration. For best results, since terminal emulators can be finicky, we highly suggest running:
|
|
189
189
|
|
|
190
190
|
```bash
|
|
191
191
|
cecli --terminal-setup
|
|
@@ -210,7 +210,7 @@ This command will make sure all commands ran by the coding agent happen in conte
|
|
|
210
210
|
|
|
211
211
|
## Project Roadmap/Goals
|
|
212
212
|
|
|
213
|
-
The current priorities are to improve core capabilities and user experience of the
|
|
213
|
+
The current priorities are to improve core capabilities and user experience of the `cecli` project
|
|
214
214
|
|
|
215
215
|
1. **Base Asynchronicity (cecli coroutine-experiment branch)**
|
|
216
216
|
* [x] Refactor codebase to have the main loop run asynchronously
|
|
@@ -223,14 +223,14 @@ The current priorities are to improve core capabilities and user experience of t
|
|
|
223
223
|
|
|
224
224
|
3. **Context Discovery** - [Discussion](https://github.com/dwash96/cecli/issues/46)
|
|
225
225
|
* [ ] Develop AST-based search capabilities
|
|
226
|
-
* [
|
|
226
|
+
* [x] Enhance file search with ripgrep integration
|
|
227
227
|
* [ ] Implement RAG (Retrieval-Augmented Generation) for better code retrieval
|
|
228
228
|
* [ ] Build an explicit workflow and local tooling for internal discovery mechanisms
|
|
229
229
|
|
|
230
230
|
4. **Context Delivery** - [Discussion](https://github.com/dwash96/cecli/issues/47)
|
|
231
231
|
* [ ] Use workflow for internal discovery to better target file snippets needed for specific tasks
|
|
232
232
|
* [ ] Add support for partial files and code snippets in model completion messages
|
|
233
|
-
* [
|
|
233
|
+
* [x] Update message request structure for optimal caching
|
|
234
234
|
|
|
235
235
|
5. **TUI Experience** - [Discussion](https://github.com/dwash96/cecli/issues/48)
|
|
236
236
|
* [x] Add a full TUI (probably using textual) to have a visual interface competitive with the other coding agent terminal programs
|
|
@@ -47,14 +47,14 @@ or
|
|
|
47
47
|
uv pip install --native-tls cecli-dev
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
-
The package exports a `cecli` command that accepts all of Aider's configuration options
|
|
50
|
+
The package exports a `cecli` command that accepts all of Aider's configuration options (and a few more!)
|
|
51
51
|
|
|
52
52
|
### Tool Installation
|
|
53
53
|
```bash
|
|
54
54
|
uv tool install --native-tls --python python3.12 cecli-dev
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
-
Use the tool installation so
|
|
57
|
+
Use the tool installation so cecli doesn't interfere with your development environment
|
|
58
58
|
|
|
59
59
|
## Configuration
|
|
60
60
|
|
|
@@ -71,15 +71,15 @@ cache-prompts: true
|
|
|
71
71
|
check-update: true
|
|
72
72
|
debug: false
|
|
73
73
|
enable-context-compaction: true
|
|
74
|
-
context-compaction-max-tokens:
|
|
75
|
-
env-file: .
|
|
74
|
+
context-compaction-max-tokens: 0.8
|
|
75
|
+
env-file: .cecli.env
|
|
76
76
|
show-model-warnings: true
|
|
77
|
-
use-enhanced-map: true
|
|
77
|
+
use-enhanced-map: true.p
|
|
78
78
|
watch-files: false
|
|
79
79
|
tui: true
|
|
80
80
|
|
|
81
81
|
agent-config:
|
|
82
|
-
large_file_token_threshold:
|
|
82
|
+
large_file_token_threshold: 8192
|
|
83
83
|
skip_cli_confirmations: false
|
|
84
84
|
|
|
85
85
|
mcp-servers:
|
|
@@ -89,7 +89,7 @@ mcp-servers:
|
|
|
89
89
|
url: https://mcp.context7.com/mcp
|
|
90
90
|
```
|
|
91
91
|
|
|
92
|
-
Use the adjacent .
|
|
92
|
+
Use the adjacent .cecli.env file to store model api keys as environment variables, e.g:
|
|
93
93
|
|
|
94
94
|
```
|
|
95
95
|
ANTHROPIC_API_KEY="..."
|
|
@@ -101,7 +101,7 @@ DEEPSEEK_API_KEY="..."
|
|
|
101
101
|
|
|
102
102
|
### Run Program
|
|
103
103
|
|
|
104
|
-
If you are in the directory with your .
|
|
104
|
+
If you are in the directory with your .cecli.conf.yml file, then simply running `cecli` or `aider-ce` will start the agent with your configuration. For best results, since terminal emulators can be finicky, we highly suggest running:
|
|
105
105
|
|
|
106
106
|
```bash
|
|
107
107
|
cecli --terminal-setup
|
|
@@ -126,7 +126,7 @@ This command will make sure all commands ran by the coding agent happen in conte
|
|
|
126
126
|
|
|
127
127
|
## Project Roadmap/Goals
|
|
128
128
|
|
|
129
|
-
The current priorities are to improve core capabilities and user experience of the
|
|
129
|
+
The current priorities are to improve core capabilities and user experience of the `cecli` project
|
|
130
130
|
|
|
131
131
|
1. **Base Asynchronicity (cecli coroutine-experiment branch)**
|
|
132
132
|
* [x] Refactor codebase to have the main loop run asynchronously
|
|
@@ -139,14 +139,14 @@ The current priorities are to improve core capabilities and user experience of t
|
|
|
139
139
|
|
|
140
140
|
3. **Context Discovery** - [Discussion](https://github.com/dwash96/cecli/issues/46)
|
|
141
141
|
* [ ] Develop AST-based search capabilities
|
|
142
|
-
* [
|
|
142
|
+
* [x] Enhance file search with ripgrep integration
|
|
143
143
|
* [ ] Implement RAG (Retrieval-Augmented Generation) for better code retrieval
|
|
144
144
|
* [ ] Build an explicit workflow and local tooling for internal discovery mechanisms
|
|
145
145
|
|
|
146
146
|
4. **Context Delivery** - [Discussion](https://github.com/dwash96/cecli/issues/47)
|
|
147
147
|
* [ ] Use workflow for internal discovery to better target file snippets needed for specific tasks
|
|
148
148
|
* [ ] Add support for partial files and code snippets in model completion messages
|
|
149
|
-
* [
|
|
149
|
+
* [x] Update message request structure for optimal caching
|
|
150
150
|
|
|
151
151
|
5. **TUI Experience** - [Discussion](https://github.com/dwash96/cecli/issues/48)
|
|
152
152
|
* [x] Add a full TUI (probably using textual) to have a visual interface competitive with the other coding agent terminal programs
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.96.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 96,
|
|
31
|
+
__version__ = version = '0.96.6'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 96, 6)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g275cf49cc'
|
|
@@ -724,6 +724,7 @@ class AgentCoder(Coder):
|
|
|
724
724
|
) = await self._process_tool_commands(content)
|
|
725
725
|
if self.agent_finished:
|
|
726
726
|
self.tool_usage_history = []
|
|
727
|
+
self.reflected_message = None
|
|
727
728
|
if self.files_edited_by_tools:
|
|
728
729
|
_ = await self.auto_commit(self.files_edited_by_tools)
|
|
729
730
|
return False
|
|
@@ -61,6 +61,14 @@ class ArchitectCoder(AskCoder):
|
|
|
61
61
|
if self.verbose:
|
|
62
62
|
editor_coder.show_announcements()
|
|
63
63
|
|
|
64
|
+
postamble = """
|
|
65
|
+
The above changes are proposed changes.
|
|
66
|
+
You must repeat SEARCH/REPLACE blocks in order to apply edits.
|
|
67
|
+
Shell commands must also be duplicated in order to run them.
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
content = f"Please implement all requested changes from:\n{content}\n{postamble}"
|
|
71
|
+
|
|
64
72
|
try:
|
|
65
73
|
await editor_coder.generate(user_message=content, preproc=False)
|
|
66
74
|
|
|
@@ -38,7 +38,7 @@ import cecli.prompts.utils.system as prompts
|
|
|
38
38
|
from cecli import __version__, models, urls, utils
|
|
39
39
|
from cecli.commands import Commands, SwitchCoderSignal
|
|
40
40
|
from cecli.exceptions import LiteLLMExceptions
|
|
41
|
-
from cecli.helpers import coroutines, nested
|
|
41
|
+
from cecli.helpers import command_parser, coroutines, nested
|
|
42
42
|
from cecli.helpers.conversation import (
|
|
43
43
|
ConversationChunks,
|
|
44
44
|
ConversationManager,
|
|
@@ -1584,6 +1584,7 @@ class Coder:
|
|
|
1584
1584
|
pass
|
|
1585
1585
|
|
|
1586
1586
|
if not self.reflected_message:
|
|
1587
|
+
await self.auto_save_session(force=True)
|
|
1587
1588
|
break
|
|
1588
1589
|
|
|
1589
1590
|
if self.num_reflections >= self.max_reflections:
|
|
@@ -1603,6 +1604,8 @@ class Coder:
|
|
|
1603
1604
|
if self.enable_context_compaction:
|
|
1604
1605
|
await self.compact_context_if_needed()
|
|
1605
1606
|
|
|
1607
|
+
await self.auto_save_session(force=True)
|
|
1608
|
+
|
|
1606
1609
|
async def check_and_open_urls(self, exc, friendly_msg=None):
|
|
1607
1610
|
"""Check exception for URLs, offer to open in a browser, with user-friendly error msgs."""
|
|
1608
1611
|
text = str(exc)
|
|
@@ -2862,7 +2865,13 @@ class Coder:
|
|
|
2862
2865
|
if self.args.tui:
|
|
2863
2866
|
message = f"Add file to the chat? ({rel_fname})"
|
|
2864
2867
|
|
|
2865
|
-
if await self.io.confirm_ask(
|
|
2868
|
+
if await self.io.confirm_ask(
|
|
2869
|
+
message,
|
|
2870
|
+
subject=rel_fname,
|
|
2871
|
+
group=group,
|
|
2872
|
+
group_response=str(new_mentions),
|
|
2873
|
+
allow_never=True,
|
|
2874
|
+
):
|
|
2866
2875
|
self.add_rel_fname(rel_fname)
|
|
2867
2876
|
added_fnames.append(rel_fname)
|
|
2868
2877
|
else:
|
|
@@ -3776,7 +3785,7 @@ class Coder:
|
|
|
3776
3785
|
def apply_edits_dry_run(self, edits):
|
|
3777
3786
|
return edits
|
|
3778
3787
|
|
|
3779
|
-
async def auto_save_session(self):
|
|
3788
|
+
async def auto_save_session(self, force=False):
|
|
3780
3789
|
"""Automatically save the current session to {auto-save-session-name}.json."""
|
|
3781
3790
|
if not getattr(self.args, "auto_save", False):
|
|
3782
3791
|
return
|
|
@@ -3789,11 +3798,17 @@ class Coder:
|
|
|
3789
3798
|
self._autosave_future = None
|
|
3790
3799
|
|
|
3791
3800
|
if self._autosave_future and not self._autosave_future.done():
|
|
3792
|
-
|
|
3801
|
+
if force:
|
|
3802
|
+
try:
|
|
3803
|
+
await self._autosave_future
|
|
3804
|
+
except Exception:
|
|
3805
|
+
pass
|
|
3806
|
+
else:
|
|
3807
|
+
return
|
|
3793
3808
|
|
|
3794
3809
|
# Throttle autosave to run at most once every 15 seconds
|
|
3795
3810
|
current_time = time.time()
|
|
3796
|
-
if current_time - self._last_autosave_time >= 15.0:
|
|
3811
|
+
if current_time - self._last_autosave_time >= 15.0 or force:
|
|
3797
3812
|
try:
|
|
3798
3813
|
self._last_autosave_time = current_time
|
|
3799
3814
|
session_manager = SessionManager(self, self.io)
|
|
@@ -3832,7 +3847,7 @@ class Coder:
|
|
|
3832
3847
|
self.commands.cmd_running_event.set() # Command finished
|
|
3833
3848
|
|
|
3834
3849
|
async def handle_shell_commands(self, commands_str, group):
|
|
3835
|
-
commands =
|
|
3850
|
+
commands = command_parser.split_shell_commands(commands_str)
|
|
3836
3851
|
command_count = sum(
|
|
3837
3852
|
1 for cmd in commands if cmd.strip() and not cmd.strip().startswith("#")
|
|
3838
3853
|
)
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
from typing import List
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def split_shell_commands(commands_str: str) -> List[str]:
|
|
5
|
+
"""
|
|
6
|
+
Split shell commands on semicolons, respecting quoted strings and heredoc boundaries.
|
|
7
|
+
|
|
8
|
+
Args:
|
|
9
|
+
commands_str: String containing shell commands separated by semicolons
|
|
10
|
+
|
|
11
|
+
Returns:
|
|
12
|
+
List of command strings split at semicolons outside quotes/heredocs
|
|
13
|
+
"""
|
|
14
|
+
if not commands_str:
|
|
15
|
+
return []
|
|
16
|
+
|
|
17
|
+
commands: List[str] = []
|
|
18
|
+
current_command = []
|
|
19
|
+
|
|
20
|
+
# State tracking
|
|
21
|
+
in_single_quote = False
|
|
22
|
+
in_double_quote = False
|
|
23
|
+
in_heredoc = False
|
|
24
|
+
heredoc_delimiter = ""
|
|
25
|
+
heredoc_ignore_tabs = False # True for <<-EOF (dash before delimiter)
|
|
26
|
+
heredoc_seen_newline = False # Have we seen a newline since entering heredoc?
|
|
27
|
+
escaped = False
|
|
28
|
+
|
|
29
|
+
i = 0
|
|
30
|
+
n = len(commands_str)
|
|
31
|
+
|
|
32
|
+
while i < n:
|
|
33
|
+
char = commands_str[i]
|
|
34
|
+
|
|
35
|
+
if escaped:
|
|
36
|
+
# Current character is escaped, treat it as literal
|
|
37
|
+
current_command.append(char)
|
|
38
|
+
escaped = False
|
|
39
|
+
i += 1
|
|
40
|
+
continue
|
|
41
|
+
|
|
42
|
+
if char == "\\":
|
|
43
|
+
# Escape character
|
|
44
|
+
escaped = True
|
|
45
|
+
current_command.append(char)
|
|
46
|
+
i += 1
|
|
47
|
+
continue
|
|
48
|
+
|
|
49
|
+
if not in_heredoc:
|
|
50
|
+
# Not in heredoc, handle quotes and semicolons
|
|
51
|
+
if char == "'" and not in_double_quote:
|
|
52
|
+
in_single_quote = not in_single_quote
|
|
53
|
+
current_command.append(char)
|
|
54
|
+
elif char == '"' and not in_single_quote:
|
|
55
|
+
in_double_quote = not in_double_quote
|
|
56
|
+
current_command.append(char)
|
|
57
|
+
elif char == ";" and not in_single_quote and not in_double_quote:
|
|
58
|
+
# Split at semicolon outside quotes
|
|
59
|
+
command = "".join(current_command).strip()
|
|
60
|
+
if command:
|
|
61
|
+
commands.append(command)
|
|
62
|
+
current_command = []
|
|
63
|
+
else:
|
|
64
|
+
# Check for heredoc start (<<)
|
|
65
|
+
if char == "<" and i + 1 < n and commands_str[i + 1] == "<":
|
|
66
|
+
# Remember position for capturing the heredoc start
|
|
67
|
+
heredoc_start_pos = i
|
|
68
|
+
i += 2 # Skip "<<"
|
|
69
|
+
|
|
70
|
+
# Check for dash (<<-)
|
|
71
|
+
if i < n and commands_str[i] == "-":
|
|
72
|
+
heredoc_ignore_tabs = True
|
|
73
|
+
i += 1
|
|
74
|
+
|
|
75
|
+
# Skip whitespace before delimiter
|
|
76
|
+
while i < n and commands_str[i] in (" ", "\t"):
|
|
77
|
+
i += 1
|
|
78
|
+
|
|
79
|
+
# Parse delimiter (can be quoted or unquoted)
|
|
80
|
+
delimiter_start = i
|
|
81
|
+
|
|
82
|
+
# Check for quotes
|
|
83
|
+
if i < n and commands_str[i] in ("'", '"'):
|
|
84
|
+
quote_char = commands_str[i]
|
|
85
|
+
i += 1
|
|
86
|
+
delimiter_start = i
|
|
87
|
+
|
|
88
|
+
# Find closing quote
|
|
89
|
+
while i < n and commands_str[i] != quote_char:
|
|
90
|
+
i += 1
|
|
91
|
+
|
|
92
|
+
heredoc_delimiter = commands_str[delimiter_start:i]
|
|
93
|
+
if i < n:
|
|
94
|
+
i += 1 # Skip closing quote
|
|
95
|
+
else:
|
|
96
|
+
# Unquoted delimiter - alphanumeric and underscore only
|
|
97
|
+
while i < n and (commands_str[i].isalnum() or commands_str[i] == "_"):
|
|
98
|
+
i += 1
|
|
99
|
+
heredoc_delimiter = commands_str[delimiter_start:i]
|
|
100
|
+
|
|
101
|
+
if heredoc_delimiter:
|
|
102
|
+
# Valid heredoc found - capture the entire heredoc start
|
|
103
|
+
heredoc_start_text = commands_str[heredoc_start_pos:i]
|
|
104
|
+
current_command.append(heredoc_start_text)
|
|
105
|
+
|
|
106
|
+
# Enter heredoc mode
|
|
107
|
+
in_heredoc = True
|
|
108
|
+
heredoc_seen_newline = False
|
|
109
|
+
continue
|
|
110
|
+
else:
|
|
111
|
+
# Not a valid heredoc, treat as normal "<<"
|
|
112
|
+
current_command.append("<<")
|
|
113
|
+
continue
|
|
114
|
+
else:
|
|
115
|
+
current_command.append(char)
|
|
116
|
+
else:
|
|
117
|
+
# Inside heredoc
|
|
118
|
+
current_command.append(char)
|
|
119
|
+
|
|
120
|
+
# Track if we've seen a newline (heredoc content starts after newline)
|
|
121
|
+
if char == "\n":
|
|
122
|
+
heredoc_seen_newline = True
|
|
123
|
+
|
|
124
|
+
# Look ahead to see if next line starts with delimiter
|
|
125
|
+
j = i + 1
|
|
126
|
+
|
|
127
|
+
# Skip leading whitespace (tabs if heredoc_ignore_tabs)
|
|
128
|
+
while j < n and commands_str[j] in (" ", "\t"):
|
|
129
|
+
if heredoc_ignore_tabs and commands_str[j] == "\t":
|
|
130
|
+
j += 1
|
|
131
|
+
elif not heredoc_ignore_tabs:
|
|
132
|
+
j += 1
|
|
133
|
+
else:
|
|
134
|
+
break
|
|
135
|
+
|
|
136
|
+
# Check if we have the delimiter at this position
|
|
137
|
+
if (
|
|
138
|
+
j + len(heredoc_delimiter) <= n
|
|
139
|
+
and commands_str[j : j + len(heredoc_delimiter)] == heredoc_delimiter
|
|
140
|
+
):
|
|
141
|
+
# Check what comes after delimiter
|
|
142
|
+
k = j + len(heredoc_delimiter)
|
|
143
|
+
if k >= n or commands_str[k] in (" ", "\t", "\n", "\r", ";"):
|
|
144
|
+
# Found heredoc end
|
|
145
|
+
in_heredoc = False
|
|
146
|
+
heredoc_delimiter = ""
|
|
147
|
+
heredoc_ignore_tabs = False
|
|
148
|
+
heredoc_seen_newline = False
|
|
149
|
+
elif char == ";" and not heredoc_seen_newline:
|
|
150
|
+
# Semicolon before seeing a newline in heredoc mode
|
|
151
|
+
# This means heredoc start was immediately followed by semicolon
|
|
152
|
+
# Not a real heredoc - split at this semicolon
|
|
153
|
+
in_heredoc = False
|
|
154
|
+
heredoc_delimiter = ""
|
|
155
|
+
heredoc_ignore_tabs = False
|
|
156
|
+
heredoc_seen_newline = False
|
|
157
|
+
|
|
158
|
+
# Remove the semicolon from current_command
|
|
159
|
+
current_command.pop()
|
|
160
|
+
|
|
161
|
+
# Split at this semicolon
|
|
162
|
+
command = "".join(current_command).strip()
|
|
163
|
+
if command:
|
|
164
|
+
commands.append(command)
|
|
165
|
+
current_command = []
|
|
166
|
+
continue
|
|
167
|
+
|
|
168
|
+
i += 1
|
|
169
|
+
|
|
170
|
+
# Add the last command if any
|
|
171
|
+
if escaped:
|
|
172
|
+
# Handle trailing escape character
|
|
173
|
+
current_command.append("\\")
|
|
174
|
+
|
|
175
|
+
command = "".join(current_command).strip()
|
|
176
|
+
if command:
|
|
177
|
+
commands.append(command)
|
|
178
|
+
|
|
179
|
+
return commands
|
|
@@ -148,7 +148,6 @@ class AutoCompleter(Completer):
|
|
|
148
148
|
self.rel_fnames = rel_fnames
|
|
149
149
|
self.encoding = encoding
|
|
150
150
|
self.abs_read_only_fnames = abs_read_only_fnames or []
|
|
151
|
-
self.post_filter_commands = ["/add"]
|
|
152
151
|
|
|
153
152
|
fname_to_rel_fnames = defaultdict(list)
|
|
154
153
|
for rel_fname in addable_rel_fnames:
|
|
@@ -214,22 +213,48 @@ class AutoCompleter(Completer):
|
|
|
214
213
|
|
|
215
214
|
def get_command_completions(self, document, complete_event, text, words):
|
|
216
215
|
if len(words) == 1 and not text[-1].isspace():
|
|
216
|
+
# Handle command completion (e.g., typing "/ad" should complete to "/add")
|
|
217
217
|
partial = words[0].lower()
|
|
218
|
-
|
|
218
|
+
# Strip leading '/' if present for comparison with command names
|
|
219
|
+
if partial.startswith("/"):
|
|
220
|
+
partial = partial[1:]
|
|
221
|
+
# Compare with command names without leading '/'
|
|
222
|
+
candidates = [cmd for cmd in self.command_names if cmd[1:].startswith(partial)]
|
|
219
223
|
for candidate in sorted(candidates):
|
|
224
|
+
# Add back the leading '/' for the completion
|
|
220
225
|
yield Completion(candidate, start_position=-len(words[-1]))
|
|
221
226
|
return
|
|
222
227
|
|
|
223
|
-
|
|
224
|
-
|
|
228
|
+
# Handle command followed by space: trigger auto-completion with empty partial
|
|
229
|
+
if text[-1].isspace():
|
|
230
|
+
# We have a command followed by space, trigger auto-completion with empty string
|
|
231
|
+
if len(words) == 1:
|
|
232
|
+
# Command with no arguments yet, just a trailing space
|
|
233
|
+
partial = ""
|
|
234
|
+
# We need to get the command name without the trailing space
|
|
235
|
+
# The command is words[0] but might have leading '/'
|
|
236
|
+
cmd_text = words[0]
|
|
237
|
+
else:
|
|
238
|
+
# Command with arguments and trailing space
|
|
239
|
+
partial = ""
|
|
240
|
+
cmd_text = text.rstrip() # Remove trailing space for matching
|
|
241
|
+
else:
|
|
242
|
+
# No trailing space
|
|
243
|
+
if len(words) <= 1:
|
|
244
|
+
return
|
|
245
|
+
partial = words[-1].lower()
|
|
246
|
+
cmd_text = text
|
|
225
247
|
|
|
226
|
-
|
|
227
|
-
|
|
248
|
+
# Pass the text (without trailing space if present) to matching_commands
|
|
249
|
+
matches, matched_cmd, _ = self.commands.matching_commands(cmd_text.rstrip())
|
|
250
|
+
if not matches:
|
|
251
|
+
return
|
|
228
252
|
|
|
229
|
-
matches, _, _ = self.commands.matching_commands(cmd)
|
|
230
253
|
if len(matches) == 1:
|
|
231
254
|
cmd = matches[0]
|
|
232
|
-
elif
|
|
255
|
+
elif matched_cmd in matches:
|
|
256
|
+
cmd = matched_cmd
|
|
257
|
+
else:
|
|
233
258
|
return
|
|
234
259
|
|
|
235
260
|
raw_completer = self.commands.get_raw_completions(cmd)
|
|
@@ -242,11 +267,14 @@ class AutoCompleter(Completer):
|
|
|
242
267
|
if candidates is None:
|
|
243
268
|
return
|
|
244
269
|
|
|
245
|
-
if
|
|
246
|
-
candidates = [word for word in candidates if partial in word.lower()]
|
|
270
|
+
candidates = [word for word in candidates if partial in word.lower()]
|
|
247
271
|
|
|
248
272
|
for candidate in sorted(candidates):
|
|
249
|
-
|
|
273
|
+
# Calculate start position based on partial, not words[-1]
|
|
274
|
+
# When partial is empty (trailing space), start_position should be 0
|
|
275
|
+
# When partial is not empty, replace that many characters
|
|
276
|
+
start_position = -len(partial) if partial else 0
|
|
277
|
+
yield Completion(candidate, start_position=start_position)
|
|
250
278
|
|
|
251
279
|
def get_completions(self, document, complete_event):
|
|
252
280
|
self.tokenize()
|
|
@@ -256,8 +284,9 @@ class AutoCompleter(Completer):
|
|
|
256
284
|
if not words:
|
|
257
285
|
return
|
|
258
286
|
|
|
259
|
-
if text and text[-1].isspace():
|
|
260
|
-
# don't keep completing after a space
|
|
287
|
+
if text and text[-1].isspace() and not text.startswith("/"):
|
|
288
|
+
# don't keep completing after a space for non-commands
|
|
289
|
+
# For commands, we want to allow completion with empty string partial
|
|
261
290
|
return
|
|
262
291
|
|
|
263
292
|
if text[0] == "/":
|
|
@@ -1235,11 +1264,11 @@ class InputOutput:
|
|
|
1235
1264
|
|
|
1236
1265
|
if self.yes is True and not explicit_yes_required:
|
|
1237
1266
|
res = "y"
|
|
1267
|
+
elif group_response and group_response in self.group_responses:
|
|
1268
|
+
return self.group_responses[group_response]
|
|
1238
1269
|
elif group and group.preference:
|
|
1239
1270
|
res = group.preference
|
|
1240
1271
|
self.user_input(f"{question} - {res}", log_only=False)
|
|
1241
|
-
elif group_response and group_response in self.group_responses:
|
|
1242
|
-
return self.group_responses[group_response]
|
|
1243
1272
|
else:
|
|
1244
1273
|
# Ring the bell if needed
|
|
1245
1274
|
self.ring_bell()
|
|
@@ -1202,6 +1202,7 @@ async def main_async(argv=None, input=None, output=None, force_git_root=None, re
|
|
|
1202
1202
|
return await graceful_exit(coder)
|
|
1203
1203
|
except SwitchCoderSignal as switch:
|
|
1204
1204
|
coder.ok_to_warm_cache = False
|
|
1205
|
+
await coder.auto_save_session(force=True)
|
|
1205
1206
|
|
|
1206
1207
|
if hasattr(switch, "placeholder") and switch.placeholder is not None:
|
|
1207
1208
|
io.placeholder = switch.placeholder
|
|
@@ -1229,6 +1230,7 @@ async def main_async(argv=None, input=None, output=None, force_git_root=None, re
|
|
|
1229
1230
|
|
|
1230
1231
|
except SystemExit:
|
|
1231
1232
|
sys.settrace(None)
|
|
1233
|
+
await coder.auto_save_session(force=True)
|
|
1232
1234
|
return await graceful_exit(coder)
|
|
1233
1235
|
|
|
1234
1236
|
|
|
@@ -884,7 +884,9 @@ class TUI(App):
|
|
|
884
884
|
suggestions = []
|
|
885
885
|
commands = self.worker.coder.commands
|
|
886
886
|
|
|
887
|
-
|
|
887
|
+
# Only return early for non-commands ending with space
|
|
888
|
+
# For commands, we want to allow completion with empty string partial
|
|
889
|
+
if len(text) and text[-1] == " " and not text.startswith("/"):
|
|
888
890
|
return
|
|
889
891
|
|
|
890
892
|
if "@" in text:
|
|
@@ -905,12 +907,21 @@ class TUI(App):
|
|
|
905
907
|
suggestions = all_commands
|
|
906
908
|
else:
|
|
907
909
|
suggestions = [c for c in all_commands if c.startswith(cmd_part)]
|
|
908
|
-
|
|
910
|
+
else:
|
|
909
911
|
# Complete command argument
|
|
912
|
+
# This handles both:
|
|
913
|
+
# 1. len(parts) > 1: command with arguments
|
|
914
|
+
# 2. len(parts) == 1 and text.endswith(" "): command with trailing space
|
|
910
915
|
cmd_name = cmd_part
|
|
911
|
-
end_lookup = text.rsplit(maxsplit=1)
|
|
912
916
|
|
|
913
|
-
|
|
917
|
+
if text.endswith(" "):
|
|
918
|
+
# Command with trailing space, empty argument prefix
|
|
919
|
+
arg_prefix = ""
|
|
920
|
+
else:
|
|
921
|
+
# Get the last word as argument prefix
|
|
922
|
+
end_lookup = text.rsplit(maxsplit=1)
|
|
923
|
+
arg_prefix = end_lookup[-1]
|
|
924
|
+
|
|
914
925
|
arg_prefix_lower = arg_prefix.lower()
|
|
915
926
|
|
|
916
927
|
# Check if this command needs path-based completion
|
|
@@ -955,8 +966,14 @@ class TUI(App):
|
|
|
955
966
|
"""Calculate the new text after applying completion."""
|
|
956
967
|
if current_text.startswith("/"):
|
|
957
968
|
parts = current_text.rsplit(maxsplit=1)
|
|
958
|
-
|
|
959
|
-
|
|
969
|
+
|
|
970
|
+
# Check if we have a command with trailing space
|
|
971
|
+
# This is when we want to insert argument completions after the space
|
|
972
|
+
if len(parts) == 1 and current_text.endswith(" "):
|
|
973
|
+
# Command with trailing space, insert completion after space
|
|
974
|
+
return current_text + completion
|
|
975
|
+
elif len(parts) == 1:
|
|
976
|
+
# Replace entire command (command name completion)
|
|
960
977
|
# Only add space if command takes arguments
|
|
961
978
|
commands = self.worker.coder.commands
|
|
962
979
|
try:
|