cecli-dev 0.95.7__tar.gz → 0.95.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/CONTRIBUTING.md +7 -9
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/PKG-INFO +17 -8
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/README.md +16 -8
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/__init__.py +1 -1
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/_version.py +3 -3
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/args.py +11 -6
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/agent_coder.py +11 -10
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/base_coder.py +20 -15
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/__init__.py +3 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/core.py +4 -4
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/exit.py +0 -8
- cecli_dev-0.95.9/cecli/commands/history_search.py +112 -0
- cecli_dev-0.95.9/cecli/commands/terminal_setup.py +759 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/helpers/model_providers.py +4 -3
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/io.py +7 -7
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/main.py +60 -50
- cecli_dev-0.95.9/cecli/mcp/__init__.py +14 -0
- cecli_dev-0.95.9/cecli/mcp/manager.py +249 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/mcp/oauth.py +0 -25
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/mcp/server.py +15 -4
- cecli_dev-0.95.7/cecli/mcp/__init__.py → cecli_dev-0.95.9/cecli/mcp/utils.py +32 -2
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/onboarding.py +1 -1
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tui/app.py +16 -6
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tui/widgets/completion_bar.py +1 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tui/widgets/input_area.py +4 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tui/widgets/output.py +19 -6
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/urls.py +2 -2
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/utils.py +9 -6
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/versioncheck.py +6 -2
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/config/tui.md +13 -5
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli_dev.egg-info/PKG-INFO +17 -8
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli_dev.egg-info/SOURCES.txt +3 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli_dev.egg-info/requires.txt +3 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/requirements/requirements.in +1 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_coder.py +38 -23
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_commands.py +132 -124
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_main.py +16 -9
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_model_provider_manager.py +17 -4
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_sessions.py +5 -5
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/scrape/test_scrape.py +1 -1
- cecli_dev-0.95.7/cecli/commands/history_search.py +0 -40
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/.dockerignore +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/.flake8 +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/.gitattributes +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/.github/workflows/check_pypi_version.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/.github/workflows/docker-build-test.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/.github/workflows/docker-release.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/.github/workflows/issues.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/.github/workflows/pages.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/.github/workflows/pre-commit.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/.github/workflows/release.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/.github/workflows/ubuntu-tests.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/.github/workflows/windows-tests.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/.github/workflows/windows_check_pypi_version.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/.gitignore +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/.pre-commit-config.yaml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/CHANGELOG.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/CNAME +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/HISTORY.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/LICENSE.txt +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/MANIFEST.in +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/Dockerfile +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/README.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/__init__.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/benchmark.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/benchmark_classic.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/clone-exercism.sh +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/cpp-test.sh +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/docker.sh +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/docker_build.sh +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/install-docker-ubuntu.sh +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/npm-test.sh +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/over_time.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/plot.sh +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/plots.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/problem_stats.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/prompts.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/refactor_tools.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/rsync.sh +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/rungrid.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/swe-bench-lite.txt +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/swe-bench.txt +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/swe_bench.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/benchmark/test_benchmark.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/__main__.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/args_formatter.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/change_tracker.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/__init__.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/architect_coder.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/ask_coder.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/chat_chunks.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/context_coder.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/copypaste_coder.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/editblock_coder.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/editblock_fenced_coder.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/editblock_func_coder.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/editor_diff_fenced_coder.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/editor_editblock_coder.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/editor_whole_coder.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/help_coder.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/patch_coder.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/search_replace.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/shell.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/single_wholefile_func_coder.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/udiff_coder.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/udiff_simple.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/wholefile_coder.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/coders/wholefile_func_coder.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/add.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/agent.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/architect.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/ask.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/chat_mode.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/clear.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/code.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/command_prefix.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/commit.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/context.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/context_blocks.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/context_management.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/copy.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/copy_context.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/diff.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/drop.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/editor.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/git.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/help.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/lint.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/list_sessions.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/load.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/load_session.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/load_skill.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/ls.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/map.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/map_refresh.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/model.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/models.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/multiline_mode.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/paste.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/quit.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/read_only.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/read_only_stub.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/reasoning_effort.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/remove_skill.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/report.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/reset.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/run.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/save.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/save_session.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/settings.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/test.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/think_tokens.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/tokens.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/undo.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/utils/__init__.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/utils/base_command.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/utils/helpers.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/utils/registry.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/utils/save_load_manager.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/voice.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/weak_model.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/commands/web.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/deprecated_args.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/diffs.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/dump.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/editor.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/exceptions.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/format_settings.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/help.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/help_pats.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/helpers/__init__.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/helpers/copypaste.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/helpers/coroutines.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/helpers/file_searcher.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/helpers/nested.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/helpers/plugin_manager.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/helpers/profiler.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/helpers/requests.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/helpers/similarity.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/helpers/skills.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/history.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/linter.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/llm.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/mdstream.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/models.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/__init__.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/agent.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/architect.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/ask.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/base.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/context.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/copypaste.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/editblock.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/editblock_fenced.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/editblock_func.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/editor_diff_fenced.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/editor_editblock.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/editor_whole.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/help.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/patch.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/single_wholefile_func.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/udiff.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/udiff_simple.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/utils/__init__.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/utils/registry.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/utils/system.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/wholefile.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/prompts/wholefile_func.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/README.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/c-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/clojure-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/d-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/go-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/java-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/matlab-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/python-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/r-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/README.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/c-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/cpp-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/dart-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/elisp-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/elixir-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/elm-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/fortran-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/go-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/haskell-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/hcl-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/java-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/javascript-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/julia-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/matlab-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/php-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/python-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/ql-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/ruby-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/rust-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/scala-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/typescript-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/queries/tree-sitter-languages/zig-tags.scm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/reasoning_tags.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/repo.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/repomap.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/report.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/resources/__init__.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/resources/model-metadata.json +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/resources/model-settings.yml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/resources/providers.json +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/run_cmd.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/scrape.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/sendchat.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/sessions.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/special.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/__init__.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/command.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/command_interactive.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/context_manager.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/delete_block.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/delete_line.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/delete_lines.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/extract_lines.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/finished.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/git_branch.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/git_diff.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/git_log.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/git_remote.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/git_show.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/git_status.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/grep.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/indent_lines.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/insert_block.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/list_changes.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/load_skill.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/ls.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/remove_skill.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/replace_all.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/replace_line.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/replace_lines.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/replace_text.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/show_numbered_context.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/thinking.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/undo_change.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/update_todo_list.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/utils/base_tool.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/utils/helpers.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/utils/output.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/utils/registry.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/view_files_matching.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tools/view_files_with_symbol.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tui/__init__.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tui/io.py +3 -3
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tui/styles.tcss +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tui/widgets/__init__.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tui/widgets/file_list.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tui/widgets/footer.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tui/widgets/key_hints.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tui/widgets/status_bar.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/tui/worker.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/voice.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/waiting.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/watch.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/watch_prompts.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/Gemfile +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/_includes/blame.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/_includes/get-started.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/_includes/help-tip.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/_includes/help.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/_includes/install.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/_includes/keys.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/_includes/model-warnings.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/_includes/multi-line.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/_includes/python-m-aider.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/_includes/recording.css +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/_includes/recording.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/_includes/replit-pipx.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/_includes/works-best.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/_sass/custom/custom.scss +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/config/adv-model-settings.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/config/agent-mode.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/config/aider_conf.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/config/api-keys.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/config/custom-commands.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/config/custom-system-prompts.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/config/dotenv.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/config/editor.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/config/mcp.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/config/model-aliases.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/config/options.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/config/reasoning.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/config/skills.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/config.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/faq.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/git.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/index.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/install/codespaces.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/install/docker.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/install/optional.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/install/replit.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/install.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/languages.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/legal/contributor-agreement.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/legal/privacy.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms/anthropic.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms/azure.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms/bedrock.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms/cohere.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms/deepseek.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms/gemini.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms/github.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms/groq.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms/lm-studio.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms/ollama.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms/openai-compat.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms/openai.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms/openrouter.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms/other.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms/vertex.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms/warnings.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms/xai.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/llms.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/more/analytics.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/more/edit-formats.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/more/infinite-output.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/more-info.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/recordings/auto-accept-architect.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/recordings/dont-drop-original-read-files.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/recordings/index.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/recordings/model-accepts-settings.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/recordings/tree-sitter-language-pack.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/repomap.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/scripting.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/sessions.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/troubleshooting/aider-not-found.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/troubleshooting/edit-errors.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/troubleshooting/imports.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/troubleshooting/models-and-keys.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/troubleshooting/support.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/troubleshooting/token-limits.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/troubleshooting/warnings.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/troubleshooting.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/usage/browser.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/usage/caching.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/usage/commands.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/usage/conventions.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/usage/copypaste.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/usage/images-urls.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/usage/lint-test.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/usage/modes.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/usage/not-code.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/usage/notifications.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/usage/tips.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/usage/tutorials.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/usage/voice.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/usage/watch.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/docs/usage.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli/website/share/index.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli_dev.egg-info/dependency_links.txt +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli_dev.egg-info/entry_points.txt +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/cecli_dev.egg-info/top_level.txt +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/docker/Dockerfile +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/docker/Dockerfile.local.nvidia.cuda.ubuntu +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/pyproject.toml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/pytest.ini +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/requirements/common-constraints.txt +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/requirements/requirements-dev.in +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/requirements/requirements-dev.txt +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/requirements/requirements-help.in +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/requirements/requirements-help.txt +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/requirements/requirements-playwright.in +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/requirements/requirements-playwright.txt +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/requirements/tree-sitter.in +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/requirements.txt +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/30k-image.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/Dockerfile.jekyll +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/__init__.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/blame.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/clean_metadata.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/cost_analyzer.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/dl_icons.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/filter-chat-mode.js +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/generate_providers.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/get_contributor_list.js +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/history_prompts.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/homepage.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/issues.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/jekyll_build.sh +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/jekyll_run.sh +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/logo_svg.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/pip-compile.sh +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/recording_audio.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/redact-cast.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/rename_to_cecli.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/tmux_record.sh +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/tsl_pack_langs.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/update-blame.sh +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/update-docs.sh +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/update-history.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/versionbump.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/scripts/yank-old-versions.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/setup.cfg +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/shim.pyproject.toml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/__init__.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/__init__.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_aws_credentials.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_deprecated.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_editblock.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_editor.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_exceptions.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_find_or_blocks.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_history.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_io.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_linter.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_model_info_manager.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_models.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_onboarding.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_plugin_manager.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_prompts.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_reasoning.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_repo.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_repomap.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_run_cmd.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_sanity_check_repo.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_scripting.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_sendchat.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_skills.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_special.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_ssl_verification.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_udiff.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_urls.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_voice.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_watch.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/basic/test_wholefile.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/coders/test_copypaste_coder.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/conftest.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/chat-history-search-replace-gold.txt +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/chat-history.md +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/arduino/test.ino +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/c/test.c +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/chatito/test.chatito +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/clojure/test.clj +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/commonlisp/test.lisp +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/cpp/test.cpp +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/csharp/test.cs +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/d/test.d +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/dart/test.dart +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/elisp/test.el +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/elixir/test.ex +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/elm/test.elm +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/gleam/test.gleam +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/go/test.go +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/haskell/test.hs +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/hcl/test.tf +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/java/test.java +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/javascript/test.js +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/kotlin/test.kt +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/lua/test.lua +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/matlab/test.m +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/ocaml/test.ml +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/ocaml_interface/test.mli +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/php/test.php +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/pony/test.pony +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/properties/test.properties +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/python/test.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/ql/test.ql +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/r/test.r +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/racket/test.rkt +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/ruby/test.rb +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/rust/test.rs +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/scala/test.scala +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/solidity/test.sol +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/swift/test.swift +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/tsx/test.tsx +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/typescript/test.ts +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/udev/test.rules +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/languages/zig/test.zig +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/sample-code-base/sample.js +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/sample-code-base/sample.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/sample-code-base-repo-map.txt +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/watch.js +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/watch.lisp +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/watch.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/fixtures/watch_question.js +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/help/test_help.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/scrape/test_playwright_disable.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/tools/test_git_branch.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/tools/test_git_diff.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/tools/test_grep.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/tools/test_insert_block.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/tools/test_registry.py +0 -0
- {cecli_dev-0.95.7 → cecli_dev-0.95.9}/tests/tools/test_show_numbered_context.py +0 -0
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
# Contributing to the Project
|
|
3
2
|
|
|
4
3
|
We welcome contributions in the form of bug reports, feature requests,
|
|
@@ -24,30 +23,29 @@ ensure that your contributions can be integrated smoothly.
|
|
|
24
23
|
|
|
25
24
|
```bash
|
|
26
25
|
# Clone the repository
|
|
27
|
-
git clone https://github.com/dwash96/
|
|
28
|
-
cd
|
|
26
|
+
git clone https://github.com/dwash96/cecli.git
|
|
27
|
+
cd cecli
|
|
29
28
|
|
|
30
29
|
# Make a venv
|
|
31
30
|
python3 -m venv venv
|
|
32
31
|
source venv/bin/activate
|
|
33
32
|
|
|
34
|
-
# Install UV because it's superior
|
|
33
|
+
# Install UV because it's superior (skip if you already have it installed globally)
|
|
35
34
|
pip install uv
|
|
36
35
|
|
|
37
36
|
# Build Project
|
|
38
37
|
uv pip install --native-tls -e .
|
|
39
38
|
|
|
40
39
|
# Add tool chain
|
|
41
|
-
uv install --native-tls pre-commit
|
|
40
|
+
uv pip install --native-tls pre-commit
|
|
42
41
|
pre-commit install
|
|
43
42
|
|
|
44
43
|
# Run Program
|
|
45
|
-
aider-ce
|
|
46
|
-
|
|
47
|
-
# OR!
|
|
48
|
-
|
|
49
44
|
cecli
|
|
50
45
|
|
|
46
|
+
# OR! (legacy)
|
|
47
|
+
aider-ce
|
|
48
|
+
|
|
51
49
|
```
|
|
52
50
|
|
|
53
51
|
### Building the Docker Image
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cecli-dev
|
|
3
|
-
Version: 0.95.
|
|
3
|
+
Version: 0.95.9
|
|
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
|
|
@@ -54,6 +54,7 @@ Requires-Dist: truststore
|
|
|
54
54
|
Requires-Dist: rustworkx>=0.15.0
|
|
55
55
|
Requires-Dist: scipy>=1.15.3
|
|
56
56
|
Requires-Dist: importlib-metadata>=7.2.1
|
|
57
|
+
Requires-Dist: tomli>=2.3.0; python_version <= "3.10"
|
|
57
58
|
Requires-Dist: tree-sitter==0.23.2; python_version < "3.10"
|
|
58
59
|
Requires-Dist: tree-sitter>=0.25.1; python_version >= "3.10"
|
|
59
60
|
Provides-Extra: dev
|
|
@@ -99,15 +100,15 @@ LLMs are a part of our lives from here on out so join us in learning about and c
|
|
|
99
100
|
|
|
100
101
|
## Documentation/Other Notes:
|
|
101
102
|
|
|
102
|
-
* [Agent Mode](https://github.com/dwash96/cecli/blob/main/
|
|
103
|
-
* [MCP Configuration](https://github.com/dwash96/cecli/blob/main/
|
|
104
|
-
* [TUI Configuration](https://github.com/dwash96/cecli/blob/main/
|
|
105
|
-
* [Skills](https://github.com/dwash96/cecli/blob/main/
|
|
106
|
-
* [Session Management](https://github.com/dwash96/cecli/blob/main/
|
|
103
|
+
* [Agent Mode](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/config/agent-mode.md)
|
|
104
|
+
* [MCP Configuration](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/config/mcp.md)
|
|
105
|
+
* [TUI Configuration](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/config/tui.md)
|
|
106
|
+
* [Skills](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/config/skills.md)
|
|
107
|
+
* [Session Management](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/sessions.md)
|
|
107
108
|
* [Custom Commands](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/config/custom-commands.md)
|
|
108
109
|
* [Custom System Prompts](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/config/custom-system-prompts.md)
|
|
109
110
|
* [Custom Tools](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/config/agent-mode.md#creating-custom-tools)
|
|
110
|
-
* [Advanced Model Configuration](https://github.com/dwash96/cecli/blob/main/
|
|
111
|
+
* [Advanced Model Configuration](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/config/model-aliases.md#advanced-model-settings)
|
|
111
112
|
* [Aider Original Documentation (still mostly applies)](https://aider.chat/)
|
|
112
113
|
|
|
113
114
|
You can see a selection of the enhancements and updates by comparing the help output:
|
|
@@ -184,7 +185,15 @@ DEEPSEEK_API_KEY="..."
|
|
|
184
185
|
|
|
185
186
|
### Run Program
|
|
186
187
|
|
|
187
|
-
If you are in the directory with your .aider.conf.yml file, then simply running `cecli` or `aider-ce` will start the agent with your configuration.
|
|
188
|
+
If you are in the directory with your .aider.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
|
+
|
|
190
|
+
```bash
|
|
191
|
+
cecli --terminal-setup
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
On first run to configure keybindings for the program (notably `shift+enter`). Support for terminals is ongoing so feel free to make a github issue or chat in the discord for us to figure out what's needed to support automatically setting up a given terminal.
|
|
195
|
+
|
|
196
|
+
If you want additional sandboxing, we publish a docker container that can be ran as follows:
|
|
188
197
|
|
|
189
198
|
```bash
|
|
190
199
|
docker pull dustinwashington/aider-ce
|
|
@@ -16,15 +16,15 @@ LLMs are a part of our lives from here on out so join us in learning about and c
|
|
|
16
16
|
|
|
17
17
|
## Documentation/Other Notes:
|
|
18
18
|
|
|
19
|
-
* [Agent Mode](https://github.com/dwash96/cecli/blob/main/
|
|
20
|
-
* [MCP Configuration](https://github.com/dwash96/cecli/blob/main/
|
|
21
|
-
* [TUI Configuration](https://github.com/dwash96/cecli/blob/main/
|
|
22
|
-
* [Skills](https://github.com/dwash96/cecli/blob/main/
|
|
23
|
-
* [Session Management](https://github.com/dwash96/cecli/blob/main/
|
|
19
|
+
* [Agent Mode](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/config/agent-mode.md)
|
|
20
|
+
* [MCP Configuration](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/config/mcp.md)
|
|
21
|
+
* [TUI Configuration](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/config/tui.md)
|
|
22
|
+
* [Skills](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/config/skills.md)
|
|
23
|
+
* [Session Management](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/sessions.md)
|
|
24
24
|
* [Custom Commands](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/config/custom-commands.md)
|
|
25
25
|
* [Custom System Prompts](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/config/custom-system-prompts.md)
|
|
26
26
|
* [Custom Tools](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/config/agent-mode.md#creating-custom-tools)
|
|
27
|
-
* [Advanced Model Configuration](https://github.com/dwash96/cecli/blob/main/
|
|
27
|
+
* [Advanced Model Configuration](https://github.com/dwash96/cecli/blob/main/cecli/website/docs/config/model-aliases.md#advanced-model-settings)
|
|
28
28
|
* [Aider Original Documentation (still mostly applies)](https://aider.chat/)
|
|
29
29
|
|
|
30
30
|
You can see a selection of the enhancements and updates by comparing the help output:
|
|
@@ -101,7 +101,15 @@ DEEPSEEK_API_KEY="..."
|
|
|
101
101
|
|
|
102
102
|
### Run Program
|
|
103
103
|
|
|
104
|
-
If you are in the directory with your .aider.conf.yml file, then simply running `cecli` or `aider-ce` will start the agent with your configuration.
|
|
104
|
+
If you are in the directory with your .aider.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
|
+
|
|
106
|
+
```bash
|
|
107
|
+
cecli --terminal-setup
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
On first run to configure keybindings for the program (notably `shift+enter`). Support for terminals is ongoing so feel free to make a github issue or chat in the discord for us to figure out what's needed to support automatically setting up a given terminal.
|
|
111
|
+
|
|
112
|
+
If you want additional sandboxing, we publish a docker container that can be ran as follows:
|
|
105
113
|
|
|
106
114
|
```bash
|
|
107
115
|
docker pull dustinwashington/aider-ce
|
|
@@ -464,4 +472,4 @@ The current priorities are to improve core capabilities and user experience of t
|
|
|
464
472
|
<td></td>
|
|
465
473
|
</tr>
|
|
466
474
|
</tbody>
|
|
467
|
-
</table>
|
|
475
|
+
</table>
|
|
@@ -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.95.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 95,
|
|
31
|
+
__version__ = version = '0.95.9'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 95, 9)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g38dc66252'
|
|
@@ -456,6 +456,17 @@ def get_parser(default_config_files, git_root):
|
|
|
456
456
|
default=False,
|
|
457
457
|
help="Restore the previous chat history messages (default: False)",
|
|
458
458
|
)
|
|
459
|
+
#########
|
|
460
|
+
group = parser.add_argument_group("Input settings")
|
|
461
|
+
group.add_argument(
|
|
462
|
+
"--terminal-setup",
|
|
463
|
+
action=argparse.BooleanOptionalAction,
|
|
464
|
+
default=False,
|
|
465
|
+
help=(
|
|
466
|
+
"Auto-configure terminal emulator for shift+enter support for new lines (default:"
|
|
467
|
+
" False)"
|
|
468
|
+
),
|
|
469
|
+
)
|
|
459
470
|
##########
|
|
460
471
|
group = parser.add_argument_group("Output settings")
|
|
461
472
|
group.add_argument(
|
|
@@ -746,12 +757,6 @@ def get_parser(default_config_files, git_root):
|
|
|
746
757
|
help="Show release notes on first run of new version (default: None, ask user)",
|
|
747
758
|
default=None,
|
|
748
759
|
)
|
|
749
|
-
group.add_argument(
|
|
750
|
-
"--install-main-branch",
|
|
751
|
-
action="store_true",
|
|
752
|
-
help="Install the latest version from the main branch",
|
|
753
|
-
default=False,
|
|
754
|
-
)
|
|
755
760
|
group.add_argument(
|
|
756
761
|
"--upgrade",
|
|
757
762
|
"--update",
|
|
@@ -23,7 +23,7 @@ from cecli.helpers.similarity import (
|
|
|
23
23
|
normalize_vector,
|
|
24
24
|
)
|
|
25
25
|
from cecli.helpers.skills import SkillsManager
|
|
26
|
-
from cecli.mcp
|
|
26
|
+
from cecli.mcp import LocalServer, McpServerManager
|
|
27
27
|
from cecli.repo import ANY_GIT_ERROR
|
|
28
28
|
from cecli.tools.utils.registry import ToolRegistry
|
|
29
29
|
|
|
@@ -209,14 +209,17 @@ class AgentCoder(Coder):
|
|
|
209
209
|
local_tools = self.get_local_tool_schemas()
|
|
210
210
|
if not local_tools:
|
|
211
211
|
return
|
|
212
|
+
|
|
212
213
|
local_server_config = {"name": server_name}
|
|
213
214
|
local_server = LocalServer(local_server_config)
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
215
|
+
|
|
216
|
+
if not self.mcp_manager:
|
|
217
|
+
self.mcp_manager = McpServerManager()
|
|
218
|
+
if not self.mcp_manager.get_server(server_name):
|
|
219
|
+
await self.mcp_manager.add_server(local_server)
|
|
218
220
|
if not self.mcp_tools:
|
|
219
221
|
self.mcp_tools = []
|
|
222
|
+
|
|
220
223
|
if server_name not in [name for name, _ in self.mcp_tools]:
|
|
221
224
|
self.mcp_tools.append((local_server.name, local_tools))
|
|
222
225
|
|
|
@@ -257,9 +260,7 @@ class AgentCoder(Coder):
|
|
|
257
260
|
t.get("function", {}).get("name") == norm_tool_name
|
|
258
261
|
for t in server_tools
|
|
259
262
|
):
|
|
260
|
-
server =
|
|
261
|
-
(s for s in self.mcp_servers if s.name == server_name), None
|
|
262
|
-
)
|
|
263
|
+
server = self.mcp_manager.get_server(server_name)
|
|
263
264
|
if server:
|
|
264
265
|
for params in parsed_args_list:
|
|
265
266
|
tasks.append(
|
|
@@ -955,7 +956,7 @@ I will proceed based on the current context.""")
|
|
|
955
956
|
if self.mcp_tools:
|
|
956
957
|
for server_name, server_tools in self.mcp_tools:
|
|
957
958
|
if any(t.get("function", {}).get("name") == norm_tool_name for t in server_tools):
|
|
958
|
-
server =
|
|
959
|
+
server = self.mcp_manager.get_server(server_name)
|
|
959
960
|
if server:
|
|
960
961
|
return await self._execute_mcp_tool(server, norm_tool_name, params)
|
|
961
962
|
else:
|
|
@@ -1499,7 +1500,7 @@ Just reply with fixed versions of the {blocks} above that failed to match.
|
|
|
1499
1500
|
if shared_output:
|
|
1500
1501
|
self.io.tool_output("Shell command output:\n" + shared_output)
|
|
1501
1502
|
if self.auto_test and not self.reflected_message:
|
|
1502
|
-
test_errors = await self.commands.
|
|
1503
|
+
test_errors = await self.commands.execute("test", self.test_cmd)
|
|
1503
1504
|
if test_errors:
|
|
1504
1505
|
ok = await self.io.confirm_ask("Attempt to fix test errors?")
|
|
1505
1506
|
if ok:
|
|
@@ -44,7 +44,7 @@ from cecli.history import ChatSummary
|
|
|
44
44
|
from cecli.io import ConfirmGroup, InputOutput
|
|
45
45
|
from cecli.linter import Linter
|
|
46
46
|
from cecli.llm import litellm
|
|
47
|
-
from cecli.mcp
|
|
47
|
+
from cecli.mcp import LocalServer
|
|
48
48
|
from cecli.models import RETRY_TIMEOUT
|
|
49
49
|
from cecli.reasoning_tags import (
|
|
50
50
|
REASONING_TAG,
|
|
@@ -138,7 +138,7 @@ class Coder:
|
|
|
138
138
|
chat_language = None
|
|
139
139
|
commit_language = None
|
|
140
140
|
file_watcher = None
|
|
141
|
-
|
|
141
|
+
mcp_manager = None
|
|
142
142
|
mcp_tools = None
|
|
143
143
|
run_one_completed = True
|
|
144
144
|
compact_context_completed = True
|
|
@@ -249,8 +249,8 @@ class Coder:
|
|
|
249
249
|
|
|
250
250
|
if res is not None:
|
|
251
251
|
if from_coder:
|
|
252
|
-
if from_coder.
|
|
253
|
-
res.
|
|
252
|
+
if from_coder.mcp_manager:
|
|
253
|
+
res.mcp_manager = from_coder.mcp_manager
|
|
254
254
|
res.mcp_tools = from_coder.mcp_tools
|
|
255
255
|
|
|
256
256
|
# Transfer TUI app weak reference
|
|
@@ -316,7 +316,7 @@ class Coder:
|
|
|
316
316
|
file_watcher=None,
|
|
317
317
|
auto_copy_context=False,
|
|
318
318
|
auto_accept_architect=True,
|
|
319
|
-
|
|
319
|
+
mcp_manager=None,
|
|
320
320
|
enable_context_compaction=False,
|
|
321
321
|
context_compaction_max_tokens=None,
|
|
322
322
|
context_compaction_summary_tokens=8192,
|
|
@@ -350,7 +350,7 @@ class Coder:
|
|
|
350
350
|
self.args = args
|
|
351
351
|
|
|
352
352
|
self.num_cache_warming_pings = num_cache_warming_pings
|
|
353
|
-
self.
|
|
353
|
+
self.mcp_manager = mcp_manager
|
|
354
354
|
self.enable_context_compaction = enable_context_compaction
|
|
355
355
|
|
|
356
356
|
self.context_compaction_max_tokens = context_compaction_max_tokens
|
|
@@ -1564,7 +1564,7 @@ class Coder:
|
|
|
1564
1564
|
|
|
1565
1565
|
def copy_context(self):
|
|
1566
1566
|
if self.auto_copy_context:
|
|
1567
|
-
self.commands.
|
|
1567
|
+
self.commands.execute("copy-context", "")
|
|
1568
1568
|
|
|
1569
1569
|
async def get_input(self):
|
|
1570
1570
|
inchat_files = self.get_inchat_relative_files()
|
|
@@ -1684,7 +1684,7 @@ class Coder:
|
|
|
1684
1684
|
explicit_yes_required=self.args.yes_always_commands,
|
|
1685
1685
|
):
|
|
1686
1686
|
inp += "\n\n"
|
|
1687
|
-
inp += await self.commands.
|
|
1687
|
+
inp += await self.commands.execute("web", url, return_content=True)
|
|
1688
1688
|
else:
|
|
1689
1689
|
self.rejected_urls.add(url)
|
|
1690
1690
|
|
|
@@ -2438,7 +2438,7 @@ class Coder:
|
|
|
2438
2438
|
]
|
|
2439
2439
|
|
|
2440
2440
|
if edited and self.auto_test:
|
|
2441
|
-
test_errors = await self.commands.
|
|
2441
|
+
test_errors = await self.commands.execute("test", self.test_cmd)
|
|
2442
2442
|
self.test_outcome = not test_errors
|
|
2443
2443
|
if test_errors:
|
|
2444
2444
|
ok = await self.io.confirm_ask("Attempt to fix test errors?")
|
|
@@ -2562,7 +2562,7 @@ class Coder:
|
|
|
2562
2562
|
and tool_name_from_schema.lower() == tool_call.function.name.lower()
|
|
2563
2563
|
):
|
|
2564
2564
|
# Find the McpServer instance that will be used for communication
|
|
2565
|
-
for server in self.
|
|
2565
|
+
for server in self.mcp_manager:
|
|
2566
2566
|
if server.name == server_name:
|
|
2567
2567
|
if server not in server_tool_calls:
|
|
2568
2568
|
server_tool_calls[server] = []
|
|
@@ -2740,6 +2740,7 @@ class Coder:
|
|
|
2740
2740
|
Initialize tools from all configured MCP servers. MCP Servers that fail to be
|
|
2741
2741
|
initialized will not be available to the Coder instance.
|
|
2742
2742
|
"""
|
|
2743
|
+
# TODO(@gopar): refactor here once we have fully moved over to use the mcp manager
|
|
2743
2744
|
tools = []
|
|
2744
2745
|
|
|
2745
2746
|
async def get_server_tools(server):
|
|
@@ -2750,9 +2751,13 @@ class Coder:
|
|
|
2750
2751
|
return (server.name, server_tools)
|
|
2751
2752
|
|
|
2752
2753
|
try:
|
|
2753
|
-
|
|
2754
|
+
did_connect = await self.mcp_manager.connect_server(server.name)
|
|
2755
|
+
if not did_connect:
|
|
2756
|
+
raise Exception("Failed to load tools")
|
|
2757
|
+
|
|
2758
|
+
server = self.mcp_manager.get_server(server.name)
|
|
2754
2759
|
server_tools = await experimental_mcp_client.load_mcp_tools(
|
|
2755
|
-
session=session, format="openai"
|
|
2760
|
+
session=server.session, format="openai"
|
|
2756
2761
|
)
|
|
2757
2762
|
return (server.name, server_tools)
|
|
2758
2763
|
except Exception as e:
|
|
@@ -2761,11 +2766,11 @@ class Coder:
|
|
|
2761
2766
|
return None
|
|
2762
2767
|
|
|
2763
2768
|
async def get_all_server_tools():
|
|
2764
|
-
tasks = [get_server_tools(server) for server in self.
|
|
2769
|
+
tasks = [get_server_tools(server) for server in self.mcp_manager]
|
|
2765
2770
|
results = await asyncio.gather(*tasks)
|
|
2766
2771
|
return [result for result in results if result is not None]
|
|
2767
2772
|
|
|
2768
|
-
if self.
|
|
2773
|
+
if self.mcp_manager:
|
|
2769
2774
|
# Retry initialization in case of CancelledError
|
|
2770
2775
|
max_retries = 3
|
|
2771
2776
|
for i in range(max_retries):
|
|
@@ -3852,7 +3857,7 @@ class Coder:
|
|
|
3852
3857
|
self.coder_commit_hashes.add(commit_hash)
|
|
3853
3858
|
self.last_coder_commit_message = commit_message
|
|
3854
3859
|
if self.show_diffs:
|
|
3855
|
-
self.commands.
|
|
3860
|
+
self.commands.execute("diff", "")
|
|
3856
3861
|
|
|
3857
3862
|
def show_undo_hint(self):
|
|
3858
3863
|
if not self.commit_before_message:
|
|
@@ -51,6 +51,7 @@ from .run import RunCommand
|
|
|
51
51
|
from .save import SaveCommand
|
|
52
52
|
from .save_session import SaveSessionCommand
|
|
53
53
|
from .settings import SettingsCommand
|
|
54
|
+
from .terminal_setup import TerminalSetupCommand
|
|
54
55
|
from .test import TestCommand
|
|
55
56
|
from .think_tokens import ThinkTokensCommand
|
|
56
57
|
from .tokens import TokensCommand
|
|
@@ -123,6 +124,7 @@ CommandRegistry.register(CopyContextCommand)
|
|
|
123
124
|
CommandRegistry.register(CommandPrefixCommand)
|
|
124
125
|
CommandRegistry.register(LoadSkillCommand)
|
|
125
126
|
CommandRegistry.register(RemoveSkillCommand)
|
|
127
|
+
CommandRegistry.register(TerminalSetupCommand)
|
|
126
128
|
|
|
127
129
|
|
|
128
130
|
__all__ = [
|
|
@@ -187,6 +189,7 @@ __all__ = [
|
|
|
187
189
|
"CommandPrefixCommand",
|
|
188
190
|
"LoadSkillCommand",
|
|
189
191
|
"RemoveSkillCommand",
|
|
192
|
+
"TerminalSetupCommand",
|
|
190
193
|
"SwitchCoderSignal",
|
|
191
194
|
"Commands",
|
|
192
195
|
]
|
|
@@ -178,7 +178,7 @@ class Commands:
|
|
|
178
178
|
commands = [f"/{cmd}" for cmd in registry_commands]
|
|
179
179
|
return sorted(commands)
|
|
180
180
|
|
|
181
|
-
async def
|
|
181
|
+
async def execute(self, cmd_name, args, **kwargs):
|
|
182
182
|
command_class = CommandRegistry.get_command(cmd_name)
|
|
183
183
|
if not command_class:
|
|
184
184
|
self.io.tool_output(f"Error: Command {cmd_name} not found.")
|
|
@@ -224,17 +224,17 @@ class Commands:
|
|
|
224
224
|
|
|
225
225
|
async def run(self, inp):
|
|
226
226
|
if inp.startswith("!"):
|
|
227
|
-
return await self.
|
|
227
|
+
return await self.execute("run", inp[1:])
|
|
228
228
|
res = self.matching_commands(inp)
|
|
229
229
|
if res is None:
|
|
230
230
|
return
|
|
231
231
|
matching_commands, first_word, rest_inp = res
|
|
232
232
|
if len(matching_commands) == 1:
|
|
233
233
|
command = matching_commands[0][1:]
|
|
234
|
-
return await self.
|
|
234
|
+
return await self.execute(command, rest_inp)
|
|
235
235
|
elif first_word in matching_commands:
|
|
236
236
|
command = first_word[1:]
|
|
237
|
-
return await self.
|
|
237
|
+
return await self.execute(command, rest_inp)
|
|
238
238
|
elif len(matching_commands) > 1:
|
|
239
239
|
self.io.tool_error(f"Ambiguous command: {', '.join(matching_commands)}")
|
|
240
240
|
else:
|
|
@@ -14,14 +14,6 @@ class ExitCommand(BaseCommand):
|
|
|
14
14
|
@classmethod
|
|
15
15
|
async def execute(cls, io, coder, args, **kwargs):
|
|
16
16
|
"""Execute the exit command with given parameters."""
|
|
17
|
-
for server in coder.mcp_servers:
|
|
18
|
-
try:
|
|
19
|
-
await server.exit_stack.aclose()
|
|
20
|
-
except Exception:
|
|
21
|
-
pass
|
|
22
|
-
|
|
23
|
-
await asyncio.sleep(0)
|
|
24
|
-
|
|
25
17
|
# Check if running in TUI mode - use graceful exit to restore terminal
|
|
26
18
|
if hasattr(io, "request_exit"):
|
|
27
19
|
io.request_exit()
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from typing import List
|
|
3
|
+
|
|
4
|
+
from cecli.commands.utils.base_command import BaseCommand
|
|
5
|
+
from cecli.commands.utils.helpers import format_command_result
|
|
6
|
+
from cecli.utils import run_fzf
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class HistorySearchCommand(BaseCommand):
|
|
10
|
+
NORM_NAME = "history-search"
|
|
11
|
+
DESCRIPTION = "Fuzzy search in history and paste it in the prompt"
|
|
12
|
+
|
|
13
|
+
@classmethod
|
|
14
|
+
async def execute(cls, io, coder, args, **kwargs):
|
|
15
|
+
"""Execute the history-search command with given parameters."""
|
|
16
|
+
# Get history lines based on whether we're in TUI mode or not
|
|
17
|
+
if coder.tui and coder.tui():
|
|
18
|
+
# In TUI mode, parse the history file directly using our custom parser
|
|
19
|
+
history_lines = cls.parse_input_history_file(io.input_history_file)
|
|
20
|
+
else:
|
|
21
|
+
# In non-TUI mode, use the io.get_input_history() method
|
|
22
|
+
history_lines = io.get_input_history()
|
|
23
|
+
|
|
24
|
+
selected_lines = run_fzf(history_lines, coder=coder)
|
|
25
|
+
if selected_lines:
|
|
26
|
+
io.set_placeholder("".join(selected_lines))
|
|
27
|
+
|
|
28
|
+
if coder.tui and coder.tui():
|
|
29
|
+
coder.tui().set_input_value("".join(selected_lines))
|
|
30
|
+
return format_command_result(
|
|
31
|
+
io, "history-search", "Selected history lines and set placeholder"
|
|
32
|
+
)
|
|
33
|
+
else:
|
|
34
|
+
return format_command_result(io, "history-search", "No history lines selected")
|
|
35
|
+
|
|
36
|
+
@classmethod
|
|
37
|
+
def get_completions(cls, io, coder, args) -> List[str]:
|
|
38
|
+
"""Get completion options for history-search command."""
|
|
39
|
+
return []
|
|
40
|
+
|
|
41
|
+
@classmethod
|
|
42
|
+
def get_help(cls) -> str:
|
|
43
|
+
"""Get help text for the history-search command."""
|
|
44
|
+
help_text = super().get_help()
|
|
45
|
+
help_text += "\nUsage:\n"
|
|
46
|
+
help_text += " /history-search # Fuzzy search through command history\n"
|
|
47
|
+
help_text += (
|
|
48
|
+
"\nThis command opens a fuzzy finder (FZF) to search through your command history.\n"
|
|
49
|
+
)
|
|
50
|
+
help_text += "Selected lines will be pasted into the input prompt for editing.\n"
|
|
51
|
+
return help_text
|
|
52
|
+
|
|
53
|
+
@classmethod
|
|
54
|
+
def parse_input_history_file(cls, file_path: str) -> List[str]:
|
|
55
|
+
"""Parse the input history file format.
|
|
56
|
+
|
|
57
|
+
The file format consists of blocks separated by timestamp lines starting with '#'.
|
|
58
|
+
Each block has lines starting with '+' for the actual input.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
file_path: Path to the history file
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
List of history entries (strings)
|
|
65
|
+
"""
|
|
66
|
+
if not file_path or not os.path.exists(file_path):
|
|
67
|
+
return []
|
|
68
|
+
|
|
69
|
+
try:
|
|
70
|
+
with open(file_path, "r") as f:
|
|
71
|
+
content = f.read()
|
|
72
|
+
except (OSError, IOError):
|
|
73
|
+
return []
|
|
74
|
+
|
|
75
|
+
# Parse the file format: blocks separated by timestamp lines starting with '#'
|
|
76
|
+
# Each block has lines starting with '+' for the actual input
|
|
77
|
+
history = []
|
|
78
|
+
current_block = []
|
|
79
|
+
in_block = False
|
|
80
|
+
|
|
81
|
+
for line in content.splitlines():
|
|
82
|
+
line = line.rstrip("\n")
|
|
83
|
+
|
|
84
|
+
if line.startswith("#"):
|
|
85
|
+
# This is a timestamp line - start a new block
|
|
86
|
+
if current_block:
|
|
87
|
+
# Join the current block lines and add to history
|
|
88
|
+
block_text = "\n".join(current_block)
|
|
89
|
+
history.append(block_text)
|
|
90
|
+
current_block = []
|
|
91
|
+
in_block = True
|
|
92
|
+
# Reset in_block if we encounter another timestamp without any + lines
|
|
93
|
+
# This handles consecutive timestamp lines
|
|
94
|
+
elif line.startswith("+") and in_block:
|
|
95
|
+
# This is an input line in the current block
|
|
96
|
+
# Remove the leading '+' and add to current block
|
|
97
|
+
# Use [1:] to remove the first character (the '+')
|
|
98
|
+
# This preserves any leading spaces that might be part of the input
|
|
99
|
+
current_block.append(line[1:])
|
|
100
|
+
elif line.strip() == "":
|
|
101
|
+
# Empty line - ignore
|
|
102
|
+
continue
|
|
103
|
+
else:
|
|
104
|
+
# Unexpected line format - skip it
|
|
105
|
+
continue
|
|
106
|
+
|
|
107
|
+
# Don't forget the last block
|
|
108
|
+
if current_block:
|
|
109
|
+
block_text = "\n".join(current_block)
|
|
110
|
+
history.append(block_text)
|
|
111
|
+
|
|
112
|
+
return history
|