cecli-dev 0.99.1__tar.gz → 0.99.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/PKG-INFO +1 -1
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/__init__.py +1 -1
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/_version.py +3 -3
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/agent_coder.py +2 -2
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/base_coder.py +31 -8
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/monorepo/project.py +1 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/monorepo/workspace.py +11 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/skills.py +33 -1
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/io.py +25 -13
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/main.py +1 -1
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/agent.yml +12 -13
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/base.yml +1 -1
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/repo.py +105 -12
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/resources/model-metadata.json +1343 -195
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/utils/base_tool.py +3 -1
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/agent-mode.md +1 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/skills.md +113 -6
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/workspaces.md +1 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli_dev.egg-info/PKG-INFO +1 -1
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli_dev.egg-info/SOURCES.txt +1 -0
- cecli_dev-0.99.2/tests/helpers/monorepo/test_ignore_logic.py +103 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.dockerignore +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.flake8 +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.gitattributes +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/check_pypi_version.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/docker-build-test.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/docker-release.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/issues.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/pages.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/pre-commit.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/release.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/ubuntu-tests.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/windows-tests.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.github/workflows/windows_check_pypi_version.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.gitignore +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/.pre-commit-config.yaml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/CHANGELOG.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/CNAME +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/CONTRIBUTING.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/HISTORY.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/LICENSE.txt +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/MANIFEST.in +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/README.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/Dockerfile +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/README.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/benchmark.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/benchmark_classic.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/clone-exercism.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/cpp-test.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/docker.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/docker_build.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/install-docker-ubuntu.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/npm-test.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/over_time.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/plot.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/plots.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/problem_stats.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/prompts.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/refactor_tools.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/rsync.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/rungrid.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/swe-bench-lite.txt +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/swe-bench.txt +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/swe_bench.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/test_benchmark.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/variations.1.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/variations.2.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/variations.3.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/benchmark/variations.4.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/__main__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/args.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/args_formatter.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/change_tracker.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/architect_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/ask_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/chat_chunks.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/context_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/copypaste_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/editblock_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/editblock_fenced_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/editblock_func_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/editor_diff_fenced_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/editor_editblock_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/editor_whole_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/hashline_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/help_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/patch_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/search_replace.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/shell.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/single_wholefile_func_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/udiff_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/udiff_simple.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/wholefile_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/coders/wholefile_func_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/add.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/agent.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/agent_model.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/architect.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/ask.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/chat_mode.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/clear.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/code.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/command_prefix.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/commit.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/compact.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/context.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/context_blocks.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/context_management.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/copy.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/copy_context.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/core.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/diff.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/drop.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/editor.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/editor_model.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/exit.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/git.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/hashline.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/help.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/history_search.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/hooks.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/lint.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/list_sessions.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/load.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/load_hook.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/load_mcp.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/load_session.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/load_skill.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/ls.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/map.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/map_refresh.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/model.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/models.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/multiline_mode.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/paste.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/quit.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/read_only.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/read_only_stub.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/reasoning_effort.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/remove_hook.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/remove_mcp.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/remove_skill.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/report.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/reset.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/rules.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/run.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/save.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/save_session.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/settings.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/terminal_data/linux.keytab +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/terminal_setup.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/test.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/think_tokens.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/tokens.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/undo.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/utils/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/utils/base_command.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/utils/helpers.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/utils/registry.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/utils/save_load_manager.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/voice.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/weak_model.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/web.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/commands/workspace.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/deprecated_args.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/diffs.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/dump.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/editor.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/exceptions.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/format_settings.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/help.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/help_pats.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/background_commands.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/command_parser.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/conversation/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/conversation/base_message.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/conversation/files.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/conversation/integration.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/conversation/manager.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/conversation/service.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/conversation/tags.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/conversation/utils.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/copypaste.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/coroutines.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/file_searcher.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/hashline.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/hashpos/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/hashpos/hashpos.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/model_providers.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/monorepo/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/monorepo/config.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/monorepo/worktree.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/nested.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/plugin_manager.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/profiler.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/requests.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/responses.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/helpers/similarity.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/history.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/hooks/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/hooks/base.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/hooks/integration.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/hooks/manager.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/hooks/registry.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/hooks/types.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/interruptible_input.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/linter.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/llm.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/mcp/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/mcp/manager.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/mcp/oauth.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/mcp/server.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/mcp/utils.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/mdstream.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/models.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/onboarding.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/architect.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/ask.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/context.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/copypaste.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/editblock.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/editblock_fenced.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/editblock_func.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/editor_diff_fenced.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/editor_editblock.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/editor_whole.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/hashline.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/help.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/patch.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/single_wholefile_func.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/udiff.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/udiff_simple.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/utils/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/utils/registry.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/utils/system.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/wholefile.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/prompts/wholefile_func.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/README.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/reasoning_tags.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/repomap.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/report.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/resources/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/resources/model-settings.yml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/resources/providers.json +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/run_cmd.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/scrape.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/sendchat.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/sessions.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/special.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/command.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/command_interactive.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/context_manager.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/delete_text.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/finished.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/git_branch.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/git_diff.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/git_log.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/git_remote.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/git_show.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/git_status.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/grep.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/insert_text.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/list_changes.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/load_skill.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/ls.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/remove_skill.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/replace_text.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/show_context.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/thinking.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/undo_change.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/update_todo_list.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/utils/helpers.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/utils/output.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/utils/registry.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/view_files_matching.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tools/view_files_with_symbol.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/app.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/io.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/styles.tcss +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/completion_bar.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/file_list.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/footer.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/input_area.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/input_container.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/key_hints.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/output.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/widgets/status_bar.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/tui/worker.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/urls.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/utils.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/versioncheck.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/voice.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/waiting.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/watch.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/watch_prompts.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/Gemfile +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/blame.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/get-started.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/help-tip.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/help.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/install.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/keys.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/model-warnings.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/multi-line.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/python-m-aider.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/recording.css +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/recording.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_includes/works-best.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_features.scss +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_footer.scss +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_hero.scss +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_info.scss +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_layout.scss +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_reset.scss +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_testimonials.scss +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_typography.scss +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/_variables.scss +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/custom/custom.scss +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/_sass/global-overrides.scss +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/adv-model-settings.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/aider_conf.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/api-keys.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/custom-commands.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/custom-system-prompts.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/dotenv.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/editor.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/hooks.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/mcp.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/model-aliases.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/options.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/reasoning.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/security.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config/tui.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/config.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/faq.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/git.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/index.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/install/docker.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/install/optional.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/install.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/languages.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/legal/contributor-agreement.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/legal/privacy.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/anthropic.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/azure.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/bedrock.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/cohere.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/deepseek.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/gemini.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/github.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/groq.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/lm-studio.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/ollama.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/openai-compat.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/openai.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/openrouter.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/other.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/vertex.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/warnings.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms/xai.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/llms.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/more/analytics.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/more/edit-formats.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/more/infinite-output.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/more-info.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/repomap.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/scripting.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/cecli-not-found.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/imports.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/support.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting/warnings.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/troubleshooting.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/commands.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/conventions.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/copypaste.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/images-urls.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/lint-test.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/modes.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/not-code.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/notifications.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/sessions.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/tips.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/voice.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage/watch.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/docs/usage.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli/website/share/index.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli_dev.egg-info/dependency_links.txt +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli_dev.egg-info/entry_points.txt +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli_dev.egg-info/requires.txt +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/cecli_dev.egg-info/top_level.txt +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/docker/Dockerfile +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/pyproject.toml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/pytest.ini +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/common-constraints.txt +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/requirements-dev.in +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/requirements-dev.txt +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/requirements-help.in +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/requirements-help.txt +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/requirements-playwright.in +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/requirements-playwright.txt +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/requirements.in +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements/tree-sitter.in +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/requirements.txt +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/30k-image.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/Dockerfile.jekyll +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/blame.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/clean_metadata.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/cost_analyzer.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/dl_icons.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/filter-chat-mode.js +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/generate_providers.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/get_contributor_list.js +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/get_hashline.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/history_prompts.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/homepage.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/issues.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/jekyll_build.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/jekyll_run.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/logo_svg.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/pip-compile.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/recording_audio.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/redact-cast.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/rename_to_cecli.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/tmux_record.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/tsl_pack_langs.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/update-blame.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/update-docs.sh +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/update-history.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/versionbump.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/scripts/yank-old-versions.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/setup.cfg +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/shim.pyproject.toml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_aws_credentials.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_background_commands.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_commands.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_custom_commands.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_deprecated.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_editblock.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_editor.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_exceptions.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_find_or_blocks.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_hashline.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_history.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_io.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_linter.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_main.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_model_info_manager.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_model_provider_manager.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_models.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_onboarding.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_plugin_manager.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_prompts.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_reasoning.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_repo.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_repomap.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_run_cmd.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_sanity_check_repo.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_scripting.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_sendchat.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_sessions.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_skills.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_special.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_ssl_verification.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_udiff.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_urls.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_voice.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_watch.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/basic/test_wholefile.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/coders/test_copypaste_coder.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/conftest.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/conversations/test_conversation_integration.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/conversations/test_conversation_system.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/chat-history.md +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/arduino/test.ino +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/c/test.c +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/chatito/test.chatito +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/clojure/test.clj +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/cpp/test.cpp +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/csharp/test.cs +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/d/test.d +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/dart/test.dart +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/elisp/test.el +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/elixir/test.ex +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/elm/test.elm +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/gleam/test.gleam +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/go/test.go +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/haskell/test.hs +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/hcl/test.tf +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/java/test.java +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/javascript/test.js +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/kotlin/test.kt +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/lua/test.lua +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/matlab/test.m +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/ocaml/test.ml +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/php/test.php +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/pony/test.pony +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/properties/test.properties +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/python/test.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/ql/test.ql +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/r/test.r +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/racket/test.rkt +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/ruby/test.rb +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/rust/test.rs +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/scala/test.scala +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/solidity/test.sol +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/swift/test.swift +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/tsx/test.tsx +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/typescript/test.ts +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/udev/test.rules +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/languages/zig/test.zig +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/sample-code-base/sample.js +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/sample-code-base/sample.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/watch.js +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/watch.lisp +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/watch.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/fixtures/watch_question.js +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/help/test_help.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/helpers/monorepo/test_config.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/helpers/monorepo/test_config_active.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/helpers/monorepo/test_repomap_workspace.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/helpers/monorepo/test_workspace.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/hooks/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/hooks/test_base.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/hooks/test_manager.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/hooks/test_registry.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/mcp/__init__.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/mcp/test_manager.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/scrape/test_playwright_disable.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/scrape/test_scrape.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/tools/test_git_branch.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/tools/test_git_diff.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/tools/test_grep.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/tools/test_insert_block.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/tools/test_registry.py +0 -0
- {cecli_dev-0.99.1 → cecli_dev-0.99.2}/tests/tools/test_show_context.py +0 -0
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.99.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 99,
|
|
21
|
+
__version__ = version = '0.99.2'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 99, 2)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g7361036c0'
|
|
@@ -95,7 +95,7 @@ class AgentCoder(Coder):
|
|
|
95
95
|
super().__init__(*args, **kwargs)
|
|
96
96
|
|
|
97
97
|
def _setup_agent(self):
|
|
98
|
-
os.makedirs(".cecli/
|
|
98
|
+
os.makedirs(".cecli/temp", exist_ok=True)
|
|
99
99
|
|
|
100
100
|
def _get_agent_config(self):
|
|
101
101
|
"""
|
|
@@ -1020,7 +1020,7 @@ I will proceed based on the tool results and updated context.""")
|
|
|
1020
1020
|
self.model_kwargs = {
|
|
1021
1021
|
"temperature": default_temp + 0.1,
|
|
1022
1022
|
"frequency_penalty": default_fp + 0.2,
|
|
1023
|
-
"presence_penalty": 0.1,
|
|
1023
|
+
# "presence_penalty": 0.1,
|
|
1024
1024
|
}
|
|
1025
1025
|
else:
|
|
1026
1026
|
temperature = nested.getter(self.model_kwargs, "temperature", default_temp)
|
|
@@ -229,6 +229,7 @@ class Coder:
|
|
|
229
229
|
file_watcher=from_coder.file_watcher,
|
|
230
230
|
mcp_manager=from_coder.mcp_manager,
|
|
231
231
|
uuid=from_coder.uuid,
|
|
232
|
+
repo=from_coder.repo,
|
|
232
233
|
)
|
|
233
234
|
use_kwargs.update(update) # override to complete the switch
|
|
234
235
|
use_kwargs.update(kwargs) # override passed kwargs
|
|
@@ -328,6 +329,7 @@ class Coder:
|
|
|
328
329
|
uuid="",
|
|
329
330
|
):
|
|
330
331
|
# initialize from args.map_cache_dir
|
|
332
|
+
self.interrupt_event = asyncio.Event()
|
|
331
333
|
self.uuid = generate_unique_id()
|
|
332
334
|
if uuid:
|
|
333
335
|
self.uuid = uuid
|
|
@@ -1735,6 +1737,7 @@ class Coder:
|
|
|
1735
1737
|
|
|
1736
1738
|
self.io.tool_warning("\n\n^C KeyboardInterrupt")
|
|
1737
1739
|
|
|
1740
|
+
self.interrupt_event.set()
|
|
1738
1741
|
self.last_keyboard_interrupt = time.time()
|
|
1739
1742
|
|
|
1740
1743
|
# Old summarization system removed - using context compaction logic instead
|
|
@@ -2768,6 +2771,7 @@ class Coder:
|
|
|
2768
2771
|
|
|
2769
2772
|
def _print_tool_call_info(self, server_tool_calls):
|
|
2770
2773
|
"""Print information about an MCP tool call."""
|
|
2774
|
+
self.io.ring_bell()
|
|
2771
2775
|
# self.io.tool_output("Preparing to run MCP tools", bold=False)
|
|
2772
2776
|
|
|
2773
2777
|
for server, tool_calls in server_tool_calls.items():
|
|
@@ -3039,6 +3043,7 @@ class Coder:
|
|
|
3039
3043
|
return prompts.added_files.format(fnames=", ".join(added_fnames))
|
|
3040
3044
|
|
|
3041
3045
|
async def send(self, messages, model=None, functions=None, tools=None):
|
|
3046
|
+
self.interrupt_event.clear()
|
|
3042
3047
|
self.got_reasoning_content = False
|
|
3043
3048
|
self.ended_reasoning_content = False
|
|
3044
3049
|
|
|
@@ -3058,15 +3063,33 @@ class Coder:
|
|
|
3058
3063
|
self.token_profiler.start()
|
|
3059
3064
|
|
|
3060
3065
|
try:
|
|
3061
|
-
|
|
3062
|
-
|
|
3063
|
-
|
|
3064
|
-
|
|
3065
|
-
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
|
|
3066
|
+
completion_task = asyncio.create_task(
|
|
3067
|
+
model.send_completion(
|
|
3068
|
+
messages,
|
|
3069
|
+
functions,
|
|
3070
|
+
self.stream,
|
|
3071
|
+
self.temperature,
|
|
3072
|
+
# This could include any tools, but for now it is just MCP tools
|
|
3073
|
+
tools=tools,
|
|
3074
|
+
override_kwargs=self.model_kwargs.copy(),
|
|
3075
|
+
)
|
|
3076
|
+
)
|
|
3077
|
+
interrupt_task = asyncio.create_task(self.interrupt_event.wait())
|
|
3078
|
+
|
|
3079
|
+
done, pending = await asyncio.wait(
|
|
3080
|
+
{completion_task, interrupt_task},
|
|
3081
|
+
return_when=asyncio.FIRST_COMPLETED,
|
|
3069
3082
|
)
|
|
3083
|
+
|
|
3084
|
+
if interrupt_task in done:
|
|
3085
|
+
completion_task.cancel()
|
|
3086
|
+
try:
|
|
3087
|
+
await completion_task
|
|
3088
|
+
except asyncio.CancelledError:
|
|
3089
|
+
pass
|
|
3090
|
+
raise KeyboardInterrupt
|
|
3091
|
+
|
|
3092
|
+
hash_object, completion = completion_task.result()
|
|
3070
3093
|
self.chat_completion_call_hashes.append(hash_object.hexdigest())
|
|
3071
3094
|
|
|
3072
3095
|
if not isinstance(completion, ModelResponse):
|
|
@@ -24,6 +24,17 @@ class WorkspaceManager:
|
|
|
24
24
|
project = Project(self.path, proj_cfg)
|
|
25
25
|
project.initialize()
|
|
26
26
|
|
|
27
|
+
# Copy ignore files to workspace root
|
|
28
|
+
for proj_cfg in projects_config:
|
|
29
|
+
ignore_file = proj_cfg.get("ignore")
|
|
30
|
+
if ignore_file:
|
|
31
|
+
ignore_path = Path(ignore_file).expanduser()
|
|
32
|
+
if ignore_path.exists():
|
|
33
|
+
import shutil
|
|
34
|
+
|
|
35
|
+
dest_path = self.path / f"{proj_cfg['name']}.ignore"
|
|
36
|
+
shutil.copy2(ignore_path, dest_path)
|
|
37
|
+
|
|
27
38
|
# Write metadata
|
|
28
39
|
import json
|
|
29
40
|
|
|
@@ -35,6 +35,7 @@ class SkillContent:
|
|
|
35
35
|
references: Dict[str, Path] = field(default_factory=dict)
|
|
36
36
|
scripts: Dict[str, Path] = field(default_factory=dict)
|
|
37
37
|
assets: Dict[str, Path] = field(default_factory=dict)
|
|
38
|
+
evals: Dict[str, Path] = field(default_factory=dict)
|
|
38
39
|
|
|
39
40
|
|
|
40
41
|
class SkillsManager:
|
|
@@ -227,6 +228,9 @@ class SkillsManager:
|
|
|
227
228
|
# Load assets
|
|
228
229
|
assets = self._load_assets(skill_dir)
|
|
229
230
|
|
|
231
|
+
# Load evals
|
|
232
|
+
evals = self._load_evals(skill_dir)
|
|
233
|
+
|
|
230
234
|
return SkillContent(
|
|
231
235
|
metadata=metadata,
|
|
232
236
|
frontmatter=frontmatter,
|
|
@@ -234,6 +238,7 @@ class SkillsManager:
|
|
|
234
238
|
references=references,
|
|
235
239
|
scripts=scripts,
|
|
236
240
|
assets=assets,
|
|
241
|
+
evals=evals,
|
|
237
242
|
)
|
|
238
243
|
|
|
239
244
|
def _load_references(self, skill_dir: Path) -> Dict[str, Path]:
|
|
@@ -286,6 +291,23 @@ class SkillsManager:
|
|
|
286
291
|
|
|
287
292
|
return assets
|
|
288
293
|
|
|
294
|
+
def _load_evals(self, skill_dir: Path) -> Dict[str, Path]:
|
|
295
|
+
"""Load eval files from the evals/ directory."""
|
|
296
|
+
evals = {}
|
|
297
|
+
evals_dir = skill_dir / "evals"
|
|
298
|
+
|
|
299
|
+
if evals_dir.exists():
|
|
300
|
+
for eval_file in evals_dir.glob("**/*"):
|
|
301
|
+
if eval_file.is_file():
|
|
302
|
+
try:
|
|
303
|
+
# Use relative path as key, store the Path object
|
|
304
|
+
rel_path = eval_file.relative_to(evals_dir)
|
|
305
|
+
evals[str(rel_path)] = eval_file
|
|
306
|
+
except Exception:
|
|
307
|
+
continue
|
|
308
|
+
|
|
309
|
+
return evals
|
|
310
|
+
|
|
289
311
|
def get_skill_summary(self, skill_name: str) -> Optional[str]:
|
|
290
312
|
"""
|
|
291
313
|
Get a summary of a skill for display purposes.
|
|
@@ -315,9 +337,11 @@ class SkillsManager:
|
|
|
315
337
|
ref_count = len(skill.references)
|
|
316
338
|
script_count = len(skill.scripts)
|
|
317
339
|
asset_count = len(skill.assets)
|
|
340
|
+
eval_count = len(skill.evals)
|
|
318
341
|
|
|
319
342
|
summary += (
|
|
320
|
-
f"Resources: {ref_count} references, {script_count} scripts, {asset_count} assets
|
|
343
|
+
f"Resources: {ref_count} references, {script_count} scripts, {asset_count} assets,"
|
|
344
|
+
f" {eval_count} evals\n"
|
|
321
345
|
)
|
|
322
346
|
|
|
323
347
|
return summary
|
|
@@ -540,6 +564,14 @@ class SkillsManager:
|
|
|
540
564
|
result += f"- **{asset_name}**: `{asset_path}`\n"
|
|
541
565
|
result += "\n"
|
|
542
566
|
|
|
567
|
+
# Add evals file paths
|
|
568
|
+
if skill_content.evals:
|
|
569
|
+
result += f"#### Evals ({len(skill_content.evals)} file(s))\n\n"
|
|
570
|
+
result += "Available eval files:\n\n"
|
|
571
|
+
for eval_name, eval_path in skill_content.evals.items():
|
|
572
|
+
result += f"- **{eval_name}**: `{eval_path}`\n"
|
|
573
|
+
result += "\n"
|
|
574
|
+
|
|
543
575
|
result += "---\n\n"
|
|
544
576
|
|
|
545
577
|
result += "</context>"
|
|
@@ -758,6 +758,11 @@ class InputOutput:
|
|
|
758
758
|
print()
|
|
759
759
|
|
|
760
760
|
def interrupt_input(self):
|
|
761
|
+
if self.coder:
|
|
762
|
+
coder = self.coder()
|
|
763
|
+
if coder and hasattr(coder, "interrupt_event"):
|
|
764
|
+
coder.interrupt_event.set()
|
|
765
|
+
|
|
761
766
|
if self.prompt_session and self.prompt_session.app:
|
|
762
767
|
# Store any partial input before interrupting
|
|
763
768
|
self.placeholder = self.prompt_session.app.current_buffer.text
|
|
@@ -1301,6 +1306,7 @@ class InputOutput:
|
|
|
1301
1306
|
self.user_input(f"{question} - {res}", log_only=False)
|
|
1302
1307
|
else:
|
|
1303
1308
|
# Ring the bell if needed
|
|
1309
|
+
self.notify_user_input_required()
|
|
1304
1310
|
self.ring_bell()
|
|
1305
1311
|
self.start_spinner("Awaiting Confirmation...", False)
|
|
1306
1312
|
|
|
@@ -1708,22 +1714,28 @@ class InputOutput:
|
|
|
1708
1714
|
|
|
1709
1715
|
return None # Unknown system
|
|
1710
1716
|
|
|
1717
|
+
def _send_notification(self):
|
|
1718
|
+
if self.notifications_command:
|
|
1719
|
+
try:
|
|
1720
|
+
result = subprocess.run(self.notifications_command, shell=True, capture_output=True)
|
|
1721
|
+
if result.returncode != 0 and result.stderr:
|
|
1722
|
+
error_msg = result.stderr.decode("utf-8", errors="replace")
|
|
1723
|
+
self.tool_warning(f"Failed to run notifications command: {error_msg}")
|
|
1724
|
+
except Exception as e:
|
|
1725
|
+
self.tool_warning(f"Failed to run notifications command: {e}")
|
|
1726
|
+
else:
|
|
1727
|
+
print("\a", end="", flush=True) # Ring the bell
|
|
1728
|
+
|
|
1729
|
+
def notify_user_input_required(self):
|
|
1730
|
+
"""Send a notification that user input is required."""
|
|
1731
|
+
if self.notifications:
|
|
1732
|
+
self._send_notification()
|
|
1733
|
+
|
|
1711
1734
|
def ring_bell(self):
|
|
1712
1735
|
"""Ring the terminal bell if needed and clear the flag"""
|
|
1713
1736
|
if self.bell_on_next_input and self.notifications:
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
result = subprocess.run(
|
|
1717
|
-
self.notifications_command, shell=True, capture_output=True
|
|
1718
|
-
)
|
|
1719
|
-
if result.returncode != 0 and result.stderr:
|
|
1720
|
-
error_msg = result.stderr.decode("utf-8", errors="replace")
|
|
1721
|
-
self.tool_warning(f"Failed to run notifications command: {error_msg}")
|
|
1722
|
-
except Exception as e:
|
|
1723
|
-
self.tool_warning(f"Failed to run notifications command: {e}")
|
|
1724
|
-
else:
|
|
1725
|
-
print("\a", end="", flush=True) # Ring the bell
|
|
1726
|
-
self.bell_on_next_input = False # Clear the flag
|
|
1737
|
+
self._send_notification()
|
|
1738
|
+
self.bell_on_next_input = False
|
|
1727
1739
|
|
|
1728
1740
|
def toggle_multiline_mode(self):
|
|
1729
1741
|
"""Toggle between normal and multiline input modes"""
|
|
@@ -610,7 +610,7 @@ async def main_async(argv=None, input=None, output=None, force_git_root=None, re
|
|
|
610
610
|
if hasattr(args, "hooks") and args.hooks is not None:
|
|
611
611
|
args.hooks = convert_yaml_to_json_string(args.hooks)
|
|
612
612
|
if hasattr(args, "workspaces") and args.workspaces is not None:
|
|
613
|
-
args.
|
|
613
|
+
args.workspaces = convert_yaml_to_json_string(args.workspaces)
|
|
614
614
|
|
|
615
615
|
# Interpolate environment variables in all string arguments
|
|
616
616
|
for key, value in vars(args).items():
|
|
@@ -18,13 +18,15 @@ main_system: |
|
|
|
18
18
|
<context name="role_and_directives">
|
|
19
19
|
## Core Directives
|
|
20
20
|
**Act Proactively**: Autonomously use discovery and management tools (`ViewFilesAtGlob`, `ViewFilesMatching`, `Ls`, `ContextManager`) to fulfill the request. Chain tool calls across multiple turns for continuous exploration.
|
|
21
|
-
**Be Decisive**: Trust your findings. Do not repeat identical searches or ask redundant questions
|
|
21
|
+
**Be Decisive**: Trust your findings. Do not repeat identical searches or ask redundant questions.
|
|
22
22
|
**Be Efficient**: Batch tool calls when tools allow you to. Respect usage limits while maximizing the utility of each turn.
|
|
23
|
+
**Be Persistent**: Do not take short cuts. Work through your task until completion. No task takes too long as long as you are making progress towards the goal.
|
|
23
24
|
</context>
|
|
24
25
|
|
|
25
26
|
<context name="file_format">
|
|
26
27
|
### 1. FILE FORMAT
|
|
27
28
|
Files are provided in "hashline" format. Each line starts with a case-sensitive content hash followed by `::`.
|
|
29
|
+
Do not attempt to write these content hashes. They are automatically generated, maintained, and subject to change.
|
|
28
30
|
|
|
29
31
|
**Example File Format :**
|
|
30
32
|
il9n::#!/usr/bin/env python3
|
|
@@ -43,33 +45,30 @@ main_system: |
|
|
|
43
45
|
5. **Finished**: Use the `Finished` tool only after verifying the solution. Briefly summarize the changes for the user.
|
|
44
46
|
|
|
45
47
|
## Todo List Management
|
|
46
|
-
- Use `UpdateTodoList`
|
|
47
|
-
- Break complex tasks into granular steps so they remain tractable and context-efficient
|
|
48
|
+
- Use `UpdateTodoList` to keep the state synchronized as you complete subtasks.
|
|
49
|
+
- Break complex tasks and long edits into granular steps so they remain tractable and context-efficient
|
|
48
50
|
|
|
49
|
-
### Editing
|
|
50
|
-
Files use leading hashline content id prefixes inside brackets, i.e. `[{{4 char hash}}]{{line content}}`.
|
|
51
|
-
Do not attempt to write these content ids. They are automatically generated.
|
|
51
|
+
### Editing Tool Protocol
|
|
52
52
|
|
|
53
53
|
**MANDATORY Two-Phase Safety Protocol**:
|
|
54
|
-
1. **Phase 1**: Use `ShowContext` to
|
|
54
|
+
1. **Phase 1**: Use `ShowContext` to gather the hashline-prefixed content of the section to modify. Capture entire functions, logical blocks and closures.
|
|
55
55
|
2. **Phase 2**: Execute the edit (`ReplaceText`, `InsertText`, `DeleteText`) using the verified hashlines prefixes from the `ShowContext` tool.
|
|
56
56
|
|
|
57
57
|
**Atomic Scope:** Include the **entire function or logical block**. Never return partial syntax or broken closures. Do not attempt to replace just the beginning or end of a closure.
|
|
58
|
-
**Indentation**: Preserve all whitespace (spaces, tabs, and newlines).
|
|
58
|
+
**Indentation**: Preserve all necessary whitespace (spaces, tabs, and newlines) and stylistic indentation.
|
|
59
59
|
</context>
|
|
60
60
|
|
|
61
|
-
Use the `.cecli/
|
|
61
|
+
Use the `.cecli/temp` directory for all temporary, test, or scratch files.
|
|
62
62
|
Always reply to the user in {language}.
|
|
63
63
|
|
|
64
64
|
system_reminder: |
|
|
65
65
|
<context name="critical_reminders">
|
|
66
66
|
## Reminders
|
|
67
67
|
**Strict Scope**: Stay on task. Do not alter functionality and syntax that is out of scope or pursue unrequested refactors. Do not attempt to modify large files in one shot. Work step by step.
|
|
68
|
-
**Context Hygiene**: Remove files
|
|
68
|
+
**Context Hygiene**: Remove files and loaded skills from context using `ContextManager` or `RemoveSkill` once they are no longer needed to save tokens and prevent confusion.
|
|
69
69
|
**Turn Management**: Tool calls trigger the next turn. Do not include tool calls in your final summary to the user. You must use `ShowContext` to view the relevant hashline range before each edit.
|
|
70
|
-
**Sandbox**: Use `.cecli/
|
|
71
|
-
**Novelty**: Do not repeat phrases in your responses to the user. You do not need to declare you understand the task. Simply proceed. Only give status when you have new information.
|
|
72
|
-
**Patience**: Do not take short cuts. Work through your task until completion. No task takes too long as long as you are making progress towards the goal.
|
|
70
|
+
**Sandbox**: Use `.cecli/temp` for all verification and temporary logic.
|
|
71
|
+
**Novelty**: Do not repeat phrases in your responses to the user. You do not need to declare you understand the task. Simply proceed. Only give status updates when you have new information.
|
|
73
72
|
|
|
74
73
|
{lazy_prompt}
|
|
75
74
|
{shell_cmd_reminder}
|
|
@@ -98,7 +98,7 @@ compaction_prompt: |
|
|
|
98
98
|
- (e.g., "Discovered that the connection timeout error is triggered by the `RetryPolicy` class.")
|
|
99
99
|
- (e.g., "Successfully refactored the `validate_input` function to handle null bytes.")
|
|
100
100
|
- (e.g., "Reverted changes to `db.py` after determining the issue was in the environment config instead.")
|
|
101
|
-
- (e.g., "Verified that the fix works in isolation using a temporary script in `.cecli/
|
|
101
|
+
- (e.g., "Verified that the fix works in isolation using a temporary script in `.cecli/temp`.")
|
|
102
102
|
|
|
103
103
|
### 3. Current Technical Context
|
|
104
104
|
- **Files In-Scope**: List paths currently being edited or actively referenced.
|
|
@@ -95,6 +95,12 @@ class GitRepo:
|
|
|
95
95
|
self.subtree_only = subtree_only
|
|
96
96
|
self.git_commit_verify = git_commit_verify
|
|
97
97
|
self.ignore_file_cache = {}
|
|
98
|
+
self.is_workspace = False
|
|
99
|
+
self.workspace_path = None
|
|
100
|
+
self.workspace_config = {}
|
|
101
|
+
self.workspace_ignore_specs = {}
|
|
102
|
+
self.workspace_ignore_ts = {}
|
|
103
|
+
# Workspace detection and config loading occurs later in __init__
|
|
98
104
|
|
|
99
105
|
if git_dname:
|
|
100
106
|
check_fnames = [git_dname]
|
|
@@ -129,27 +135,40 @@ class GitRepo:
|
|
|
129
135
|
raise FileNotFoundError
|
|
130
136
|
|
|
131
137
|
self._init_repo_path = repo_paths.pop()
|
|
132
|
-
self.init_repo()
|
|
133
|
-
|
|
134
|
-
if cecli_ignore_file:
|
|
135
|
-
self.cecli_ignore_file = Path(cecli_ignore_file)
|
|
136
138
|
|
|
137
139
|
# Detect if we're in a workspace
|
|
138
|
-
self.workspace_path = self._detect_workspace_path(self.
|
|
140
|
+
self.workspace_path = self._detect_workspace_path(self._init_repo_path)
|
|
139
141
|
if self.workspace_path:
|
|
140
|
-
self.
|
|
142
|
+
self.is_workspace = True
|
|
143
|
+
|
|
144
|
+
try:
|
|
145
|
+
from cecli.helpers.monorepo.config import load_workspace_config
|
|
146
|
+
|
|
147
|
+
self.workspace_config = load_workspace_config(name=self.workspace_path.name)
|
|
148
|
+
except Exception:
|
|
149
|
+
self.workspace_config = {}
|
|
150
|
+
|
|
151
|
+
self.refresh_cecli_ignore()
|
|
152
|
+
|
|
153
|
+
self.init_repo()
|
|
154
|
+
if cecli_ignore_file:
|
|
155
|
+
self.cecli_ignore_file = Path(cecli_ignore_file)
|
|
141
156
|
|
|
142
157
|
def init_repo(self):
|
|
143
158
|
if not self.repo:
|
|
144
159
|
self.repo = git.Repo(self._init_repo_path, odbt=git.GitCmdObjectDB)
|
|
145
160
|
self.root = utils.safe_abs_path(self.repo.working_tree_dir)
|
|
146
161
|
|
|
162
|
+
if self.is_workspace:
|
|
163
|
+
self.root = self.workspace_path
|
|
164
|
+
|
|
147
165
|
try:
|
|
148
166
|
commit = self.repo.head.commit
|
|
149
167
|
return commit
|
|
150
168
|
except ANY_GIT_ERROR:
|
|
151
|
-
|
|
152
|
-
|
|
169
|
+
if not self.is_workspace:
|
|
170
|
+
self.repo = git.Repo(self._init_repo_path, odbt=git.GitCmdObjectDB)
|
|
171
|
+
self.root = utils.safe_abs_path(self.repo.working_tree_dir)
|
|
153
172
|
|
|
154
173
|
def _detect_workspace_path(self, start_path: str):
|
|
155
174
|
"""Check if current directory is within a workspace"""
|
|
@@ -612,7 +631,9 @@ class GitRepo:
|
|
|
612
631
|
).splitlines()
|
|
613
632
|
|
|
614
633
|
for f in res:
|
|
615
|
-
|
|
634
|
+
rel_path = f"{proj_name}/main/{f}"
|
|
635
|
+
if not self.ignored_file(rel_path):
|
|
636
|
+
all_files.append(rel_path)
|
|
616
637
|
except Exception:
|
|
617
638
|
continue
|
|
618
639
|
|
|
@@ -625,21 +646,39 @@ class GitRepo:
|
|
|
625
646
|
if res:
|
|
626
647
|
return res
|
|
627
648
|
|
|
628
|
-
|
|
649
|
+
if self.is_workspace:
|
|
650
|
+
try:
|
|
651
|
+
# In workspace mode, try to make it relative to workspace_path first
|
|
652
|
+
path = str(
|
|
653
|
+
Path(
|
|
654
|
+
PurePosixPath(
|
|
655
|
+
(Path(self.workspace_path) / path).relative_to(self.workspace_path)
|
|
656
|
+
)
|
|
657
|
+
)
|
|
658
|
+
)
|
|
659
|
+
except ValueError:
|
|
660
|
+
# Fallback to standard relative_to(self.root)
|
|
661
|
+
path = str(Path(PurePosixPath((Path(self.root) / path).relative_to(self.root))))
|
|
662
|
+
else:
|
|
663
|
+
path = str(Path(PurePosixPath((Path(self.root) / path).relative_to(self.root))))
|
|
664
|
+
|
|
629
665
|
self.normalized_path[orig_path] = path
|
|
630
666
|
return path
|
|
631
667
|
|
|
632
668
|
def refresh_cecli_ignore(self):
|
|
633
|
-
if not self.cecli_ignore_file:
|
|
669
|
+
if not self.cecli_ignore_file and not self.is_workspace:
|
|
634
670
|
return
|
|
635
671
|
|
|
636
672
|
current_time = time.time()
|
|
637
673
|
if current_time - self.cecli_ignore_last_check < 1:
|
|
638
674
|
return
|
|
639
675
|
|
|
676
|
+
if self.is_workspace:
|
|
677
|
+
self._refresh_workspace_ignores()
|
|
678
|
+
|
|
640
679
|
self.cecli_ignore_last_check = current_time
|
|
641
680
|
|
|
642
|
-
if not self.cecli_ignore_file.is_file():
|
|
681
|
+
if not self.cecli_ignore_file or not self.cecli_ignore_file.is_file():
|
|
643
682
|
return
|
|
644
683
|
|
|
645
684
|
mtime = self.cecli_ignore_file.stat().st_mtime
|
|
@@ -652,6 +691,35 @@ class GitRepo:
|
|
|
652
691
|
lines,
|
|
653
692
|
)
|
|
654
693
|
|
|
694
|
+
def _refresh_workspace_ignores(self):
|
|
695
|
+
if not hasattr(self, "workspace_config") or not self.workspace_config:
|
|
696
|
+
return
|
|
697
|
+
|
|
698
|
+
if not hasattr(self, "workspace_ignore_specs"):
|
|
699
|
+
self.workspace_ignore_specs = {}
|
|
700
|
+
self.workspace_ignore_ts = {}
|
|
701
|
+
|
|
702
|
+
projects = self.workspace_config.get("projects", [])
|
|
703
|
+
for proj in projects:
|
|
704
|
+
proj_name = proj.get("name")
|
|
705
|
+
ignore_file = proj.get("ignore")
|
|
706
|
+
if not proj_name or not ignore_file:
|
|
707
|
+
continue
|
|
708
|
+
|
|
709
|
+
ignore_path = self.workspace_path / f"{proj_name}.ignore"
|
|
710
|
+
if not ignore_path.is_file():
|
|
711
|
+
continue
|
|
712
|
+
|
|
713
|
+
mtime = ignore_path.stat().st_mtime
|
|
714
|
+
if mtime != self.workspace_ignore_ts.get(proj_name):
|
|
715
|
+
self.workspace_ignore_ts[proj_name] = mtime
|
|
716
|
+
self.ignore_file_cache = {}
|
|
717
|
+
lines = ignore_path.read_text().splitlines()
|
|
718
|
+
self.workspace_ignore_specs[proj_name] = pathspec.PathSpec.from_lines(
|
|
719
|
+
pathspec.patterns.GitWildMatchPattern,
|
|
720
|
+
lines,
|
|
721
|
+
)
|
|
722
|
+
|
|
655
723
|
def _get_gitignore_spec(self, dir_path):
|
|
656
724
|
"""Get or create a GitIgnoreSpec for a directory, caching for performance."""
|
|
657
725
|
dir_path = Path(dir_path).resolve()
|
|
@@ -755,6 +823,31 @@ class GitRepo:
|
|
|
755
823
|
if cwd_path not in fname_path.parents and fname_path != cwd_path:
|
|
756
824
|
return True
|
|
757
825
|
|
|
826
|
+
if self.is_workspace:
|
|
827
|
+
# Check project-specific ignores
|
|
828
|
+
try:
|
|
829
|
+
fname_rel = self.normalize_path(fname)
|
|
830
|
+
parts = Path(fname_rel).parts
|
|
831
|
+
if parts:
|
|
832
|
+
proj_name = parts[0]
|
|
833
|
+
if (
|
|
834
|
+
hasattr(self, "workspace_ignore_specs")
|
|
835
|
+
and proj_name in self.workspace_ignore_specs
|
|
836
|
+
):
|
|
837
|
+
# Check against project-specific spec
|
|
838
|
+
# The spec expects paths relative to the project root (usually proj/main/)
|
|
839
|
+
if len(parts) > 2 and parts[1] == "main":
|
|
840
|
+
proj_rel_path = str(Path(*parts[2:]))
|
|
841
|
+
else:
|
|
842
|
+
proj_rel_path = str(Path(*parts[1:]))
|
|
843
|
+
|
|
844
|
+
if self.workspace_ignore_specs[proj_name].match_file(proj_rel_path):
|
|
845
|
+
return True
|
|
846
|
+
# If not matched by project-specific ignore, continue to global ignore
|
|
847
|
+
# but don't return False yet as there might be a global .cecli.ignore
|
|
848
|
+
except (ValueError, IndexError):
|
|
849
|
+
pass
|
|
850
|
+
|
|
758
851
|
if not self.cecli_ignore_file or not self.cecli_ignore_file.is_file():
|
|
759
852
|
return False
|
|
760
853
|
|