drydock-cli 1.3.0__tar.gz → 1.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/PKG-INFO +1 -1
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/agent_loop.py +17 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/prompts/cli.md +7 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/read_file.py +22 -21
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/search_replace.py +23 -14
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/task.py +45 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/write_file.py +17 -8
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/pyproject.toml +1 -1
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/.github/CODEOWNERS +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/.github/workflows/ci.yml +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/.github/workflows/release.yml +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/.gitignore +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/.pre-commit-config.yaml +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/.python-version +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/.typos.toml +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/.vscode/extensions.json +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/.vscode/launch.json +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/.vscode/settings.json +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/AGENTS.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/CHANGELOG.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/CLAUDE.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/CONTRIBUTING.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/Drydock_rebrand.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/LICENSE +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/NOTICE +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/PRD.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/README.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/action.yml +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/distribution/zed/LICENSE +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/distribution/zed/extension.toml +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/docs/README.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/docs/acp-setup.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/docs/proxy-setup.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/acp/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/acp/utils.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/cli.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/commands.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/agents/models.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/auth/github.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/consultant.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/hooks.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/llm/format.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/llm/types.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/logger.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/middleware.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/paths/_vibe_home.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/plan_session.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/plugins.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/programmatic.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/skills/models.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/slug.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/base.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/task_manager.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/types.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/utils.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/skills/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/whats_new.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock-acp.spec +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock_terms.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/flake.lock +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/flake.nix +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/scripts/README.md +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/scripts/backup.sh +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/scripts/bump_version.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/scripts/install.sh +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/scripts/prepare_release.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/scripts/test_full.sh +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/scripts/test_smoke.sh +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/conftest.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_acp.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_bash.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_content.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_utils.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/backend/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/backend/test_backend.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/test_commands.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/conftest.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/core/test_agents.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/core/test_slug.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/core/test_utils.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/e2e/common.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/e2e/conftest.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/mock/__init__.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/mock/utils.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/skills/conftest.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/skills/test_manager.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/skills/test_models.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/skills/test_parser.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_agent_backend.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_agent_stats.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_agents.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_current_bugs.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_full_regression.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_history_manager.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_integration.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_loop_detection.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_message_id.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_message_merging.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_middleware.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_multi_agent.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_real_failures.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_real_issues.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_smoke.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_system_prompt.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_tagged_text.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/test_user_issues.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/tools/test_bash.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/tools/test_grep.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/tools/test_task.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-1.3.0 → drydock_cli-1.3.2}/uv.lock +0 -0
|
@@ -562,6 +562,23 @@ class AgentLoop:
|
|
|
562
562
|
except (json.JSONDecodeError, AttributeError):
|
|
563
563
|
edit_path = ""
|
|
564
564
|
|
|
565
|
+
# Auto-run diagnostics on edited Python files
|
|
566
|
+
if edit_path and edit_path.endswith(".py"):
|
|
567
|
+
try:
|
|
568
|
+
import asyncio
|
|
569
|
+
import subprocess
|
|
570
|
+
diag_result = subprocess.run(
|
|
571
|
+
["python3", "-c", f"import ast; ast.parse(open('{edit_path}').read()); print('OK')"],
|
|
572
|
+
capture_output=True, text=True, timeout=5,
|
|
573
|
+
)
|
|
574
|
+
if diag_result.returncode != 0:
|
|
575
|
+
self._inject_system_note(
|
|
576
|
+
f"SYNTAX ERROR in {edit_path}: {diag_result.stderr.strip()[:200]}. "
|
|
577
|
+
f"Fix the syntax error before continuing."
|
|
578
|
+
)
|
|
579
|
+
except Exception:
|
|
580
|
+
pass
|
|
581
|
+
|
|
565
582
|
# After first edit: prompt to check related files
|
|
566
583
|
if first_edit and edit_path:
|
|
567
584
|
self._inject_system_note(
|
|
@@ -38,10 +38,17 @@ HOW to delegate:
|
|
|
38
38
|
task(task="Explore the project structure and list all modules", agent="explore")
|
|
39
39
|
task(task="Analyze why test_auth fails with KeyError", agent="diagnostic")
|
|
40
40
|
task(task="Plan the refactoring of the auth module", agent="planner")
|
|
41
|
+
task(task="Review the auth module for security issues", agent="explore", background=true)
|
|
41
42
|
invoke_skill(skill_name="review")
|
|
42
43
|
invoke_skill(skill_name="investigate", arguments="Fix the login timeout bug")
|
|
43
44
|
```
|
|
44
45
|
|
|
46
|
+
Background subagents (background=true):
|
|
47
|
+
- Run without blocking your main conversation
|
|
48
|
+
- Results saved to task list — check with task_list
|
|
49
|
+
- Use for parallel work: launch multiple subagents, then check results
|
|
50
|
+
- Example: `task(task="Explore module A", agent="explore", background=true)` then `task(task="Explore module B", agent="explore", background=true)` — both run simultaneously
|
|
51
|
+
|
|
45
52
|
WHEN to delegate (ALWAYS do this):
|
|
46
53
|
- Project has 3+ files to examine → `task(..., agent="explore")` FIRST
|
|
47
54
|
- Need to understand unfamiliar code → explore subagent, then you fix
|
|
@@ -136,32 +136,28 @@ class ReadFile(
|
|
|
136
136
|
return file_path
|
|
137
137
|
|
|
138
138
|
async def _read_file(self, args: ReadFileArgs, file_path: Path) -> _ReadResult:
|
|
139
|
-
|
|
139
|
+
import asyncio
|
|
140
|
+
|
|
141
|
+
def _sync_read() -> _ReadResult:
|
|
140
142
|
lines_to_return: list[str] = []
|
|
141
143
|
bytes_read = 0
|
|
142
144
|
was_truncated = False
|
|
143
145
|
|
|
144
|
-
with
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
line_index = 0
|
|
149
|
-
async for line in f:
|
|
150
|
-
if line_index < args.offset:
|
|
151
|
-
line_index += 1
|
|
152
|
-
continue
|
|
146
|
+
with open(file_path, encoding="utf-8", errors="ignore") as f:
|
|
147
|
+
for line_index, line in enumerate(f):
|
|
148
|
+
if line_index < args.offset:
|
|
149
|
+
continue
|
|
153
150
|
|
|
154
|
-
|
|
155
|
-
|
|
151
|
+
if args.limit is not None and len(lines_to_return) >= args.limit:
|
|
152
|
+
break
|
|
156
153
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
154
|
+
line_bytes = len(line.encode("utf-8"))
|
|
155
|
+
if bytes_read + line_bytes > self.config.max_read_bytes:
|
|
156
|
+
was_truncated = True
|
|
157
|
+
break
|
|
161
158
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
line_index += 1
|
|
159
|
+
lines_to_return.append(line)
|
|
160
|
+
bytes_read += line_bytes
|
|
165
161
|
|
|
166
162
|
return _ReadResult(
|
|
167
163
|
lines=lines_to_return,
|
|
@@ -169,8 +165,13 @@ class ReadFile(
|
|
|
169
165
|
was_truncated=was_truncated,
|
|
170
166
|
)
|
|
171
167
|
|
|
172
|
-
|
|
173
|
-
|
|
168
|
+
try:
|
|
169
|
+
loop = asyncio.get_running_loop()
|
|
170
|
+
return await asyncio.wait_for(
|
|
171
|
+
loop.run_in_executor(None, _sync_read), timeout=10,
|
|
172
|
+
)
|
|
173
|
+
except asyncio.TimeoutError:
|
|
174
|
+
raise ToolError(f"Timed out reading {file_path} after 10s.")
|
|
174
175
|
except OSError as exc:
|
|
175
176
|
raise ToolError(f"Error reading {file_path}: {exc}") from exc
|
|
176
177
|
|
|
@@ -226,12 +226,19 @@ class SearchReplace(
|
|
|
226
226
|
return file_path, search_replace_blocks
|
|
227
227
|
|
|
228
228
|
async def _read_file(self, file_path: Path) -> str:
|
|
229
|
+
import asyncio
|
|
230
|
+
|
|
231
|
+
def _sync_read():
|
|
232
|
+
with open(file_path, encoding="utf-8") as f:
|
|
233
|
+
return f.read()
|
|
234
|
+
|
|
229
235
|
try:
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
236
|
+
loop = asyncio.get_running_loop()
|
|
237
|
+
return await asyncio.wait_for(
|
|
238
|
+
loop.run_in_executor(None, _sync_read), timeout=10,
|
|
239
|
+
)
|
|
240
|
+
except asyncio.TimeoutError:
|
|
241
|
+
raise ToolError(f"Timed out reading {file_path} after 10s.")
|
|
235
242
|
except UnicodeDecodeError as e:
|
|
236
243
|
raise ToolError(f"Unicode decode error reading {file_path}: {e}") from e
|
|
237
244
|
except PermissionError:
|
|
@@ -243,17 +250,19 @@ class SearchReplace(
|
|
|
243
250
|
shutil.copy2(file_path, file_path.with_suffix(file_path.suffix + ".bak"))
|
|
244
251
|
|
|
245
252
|
async def _write_file(self, file_path: Path, content: str) -> None:
|
|
253
|
+
import asyncio
|
|
254
|
+
|
|
255
|
+
def _sync_write():
|
|
256
|
+
with open(file_path, "w", encoding="utf-8") as f:
|
|
257
|
+
f.write(content)
|
|
258
|
+
|
|
246
259
|
try:
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
) as f:
|
|
251
|
-
await f.write(content)
|
|
252
|
-
except TimeoutError:
|
|
253
|
-
raise ToolError(
|
|
254
|
-
f"Timed out writing {file_path} after 30s. "
|
|
255
|
-
f"The file may be locked or on a slow filesystem."
|
|
260
|
+
loop = asyncio.get_running_loop()
|
|
261
|
+
await asyncio.wait_for(
|
|
262
|
+
loop.run_in_executor(None, _sync_write), timeout=10,
|
|
256
263
|
)
|
|
264
|
+
except asyncio.TimeoutError:
|
|
265
|
+
raise ToolError(f"Timed out writing {file_path} after 10s.")
|
|
257
266
|
except PermissionError:
|
|
258
267
|
raise ToolError(f"Permission denied writing to file: {file_path}")
|
|
259
268
|
except OSError as e:
|
|
@@ -38,6 +38,10 @@ class TaskArgs(BaseModel):
|
|
|
38
38
|
default="explore",
|
|
39
39
|
description="Name of the agent profile to use (must be a subagent)",
|
|
40
40
|
)
|
|
41
|
+
background: bool = Field(
|
|
42
|
+
default=False,
|
|
43
|
+
description="Run in background (non-blocking). Results available via task_list.",
|
|
44
|
+
)
|
|
41
45
|
|
|
42
46
|
|
|
43
47
|
class TaskResult(BaseModel):
|
|
@@ -128,15 +132,56 @@ class Task(
|
|
|
128
132
|
enabled=ctx.session_dir is not None,
|
|
129
133
|
)
|
|
130
134
|
base_config = VibeConfig.load(session_logging=session_logging)
|
|
135
|
+
|
|
136
|
+
# Apply per-agent model if configured
|
|
137
|
+
if agent_profile.model:
|
|
138
|
+
base_config = agent_profile.apply_to_config(base_config)
|
|
139
|
+
|
|
131
140
|
subagent_loop = AgentLoop(
|
|
132
141
|
config=base_config,
|
|
133
142
|
agent_name=args.agent,
|
|
143
|
+
max_turns=agent_profile.max_turns,
|
|
134
144
|
entrypoint_metadata=ctx.entrypoint_metadata,
|
|
135
145
|
)
|
|
136
146
|
|
|
137
147
|
if ctx and ctx.approval_callback:
|
|
138
148
|
subagent_loop.set_approval_callback(ctx.approval_callback)
|
|
139
149
|
|
|
150
|
+
# Background execution: launch and return immediately
|
|
151
|
+
if args.background:
|
|
152
|
+
import asyncio
|
|
153
|
+
from drydock.core.tools.builtins.task_manager import _TASKS
|
|
154
|
+
|
|
155
|
+
task_id = f"bg-{args.agent}-{len(_TASKS)+1}"
|
|
156
|
+
_TASKS[task_id] = {
|
|
157
|
+
"id": task_id,
|
|
158
|
+
"title": f"[background] {args.task[:60]}",
|
|
159
|
+
"description": args.task,
|
|
160
|
+
"status": "in_progress",
|
|
161
|
+
"agent": args.agent,
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
async def _run_background():
|
|
165
|
+
response_parts = []
|
|
166
|
+
try:
|
|
167
|
+
async for event in subagent_loop.act(args.task):
|
|
168
|
+
if isinstance(event, AssistantEvent) and event.content:
|
|
169
|
+
response_parts.append(event.content)
|
|
170
|
+
except Exception as e:
|
|
171
|
+
response_parts.append(f"[Error: {e}]")
|
|
172
|
+
_TASKS[task_id]["status"] = "completed"
|
|
173
|
+
_TASKS[task_id]["result"] = "".join(response_parts)
|
|
174
|
+
|
|
175
|
+
asyncio.create_task(_run_background())
|
|
176
|
+
|
|
177
|
+
yield TaskResult(
|
|
178
|
+
response=f"Subagent '{args.agent}' launched in background (task {task_id}). Check status with task_list.",
|
|
179
|
+
turns_used=0,
|
|
180
|
+
completed=False,
|
|
181
|
+
)
|
|
182
|
+
return
|
|
183
|
+
|
|
184
|
+
# Foreground execution: block and collect results
|
|
140
185
|
accumulated_response: list[str] = []
|
|
141
186
|
completed = True
|
|
142
187
|
try:
|
|
@@ -147,16 +147,25 @@ class WriteFile(
|
|
|
147
147
|
return file_path, file_existed, content_bytes
|
|
148
148
|
|
|
149
149
|
async def _write_file(self, args: WriteFileArgs, file_path: Path) -> None:
|
|
150
|
+
import asyncio
|
|
151
|
+
import concurrent.futures
|
|
152
|
+
|
|
153
|
+
def _sync_write():
|
|
154
|
+
with open(file_path, "w", encoding="utf-8") as f:
|
|
155
|
+
f.write(args.content)
|
|
156
|
+
|
|
150
157
|
try:
|
|
151
|
-
with
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
158
|
+
# Use a thread with a real timeout — anyio.fail_after doesn't
|
|
159
|
+
# cancel thread-pool I/O, which is why writes hung for 45+ minutes
|
|
160
|
+
loop = asyncio.get_running_loop()
|
|
161
|
+
await asyncio.wait_for(
|
|
162
|
+
loop.run_in_executor(None, _sync_write),
|
|
163
|
+
timeout=10, # 10 seconds is generous for a text file write
|
|
164
|
+
)
|
|
165
|
+
except asyncio.TimeoutError:
|
|
157
166
|
raise ToolError(
|
|
158
|
-
f"Timed out writing {file_path} after
|
|
159
|
-
f"The file may be locked by another process
|
|
167
|
+
f"Timed out writing {file_path} after 10s. "
|
|
168
|
+
f"The file may be locked by another process."
|
|
160
169
|
)
|
|
161
170
|
except Exception as e:
|
|
162
171
|
raise ToolError(f"Error writing {file_path}: {e}") from e
|
|
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-1.3.0 → drydock_cli-1.3.2}/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
|
|
File without changes
|
{drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/notifications/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/notifications/ports/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/chat_input/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/chat_input/container.py
RENAMED
|
File without changes
|
{drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/widgets/chat_input/text_area.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
|
|
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-1.3.0 → drydock_cli-1.3.2}/drydock/cli/textual_ui/windowing/history_windowing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py
RENAMED
|
File without changes
|
{drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/cli/update_notifier/ports/update_cache_repository.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
|
|
File without changes
|
|
File without changes
|
{drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/autocompletion/file_indexer/__init__.py
RENAMED
|
File without changes
|
{drydock_cli-1.3.0 → drydock_cli-1.3.2}/drydock/core/autocompletion/file_indexer/ignore_rules.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|