drydock-cli 2.6.80__tar.gz → 2.6.82__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.
- drydock_cli-2.6.82/.auto_release.lock +1 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/PKG-INFO +1 -1
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/handlers/event_handler.py +10 -1
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/llm/format.py +71 -14
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/bash.py +5 -18
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/write_file.py +21 -78
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/manager.py +21 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/pyproject.toml +1 -1
- drydock_cli-2.6.80/.auto_release.lock +0 -1
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/.claude/scheduled_tasks.lock +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/.gitignore +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/.python-version +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/.typos.toml +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/.vscode/extensions.json +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/.vscode/launch.json +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/.vscode/settings.json +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/AGENTS.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/BASELINE_412.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/CHANGELOG.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/CLAUDE.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/LICENSE +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/MODEL_SHORTCOMINGS.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/NOTICE +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/OVERNIGHT_REPORT_2026_04_13.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/PRD.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/README.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/action.yml +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/README.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results1.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results13.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results14.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results15.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results16.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results17.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results18.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results19.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results2.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results20.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results3.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results4.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results5.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results6.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results7.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results8.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results9.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/baseline_history/results_evolved_v1.tsv +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/docs/README.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/docs/acp-setup.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/agent_loop.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/logger.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/paths/_vibe_home.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/slug.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/types.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/core/utils.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/audit-tests/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/strong-tests/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/whats_new.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock-acp.spec +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock_terms.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/flake.lock +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/flake.nix +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/README.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/audit_sampler.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/auto_generate_tests.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/auto_release.sh +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/backup.sh +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/bump_version.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/comprehensive_loop.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/discover_cli_tools.sh +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/evolve_tests.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/install.sh +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/llm_balancer.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/mega_loop.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/meta_ralph_loop.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/notify_release.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/oss_task_harness.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/port_task.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/ralph_loop.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/session_loop_audit.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/shakedown.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/shakedown_interactive.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/shakedown_regression.sh +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/shakedown_suite.sh +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/shakedown_variance.sh +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/telegram_bot.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/test_full.sh +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/test_tui_path.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/tui_test.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/scripts/vllm_failover.sh +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/conftest.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/e2e/common.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/mock/utils.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_agents.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_integration.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_message_id.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_middleware.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_smoke.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/test_workloads.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/uv.lock +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/worked_examples/README.md +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/worked_examples/cli_subcommand_dispatch.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/worked_examples/lookup.json +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/worked_examples/sql_parser.py +0 -0
- {drydock_cli-2.6.80 → drydock_cli-2.6.82}/worked_examples/tree_walking_interpreter.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1419074
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.82
|
|
4
4
|
Summary: Local-first CLI coding agent — tested with Gemma 4 26B via vLLM
|
|
5
5
|
Project-URL: Homepage, https://github.com/fbobe321/drydock
|
|
6
6
|
Project-URL: Repository, https://github.com/fbobe321/drydock
|
|
@@ -84,7 +84,16 @@ class EventHandler:
|
|
|
84
84
|
)
|
|
85
85
|
await self._handle_assistant_message(event)
|
|
86
86
|
case ToolCallEvent():
|
|
87
|
-
|
|
87
|
+
# Finalize assistant content stream (user-visible text) but
|
|
88
|
+
# KEEP the reasoning widget open across tool calls. Closing
|
|
89
|
+
# it spawns a fresh "Thought" widget for every reasoning
|
|
90
|
+
# chunk between calls — a turn with N tool calls shows N
|
|
91
|
+
# "Thought" widgets stacked down the screen.
|
|
92
|
+
if self.current_streaming_message is not None:
|
|
93
|
+
await self.current_streaming_message.stop_stream()
|
|
94
|
+
if self.current_streaming_message.is_stripped_content_empty():
|
|
95
|
+
await self.current_streaming_message.remove()
|
|
96
|
+
self.current_streaming_message = None
|
|
88
97
|
return await self._handle_tool_call(event, loading_widget)
|
|
89
98
|
case ToolResultEvent():
|
|
90
99
|
await self.finalize_streaming()
|
|
@@ -76,22 +76,52 @@ class APIToolFormatHandler:
|
|
|
76
76
|
return "auto"
|
|
77
77
|
|
|
78
78
|
def process_api_response_message(self, message: Any) -> LLMMessage:
|
|
79
|
-
# Strip ALL Gemma 4 leaked channel tokens from content.
|
|
79
|
+
# Strip ALL Gemma 4 leaked channel/tool-call tokens from content.
|
|
80
80
|
# The model emits various formats:
|
|
81
81
|
# <|channel>thought...<channel|> (thinking tokens)
|
|
82
82
|
# <|channel>call:tool_name{...}<tool_call|> (malformed tool calls)
|
|
83
83
|
# <|channel><|channel>list_mcp_resources{...}<tool_call|> (double channel)
|
|
84
|
-
#
|
|
84
|
+
# <|tool_call>call:write_file{content:<|"|>import ... (bare tool_call,
|
|
85
|
+
# observed in color_converter session 20260414_121725 after a
|
|
86
|
+
# syntax-thrash BLOCK — model panicked, emitted this as its FINAL
|
|
87
|
+
# assistant turn with no real tool call; shakedown interpreted the
|
|
88
|
+
# text-only response as completion and ended the session.)
|
|
89
|
+
# Keeping them wastes context, confuses subsequent turns, and can
|
|
90
|
+
# fake-signal "done" to harnesses that watch for text-only messages.
|
|
85
91
|
content = message.content
|
|
86
|
-
if content and "<|channel>" in content:
|
|
92
|
+
if content and ("<|channel>" in content or "<|tool_call>" in content):
|
|
87
93
|
import re as _re
|
|
88
|
-
# Strip
|
|
94
|
+
# Strip <|channel>...<channel|> or <|channel>...<tool_call|> blocks
|
|
89
95
|
content = _re.sub(
|
|
90
96
|
r"<\|channel\>.*?(?:<channel\|>|<tool_call\|>)",
|
|
91
97
|
"",
|
|
92
98
|
content,
|
|
93
99
|
flags=_re.DOTALL,
|
|
94
|
-
)
|
|
100
|
+
)
|
|
101
|
+
# Strip bare <|tool_call>call:...<tool_call|> blocks (no channel
|
|
102
|
+
# prefix). Unterminated variants (stream cut off mid-emission)
|
|
103
|
+
# are stripped by the catch-all below.
|
|
104
|
+
content = _re.sub(
|
|
105
|
+
r"<\|tool_call\>.*?<tool_call\|>",
|
|
106
|
+
"",
|
|
107
|
+
content,
|
|
108
|
+
flags=_re.DOTALL,
|
|
109
|
+
)
|
|
110
|
+
# Final catch-all: any dangling <|...|> or <...|> tokens that
|
|
111
|
+
# didn't form a complete pair (stream truncation).
|
|
112
|
+
content = _re.sub(r"<\|[^>]{0,200}\|>", "", content)
|
|
113
|
+
content = _re.sub(r"<\|[^>]{0,200}>", "", content)
|
|
114
|
+
content = _re.sub(r"<[^>]{0,200}\|>", "", content)
|
|
115
|
+
# If remaining content is just tool-call-leak residue (starts
|
|
116
|
+
# with `call:toolname{` after stripping), nuke it. Otherwise
|
|
117
|
+
# harness watchers treat the garbage text as a completion
|
|
118
|
+
# signal. agent_loop's empty-content nudge will ask the model
|
|
119
|
+
# to continue with a real tool call.
|
|
120
|
+
stripped = content.strip()
|
|
121
|
+
if _re.match(r"^(call:\w+\{|\w+\{content:)", stripped):
|
|
122
|
+
content = None
|
|
123
|
+
else:
|
|
124
|
+
content = stripped or None
|
|
95
125
|
|
|
96
126
|
clean_message = {
|
|
97
127
|
"role": message.role,
|
|
@@ -134,25 +164,52 @@ class APIToolFormatHandler:
|
|
|
134
164
|
try:
|
|
135
165
|
args = json.loads(raw_json)
|
|
136
166
|
except json.JSONDecodeError:
|
|
137
|
-
#
|
|
167
|
+
# Gemma 4 frequently leaks thinking-token markers INSIDE
|
|
168
|
+
# JSON string values. Tokens like "<|\Fix" make `\F` an
|
|
169
|
+
# invalid JSON escape, which crashes the decoder and loses
|
|
170
|
+
# the whole tool call. Sanitize and retry before giving up.
|
|
138
171
|
import logging
|
|
172
|
+
import re as _re
|
|
139
173
|
logging.getLogger(__name__).warning(
|
|
140
174
|
"Malformed tool call JSON for %s: %s",
|
|
141
175
|
function_call.name,
|
|
142
176
|
(function_call.arguments or "")[:200],
|
|
143
177
|
)
|
|
144
|
-
# Try to salvage partial JSON by closing brackets
|
|
145
178
|
raw = (function_call.arguments or "").strip()
|
|
179
|
+
args = {}
|
|
146
180
|
if raw:
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
181
|
+
sanitized = raw
|
|
182
|
+
# Strip complete <|channel>...<channel|>/<tool_call|> blocks
|
|
183
|
+
sanitized = _re.sub(
|
|
184
|
+
r"<\|channel\>.*?(?:<channel\|>|<tool_call\|>)",
|
|
185
|
+
"", sanitized, flags=_re.DOTALL,
|
|
186
|
+
)
|
|
187
|
+
sanitized = _re.sub(
|
|
188
|
+
r"<\|tool_call\>.*?<tool_call\|>",
|
|
189
|
+
"", sanitized, flags=_re.DOTALL,
|
|
190
|
+
)
|
|
191
|
+
# Strip unpaired/truncated <|...|> and <|...> tokens.
|
|
192
|
+
sanitized = _re.sub(r"<\|[^>]{0,200}\|>", "", sanitized)
|
|
193
|
+
sanitized = _re.sub(r"<\|[^>]{0,200}>", "", sanitized)
|
|
194
|
+
sanitized = _re.sub(r"<[^>]{0,200}\|>", "", sanitized)
|
|
195
|
+
# Escape any remaining invalid backslash escapes (JSON
|
|
196
|
+
# only allows \" \\ \/ \b \f \n \r \t \u). Catches e.g.
|
|
197
|
+
# `<|\Fix` residue where `\F` would abort the decoder.
|
|
198
|
+
sanitized = _re.sub(
|
|
199
|
+
r'\\(?!["\\/bfnrtu])', r'\\\\', sanitized,
|
|
200
|
+
)
|
|
150
201
|
try:
|
|
151
|
-
args = json.loads(
|
|
202
|
+
args = json.loads(sanitized)
|
|
152
203
|
except json.JSONDecodeError:
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
204
|
+
# Last-ditch: try closing any unbalanced braces.
|
|
205
|
+
opens = sanitized.count("{") - sanitized.count("}")
|
|
206
|
+
if opens > 0:
|
|
207
|
+
try:
|
|
208
|
+
args = json.loads(sanitized + "}" * opens)
|
|
209
|
+
except json.JSONDecodeError:
|
|
210
|
+
args = {"_parse_error": f"Malformed JSON after sanitize: {sanitized[:100]}..."}
|
|
211
|
+
else:
|
|
212
|
+
args = {"_parse_error": f"Malformed JSON: {raw[:100]}..."}
|
|
156
213
|
|
|
157
214
|
tool_calls.append(
|
|
158
215
|
ParsedToolCall(
|
|
@@ -388,30 +388,17 @@ class Bash(
|
|
|
388
388
|
|
|
389
389
|
returncode = proc.returncode or 0
|
|
390
390
|
|
|
391
|
-
# Mechanical loop-breaker
|
|
392
|
-
#
|
|
393
|
-
#
|
|
394
|
-
#
|
|
395
|
-
#
|
|
396
|
-
# re-runs). ToolError goes through the error-handling path
|
|
397
|
-
# and the model visibly reacts to those.
|
|
391
|
+
# Mechanical loop-breaker (ADVISORY ONLY — never raise
|
|
392
|
+
# ToolError; see feedback_no_tool_errors_for_loop_detection.md).
|
|
393
|
+
# 3rd+ identical call: collapse body to short notice so the
|
|
394
|
+
# model sees "this ran already with same output" without
|
|
395
|
+
# getting refused into a block-loop.
|
|
398
396
|
state = self.state.__dict__.setdefault("_bash_history", {})
|
|
399
397
|
combined = stdout + "\n---STDERR---\n" + stderr
|
|
400
398
|
out_hash = hash((combined, returncode))
|
|
401
399
|
entry = state.get(args.command)
|
|
402
400
|
if entry and entry["hash"] == out_hash:
|
|
403
401
|
entry["count"] += 1
|
|
404
|
-
if entry["count"] >= 5:
|
|
405
|
-
raise ToolError(
|
|
406
|
-
f"REFUSED: `{args.command[:80]}` has run "
|
|
407
|
-
f"{entry['count']} times with IDENTICAL output "
|
|
408
|
-
f"(rc={returncode}). Re-running will NOT change "
|
|
409
|
-
f"anything. You MUST do something DIFFERENT: "
|
|
410
|
-
f"edit source files, write tests, read a DIFFERENT "
|
|
411
|
-
f"file, or move on. This exact command is blocked "
|
|
412
|
-
f"until you take a different action. Last stdout "
|
|
413
|
-
f"(first 300): {stdout[:300]!r}"
|
|
414
|
-
)
|
|
415
402
|
if entry["count"] >= 3:
|
|
416
403
|
notice = (
|
|
417
404
|
f"[NOTICE: this is the #{entry['count']} identical "
|
|
@@ -392,44 +392,19 @@ class WriteFile(
|
|
|
392
392
|
) -> AsyncGenerator[ToolStreamEvent | WriteFileResult, None]:
|
|
393
393
|
file_path, file_existed, content_bytes = self._prepare_and_validate_path(args)
|
|
394
394
|
|
|
395
|
-
# Path-write thrash
|
|
396
|
-
#
|
|
397
|
-
#
|
|
398
|
-
#
|
|
399
|
-
# content even though the model is rewriting the same broken version.
|
|
400
|
-
# Real bug: minivc session wrote commands/__init__.py 11 times — every
|
|
401
|
-
# write was clobbering the prior search_replace fix. Threshold 5 is
|
|
402
|
-
# generous; legitimate work writes a file 1–2x.
|
|
395
|
+
# Path-write thrash counter (just counts; advisory only). Per
|
|
396
|
+
# feedback_no_tool_errors_for_loop_detection.md: loop detection
|
|
397
|
+
# in tools must be advisory, never raise ToolError — hard blocks
|
|
398
|
+
# cause their own loops on long tasks.
|
|
403
399
|
path_writes = self.state.__dict__.setdefault("_path_writes", {})
|
|
404
400
|
path_key = str(file_path)
|
|
405
401
|
path_writes[path_key] = path_writes.get(path_key, 0) + 1
|
|
406
402
|
path_n = path_writes[path_key]
|
|
407
|
-
if path_n >= 5:
|
|
408
|
-
raise ToolError(
|
|
409
|
-
f"BLOCKED: write_file({file_path.name}) has been called "
|
|
410
|
-
f"{path_n} times this session on the same path. This is "
|
|
411
|
-
f"a thrash loop — likely write_file overwriting prior "
|
|
412
|
-
f"search_replace fixes, or repeated full rewrites instead "
|
|
413
|
-
f"of targeted edits. Refused. Switch tactic: "
|
|
414
|
-
f"(1) read_file({file_path.name}) to see CURRENT disk state, "
|
|
415
|
-
f"(2) use search_replace for surgical fixes, "
|
|
416
|
-
f"(3) move to a DIFFERENT file in your plan and come back later. "
|
|
417
|
-
f"Do NOT call write_file on this path again until you have "
|
|
418
|
-
f"made progress elsewhere."
|
|
419
|
-
)
|
|
420
403
|
|
|
421
404
|
# Skip if file already has identical content (prevents write loops).
|
|
422
|
-
#
|
|
423
|
-
#
|
|
424
|
-
#
|
|
425
|
-
# advisory signal in drydock (dedup content, system note nudge,
|
|
426
|
-
# missing-import warning, user-typed STOP interrupt) is ignored by
|
|
427
|
-
# Gemma 4 on write loops — confirmed by 3 of 5 failures in the
|
|
428
|
-
# April 2026 user-pain suite run. The hard block is narrow: it only
|
|
429
|
-
# fires on pure no-op writes (file exists AND content matches disk)
|
|
430
|
-
# after 3 identical attempts. Legitimate retries (different content,
|
|
431
|
-
# different path, or after the model successfully wrote a DIFFERENT
|
|
432
|
-
# file) are never blocked.
|
|
405
|
+
# ADVISORY ONLY — must never raise ToolError. See
|
|
406
|
+
# feedback_no_tool_errors_for_loop_detection.md: hard blocks cause
|
|
407
|
+
# their own loops on long tasks.
|
|
433
408
|
if file_existed:
|
|
434
409
|
try:
|
|
435
410
|
existing = file_path.read_text(encoding="utf-8")
|
|
@@ -439,28 +414,6 @@ class WriteFile(
|
|
|
439
414
|
state[key] = state.get(key, 0) + 1
|
|
440
415
|
repeat_n = state[key]
|
|
441
416
|
|
|
442
|
-
# Tier 3: hard block. 3rd identical no-op write → ToolError.
|
|
443
|
-
if repeat_n >= 3:
|
|
444
|
-
try:
|
|
445
|
-
siblings = sorted(
|
|
446
|
-
p.name for p in file_path.parent.iterdir()
|
|
447
|
-
if p.is_file() and not p.name.startswith("__pycache__")
|
|
448
|
-
)
|
|
449
|
-
sibling_str = ", ".join(siblings) if siblings else "(none)"
|
|
450
|
-
except Exception:
|
|
451
|
-
sibling_str = "(unknown)"
|
|
452
|
-
raise ToolError(
|
|
453
|
-
f"BLOCKED: write_file({file_path.name}) has been called "
|
|
454
|
-
f"{repeat_n} times with IDENTICAL content that already "
|
|
455
|
-
f"matches the file on disk. This is a no-op loop. "
|
|
456
|
-
f"Files in {file_path.parent.name}/: {sibling_str}. "
|
|
457
|
-
f"Do something DIFFERENT — write a different file from "
|
|
458
|
-
f"your plan, or run bash with `python3 -m "
|
|
459
|
-
f"{file_path.parent.name} --help` to verify the package. "
|
|
460
|
-
f"This exact write_file call is refused."
|
|
461
|
-
)
|
|
462
|
-
|
|
463
|
-
# Tier 2: escalated advisory with directory listing.
|
|
464
417
|
msg = "File already has this exact content (no-op). "
|
|
465
418
|
if repeat_n >= 2:
|
|
466
419
|
try:
|
|
@@ -472,16 +425,13 @@ class WriteFile(
|
|
|
472
425
|
msg += (
|
|
473
426
|
f"You've written this exact file {repeat_n} times. "
|
|
474
427
|
f"Files currently in {file_path.parent.name}/: "
|
|
475
|
-
f"{sibling_str}.
|
|
476
|
-
f"
|
|
477
|
-
f"
|
|
478
|
-
f"to verify the package works. "
|
|
479
|
-
f"ONE MORE identical write to this path will be blocked."
|
|
428
|
+
f"{sibling_str}. Move on — write a DIFFERENT file "
|
|
429
|
+
f"from your plan, or run `bash` with `python3 -m "
|
|
430
|
+
f"{file_path.parent.name} --help` to verify."
|
|
480
431
|
)
|
|
481
432
|
except Exception:
|
|
482
433
|
msg += "Move to the NEXT file in your plan."
|
|
483
434
|
else:
|
|
484
|
-
# Tier 1: first duplicate — friendly advisory.
|
|
485
435
|
msg += "Move to the NEXT file in your plan."
|
|
486
436
|
|
|
487
437
|
yield WriteFileResult(
|
|
@@ -491,8 +441,6 @@ class WriteFile(
|
|
|
491
441
|
content=msg,
|
|
492
442
|
)
|
|
493
443
|
return
|
|
494
|
-
except ToolError:
|
|
495
|
-
raise
|
|
496
444
|
except Exception:
|
|
497
445
|
pass
|
|
498
446
|
|
|
@@ -511,10 +459,9 @@ class WriteFile(
|
|
|
511
459
|
import ast
|
|
512
460
|
tree = ast.parse(args.content)
|
|
513
461
|
except SyntaxError as e:
|
|
514
|
-
# Track consecutive syntax-error writes per file.
|
|
515
|
-
#
|
|
516
|
-
#
|
|
517
|
-
# the same path, escalate to ToolError forcing a tactic change.
|
|
462
|
+
# Track consecutive syntax-error writes per file. ADVISORY
|
|
463
|
+
# ONLY — must not raise ToolError. See
|
|
464
|
+
# feedback_no_tool_errors_for_loop_detection.md.
|
|
518
465
|
thrash = self.state.__dict__.setdefault("_syntax_thrash", {})
|
|
519
466
|
key = str(file_path)
|
|
520
467
|
thrash[key] = thrash.get(key, 0) + 1
|
|
@@ -525,21 +472,17 @@ class WriteFile(
|
|
|
525
472
|
f"\n Fix this before moving to the next file."
|
|
526
473
|
)
|
|
527
474
|
if thrash_n >= 3:
|
|
528
|
-
|
|
529
|
-
f"
|
|
530
|
-
f"
|
|
531
|
-
f"
|
|
532
|
-
f"
|
|
533
|
-
f"refused. Switch tactic: "
|
|
534
|
-
f"(1) read_file({file_path.name}) to see current state, "
|
|
535
|
-
f"(2) use search_replace for targeted fixes, or "
|
|
536
|
-
f"(3) write a DIFFERENT file from your plan and come "
|
|
537
|
-
f"back to this one. This exact write is rejected."
|
|
475
|
+
syntax_warning += (
|
|
476
|
+
f"\n [{thrash_n}th consecutive syntax error on this "
|
|
477
|
+
f"file. Switch tactic: read_file() to see current "
|
|
478
|
+
f"state, then use search_replace for surgical fixes, "
|
|
479
|
+
f"or write a DIFFERENT file and come back later.]"
|
|
538
480
|
)
|
|
539
481
|
elif thrash_n == 2:
|
|
540
482
|
syntax_warning += (
|
|
541
|
-
f"\n [2nd syntax error on this file
|
|
542
|
-
f"
|
|
483
|
+
f"\n [2nd syntax error on this file — consider "
|
|
484
|
+
f"read_file + search_replace instead of another full "
|
|
485
|
+
f"rewrite.]"
|
|
543
486
|
)
|
|
544
487
|
else:
|
|
545
488
|
# Reset thrash counter on a successful parse.
|
|
@@ -180,6 +180,27 @@ class ToolManager:
|
|
|
180
180
|
name: cls for name, cls in self._available.items() if cls.is_available()
|
|
181
181
|
}
|
|
182
182
|
|
|
183
|
+
# Auto-disable tools that misfire for Gemma 4. The model mixes up
|
|
184
|
+
# `task` (subagent delegation) with `todo` (task list), recurses
|
|
185
|
+
# with thinking-token-leaked output that gets fed back to itself.
|
|
186
|
+
# Observed: minivc session 20260414_120752 — model called `task`
|
|
187
|
+
# with builder agent; subagent response was raw <|tool_call>
|
|
188
|
+
# thinking tokens rendered as text, triggered session hang.
|
|
189
|
+
# Scaffolding per CLAUDE.md constraint; remove when model improves.
|
|
190
|
+
_GEMMA4_AUTO_DISABLE = {
|
|
191
|
+
"task", "task_create", "task_update", "task_list",
|
|
192
|
+
"ask_user_question", "invoke_skill", "tool_search",
|
|
193
|
+
}
|
|
194
|
+
try:
|
|
195
|
+
active = self._config.get_active_model()
|
|
196
|
+
if "gemma" in active.name.lower():
|
|
197
|
+
runtime_available = {
|
|
198
|
+
name: cls for name, cls in runtime_available.items()
|
|
199
|
+
if name not in _GEMMA4_AUTO_DISABLE
|
|
200
|
+
}
|
|
201
|
+
except (ValueError, AttributeError):
|
|
202
|
+
pass
|
|
203
|
+
|
|
183
204
|
if self._config.enabled_tools:
|
|
184
205
|
return {
|
|
185
206
|
name: cls
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1337772
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.6.80 → drydock_cli-2.6.82}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|