drydock-cli 1.1.6__tar.gz → 1.2.0__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.1.6 → drydock_cli-1.2.0}/PKG-INFO +1 -1
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/prompts/cli.md +19 -1
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/pyproject.toml +1 -1
- drydock_cli-1.2.0/tests/test_multi_agent.py +112 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/.github/CODEOWNERS +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/.github/workflows/ci.yml +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/.github/workflows/release.yml +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/.gitignore +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/.pre-commit-config.yaml +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/.python-version +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/.typos.toml +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/.vscode/extensions.json +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/.vscode/launch.json +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/.vscode/settings.json +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/AGENTS.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/CHANGELOG.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/CLAUDE.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/CONTRIBUTING.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/Drydock_rebrand.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/LICENSE +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/NOTICE +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/PRD.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/README.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/action.yml +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/distribution/zed/LICENSE +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/distribution/zed/extension.toml +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/docs/README.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/docs/acp-setup.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/docs/proxy-setup.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/acp/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/acp/utils.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/cli.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/commands.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/agent_loop.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/agents/models.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/auth/github.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/consultant.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/hooks.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/llm/format.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/llm/types.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/logger.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/middleware.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/paths/_vibe_home.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/plan_session.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/programmatic.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/skills/models.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/slug.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/base.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/task_manager.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/types.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/utils.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/skills/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/whats_new.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock-acp.spec +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock_terms.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/flake.lock +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/flake.nix +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/scripts/README.md +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/scripts/backup.sh +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/scripts/bump_version.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/scripts/install.sh +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/scripts/prepare_release.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/scripts/test_full.sh +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/scripts/test_smoke.sh +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/conftest.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_acp.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_bash.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_content.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_utils.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/backend/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/backend/test_backend.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/test_commands.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/conftest.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/core/test_agents.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/core/test_slug.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/core/test_utils.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/e2e/common.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/e2e/conftest.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/mock/__init__.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/mock/utils.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/skills/conftest.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/skills/test_manager.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/skills/test_models.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/skills/test_parser.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/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.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_agent_backend.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_agent_stats.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_agents.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_current_bugs.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_full_regression.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_history_manager.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_integration.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_loop_detection.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_message_id.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_message_merging.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_middleware.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_real_failures.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_real_issues.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_smoke.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_system_prompt.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_tagged_text.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/test_user_issues.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/tools/test_bash.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/tools/test_grep.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/tools/test_task.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-1.1.6 → drydock_cli-1.2.0}/uv.lock +0 -0
|
@@ -17,9 +17,27 @@ Investigate: user wants understanding, explanation, audit, review, or diagnosis
|
|
|
17
17
|
Change: user wants code created, modified, or fixed → proceed to Plan then Execute.
|
|
18
18
|
If unclear, default to investigate. It is better to explain what you would do than to make an unwanted change.
|
|
19
19
|
|
|
20
|
+
Multi-Agent Delegation (IMPORTANT):
|
|
21
|
+
You have subagents that run in their own context. USE THEM:
|
|
22
|
+
- For codebase exploration: `task(task="Explore the project structure and report what you find", agent="explore")`
|
|
23
|
+
- For investigating bugs: `task(task="Find the root cause of the X error in module Y", agent="explore")`
|
|
24
|
+
- For code review: `invoke_skill(skill_name="review")`
|
|
25
|
+
- For security audits or architecture review: delegate to a subagent so your main context stays clean
|
|
26
|
+
|
|
27
|
+
WHEN to delegate:
|
|
28
|
+
- The project has 3+ files to examine → delegate exploration to a subagent
|
|
29
|
+
- You need to understand a codebase before making changes → subagent explores, you fix
|
|
30
|
+
- You're doing a review or audit → use /review skill or delegate
|
|
31
|
+
- A task has multiple independent parts → run subagents in parallel
|
|
32
|
+
|
|
33
|
+
WHEN NOT to delegate:
|
|
34
|
+
- Simple single-file fixes
|
|
35
|
+
- Quick questions that need 1-2 tool calls
|
|
36
|
+
- Tasks where you already know exactly what to do
|
|
37
|
+
|
|
20
38
|
Explore. Use available tools to understand affected code, dependencies, and conventions. Never edit a file you haven't read in this session.
|
|
21
39
|
Identify constraints: language, framework, test setup, and any user restrictions on scope.
|
|
22
|
-
When given multiple file paths or a complex task:
|
|
40
|
+
When given multiple file paths or a complex task: delegate exploration to a subagent with `task(task="...", agent="explore")` first. The subagent explores and reports back. You then fix based on its findings. This keeps your main context clean.
|
|
23
41
|
|
|
24
42
|
Phase 2 — Plan (Change tasks only)
|
|
25
43
|
State your plan before writing code:
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"""Tests that DryDock actually uses multi-agent delegation.
|
|
2
|
+
|
|
3
|
+
These MUST run against the real vLLM backend.
|
|
4
|
+
They should FAIL if the model does everything in a single context
|
|
5
|
+
without using the task tool for subagent delegation.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import asyncio
|
|
11
|
+
import os
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
import httpx
|
|
15
|
+
import pytest
|
|
16
|
+
|
|
17
|
+
from drydock.core.config.harness_files import init_harness_files_manager
|
|
18
|
+
try:
|
|
19
|
+
init_harness_files_manager("user", "project")
|
|
20
|
+
except RuntimeError:
|
|
21
|
+
pass
|
|
22
|
+
|
|
23
|
+
from drydock.core.agent_loop import AgentLoop
|
|
24
|
+
from drydock.core.agents.models import BuiltinAgentName
|
|
25
|
+
from drydock.core.config import Backend, ModelConfig, ProviderConfig, VibeConfig
|
|
26
|
+
from drydock.core.types import AssistantEvent, BaseEvent, ToolCallEvent, ToolResultEvent
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _vllm_ok():
|
|
30
|
+
try:
|
|
31
|
+
return httpx.get("http://localhost:8000/v1/models", timeout=3).status_code == 200
|
|
32
|
+
except Exception:
|
|
33
|
+
return False
|
|
34
|
+
|
|
35
|
+
pytestmark = pytest.mark.skipif(not _vllm_ok(), reason="vLLM not running")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _config(tmp_path):
|
|
39
|
+
return VibeConfig(
|
|
40
|
+
active_model="devstral", auto_approve=True, enable_telemetry=False,
|
|
41
|
+
include_project_context=False, system_prompt_id="cli",
|
|
42
|
+
providers=[ProviderConfig(name="local", api_base="http://localhost:8000/v1", api_key_env_var="", backend=Backend.GENERIC)],
|
|
43
|
+
models=[ModelConfig(name="devstral", provider="local", input_price=0, output_price=0)],
|
|
44
|
+
session_logging={"enabled": False, "save_dir": str(tmp_path / "logs")},
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
def _agent(tmp_path, max_turns=12):
|
|
48
|
+
return AgentLoop(config=_config(tmp_path), agent_name=BuiltinAgentName.AUTO_APPROVE, max_turns=max_turns)
|
|
49
|
+
|
|
50
|
+
async def _run(agent, prompt, max_events=80):
|
|
51
|
+
events = []
|
|
52
|
+
async for ev in agent.act(prompt):
|
|
53
|
+
events.append(ev)
|
|
54
|
+
if len(events) >= max_events:
|
|
55
|
+
break
|
|
56
|
+
return events
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@pytest.mark.asyncio
|
|
60
|
+
async def test_agent_uses_subagent_naturally(tmp_path):
|
|
61
|
+
"""Agent should use subagents WITHOUT being told to.
|
|
62
|
+
|
|
63
|
+
The system prompt must instruct the model to delegate complex tasks
|
|
64
|
+
to subagents. If the model does everything alone, this test FAILS.
|
|
65
|
+
|
|
66
|
+
The prompt does NOT mention subagents, task tool, or delegation.
|
|
67
|
+
"""
|
|
68
|
+
# Create a multi-file project with enough complexity
|
|
69
|
+
proj = tmp_path / "project"
|
|
70
|
+
proj.mkdir()
|
|
71
|
+
(proj / "main.py").write_text(
|
|
72
|
+
"from auth import login\nfrom db import get_user\n\n"
|
|
73
|
+
"def handle_request(username, password):\n"
|
|
74
|
+
" user = get_user(username)\n"
|
|
75
|
+
" if login(user, password):\n"
|
|
76
|
+
" return {'status': 'ok'}\n"
|
|
77
|
+
" return {'status': 'denied'}\n"
|
|
78
|
+
)
|
|
79
|
+
(proj / "auth.py").write_text(
|
|
80
|
+
"import hashlib\n\ndef login(user, password):\n"
|
|
81
|
+
" hashed = hashlib.md5(password.encode()).hexdigest()\n"
|
|
82
|
+
" return user['password_hash'] == hashed\n"
|
|
83
|
+
)
|
|
84
|
+
(proj / "db.py").write_text(
|
|
85
|
+
"USERS = {'admin': {'password_hash': '21232f297a57a5a743894a0e4a801fc3', 'role': 'admin'}}\n\n"
|
|
86
|
+
"def get_user(username):\n return USERS.get(username)\n"
|
|
87
|
+
)
|
|
88
|
+
(proj / "config.py").write_text("DB_HOST = 'localhost'\nDB_PORT = 5432\nSECRET = 'changeme'\n")
|
|
89
|
+
(proj / "README.md").write_text("# My App\nA simple auth system.\n")
|
|
90
|
+
|
|
91
|
+
agent = _agent(tmp_path)
|
|
92
|
+
|
|
93
|
+
# Natural prompt — NO mention of subagents or task tool
|
|
94
|
+
events = await _run(agent,
|
|
95
|
+
f"Review the project at {proj}. It has multiple files. "
|
|
96
|
+
f"Find any security issues and explain the architecture."
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
tool_calls = {}
|
|
100
|
+
for ev in events:
|
|
101
|
+
if isinstance(ev, ToolCallEvent):
|
|
102
|
+
tool_calls[ev.tool_name] = tool_calls.get(ev.tool_name, 0) + 1
|
|
103
|
+
|
|
104
|
+
used_task = "task" in tool_calls
|
|
105
|
+
used_skill = "invoke_skill" in tool_calls
|
|
106
|
+
|
|
107
|
+
assert used_task or used_skill, (
|
|
108
|
+
f"FAIL: Agent did NOT use subagents for a multi-file review task. "
|
|
109
|
+
f"Tool calls: {tool_calls}. "
|
|
110
|
+
f"The system prompt must tell the model to use the task tool "
|
|
111
|
+
f"for codebase exploration and complex multi-file analysis."
|
|
112
|
+
)
|
|
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.1.6 → drydock_cli-1.2.0}/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.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/notifications/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-1.1.6 → drydock_cli-1.2.0}/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.1.6 → drydock_cli-1.2.0}/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.1.6 → drydock_cli-1.2.0}/drydock/cli/textual_ui/widgets/chat_input/container.py
RENAMED
|
File without changes
|
{drydock_cli-1.1.6 → drydock_cli-1.2.0}/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.1.6 → drydock_cli-1.2.0}/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.1.6 → drydock_cli-1.2.0}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py
RENAMED
|
File without changes
|
{drydock_cli-1.1.6 → drydock_cli-1.2.0}/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
|
|
File without changes
|
{drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/autocompletion/file_indexer/__init__.py
RENAMED
|
File without changes
|
{drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/autocompletion/file_indexer/ignore_rules.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
|
{drydock_cli-1.1.6 → drydock_cli-1.2.0}/drydock/core/config/harness_files/_harness_manager.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
|
|
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
|