drydock-cli 1.3.6__tar.gz → 1.3.8__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.6 → drydock_cli-1.3.8}/PKG-INFO +1 -1
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/agent_loop.py +11 -17
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/prompts/cli.md +4 -2
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/pyproject.toml +1 -1
- drydock_cli-1.3.8/tests/test_real_workflow.py +86 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/.github/CODEOWNERS +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/.github/workflows/ci.yml +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/.github/workflows/release.yml +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/.gitignore +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/.pre-commit-config.yaml +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/.python-version +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/.typos.toml +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/.vscode/extensions.json +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/.vscode/launch.json +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/.vscode/settings.json +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/AGENTS.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/CHANGELOG.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/CLAUDE.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/CONTRIBUTING.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/Drydock_rebrand.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/LICENSE +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/NOTICE +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/PRD.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/README.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/action.yml +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/distribution/zed/LICENSE +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/distribution/zed/extension.toml +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/docs/README.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/docs/acp-setup.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/docs/proxy-setup.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/acp/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/acp/utils.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/cli.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/commands.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/agents/models.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/auth/github.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/consultant.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/hooks.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/llm/format.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/llm/types.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/logger.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/middleware.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/paths/_vibe_home.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/plan_session.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/plugins.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/programmatic.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/skills/models.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/slug.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/base.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/task_manager.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/types.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/core/utils.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/skills/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock/whats_new.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock-acp.spec +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/drydock_terms.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/flake.lock +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/flake.nix +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/scripts/README.md +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/scripts/backup.sh +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/scripts/bump_version.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/scripts/install.sh +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/scripts/prepare_release.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/scripts/test_full.sh +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/scripts/test_smoke.sh +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/conftest.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_acp.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_bash.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_content.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_utils.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/backend/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/backend/test_backend.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/test_commands.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/conftest.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/core/test_agents.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/core/test_slug.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/core/test_utils.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/e2e/common.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/e2e/conftest.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/mock/__init__.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/mock/utils.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/skills/conftest.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/skills/test_manager.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/skills/test_models.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/skills/test_parser.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/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.6 → drydock_cli-1.3.8}/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.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_agent_backend.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_agent_stats.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_agents.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_current_bugs.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_full_regression.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_history_manager.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_integration.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_loop_detection.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_message_id.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_message_merging.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_middleware.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_multi_agent.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_real_failures.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_real_issues.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_smoke.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_system_prompt.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_tagged_text.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/test_user_issues.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/tools/test_bash.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/tools/test_grep.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/tools/test_task.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-1.3.6 → drydock_cli-1.3.8}/uv.lock +0 -0
|
@@ -935,22 +935,16 @@ class AgentLoop:
|
|
|
935
935
|
f"{tool_call.tool_name}:{args_str}".encode()
|
|
936
936
|
).hexdigest()
|
|
937
937
|
|
|
938
|
-
# Determine threshold based on tool type
|
|
939
|
-
if tool_call.tool_name in ("grep", "read_file", "glob", "tool_search", "lsp"):
|
|
940
|
-
threshold = 4 # Read-only tools get more room
|
|
941
|
-
elif tool_call.tool_name == "bash":
|
|
942
|
-
# Check if it's a read-only bash command
|
|
943
|
-
cmd = args_str.lower()
|
|
944
|
-
read_only = any(k in cmd for k in ["ls ", "pwd", "cat ", "head ", "tail ",
|
|
945
|
-
"git status", "git log", "git diff", "echo ", "which ", "whoami"])
|
|
946
|
-
threshold = 4 if read_only else 3
|
|
947
|
-
elif tool_call.tool_name in ("search_replace", "write_file"):
|
|
948
|
-
threshold = 2 # Write tools — strict
|
|
949
|
-
else:
|
|
950
|
-
threshold = 3
|
|
951
|
-
|
|
952
938
|
count, last_result = self._tool_call_history.get(sig, (0, ""))
|
|
953
|
-
if
|
|
939
|
+
is_failed = last_result.startswith("FAILED:") if last_result else False
|
|
940
|
+
|
|
941
|
+
# ONLY block commands that FAILED — successful commands are allowed to repeat.
|
|
942
|
+
# The model legitimately runs ls, git status, etc. multiple times during work.
|
|
943
|
+
# Loop detection (_check_tool_call_repetition) handles pattern-based loops.
|
|
944
|
+
if not (is_failed and count >= 2):
|
|
945
|
+
return None
|
|
946
|
+
|
|
947
|
+
if count >= 2:
|
|
954
948
|
attempted = self._get_attempted_summary()
|
|
955
949
|
msg = (
|
|
956
950
|
f"CIRCUIT BREAKER: You already ran `{tool_call.tool_name}` with these "
|
|
@@ -993,7 +987,7 @@ class AgentLoop:
|
|
|
993
987
|
if blocked := self._circuit_breaker_check(tool_call):
|
|
994
988
|
self._consecutive_circuit_breaker_fires += 1
|
|
995
989
|
|
|
996
|
-
if self._consecutive_circuit_breaker_fires >=
|
|
990
|
+
if self._consecutive_circuit_breaker_fires >= 5:
|
|
997
991
|
# Model is ignoring the circuit breaker — force stop
|
|
998
992
|
force_msg = (
|
|
999
993
|
f"FORCED STOP: You ignored the circuit breaker {self._consecutive_circuit_breaker_fires} times. "
|
|
@@ -1190,7 +1184,7 @@ class AgentLoop:
|
|
|
1190
1184
|
yield event
|
|
1191
1185
|
for tool_call in resolved.tool_calls:
|
|
1192
1186
|
# Stop processing more tool calls if circuit breaker force-stopped
|
|
1193
|
-
if self._consecutive_circuit_breaker_fires >=
|
|
1187
|
+
if self._consecutive_circuit_breaker_fires >= 5:
|
|
1194
1188
|
break
|
|
1195
1189
|
|
|
1196
1190
|
yield ToolCallEvent(
|
|
@@ -209,11 +209,13 @@ Bug Fixing in Open-Source Repos
|
|
|
209
209
|
NEVER edit test files. The bug is in the library source code, not the tests.
|
|
210
210
|
|
|
211
211
|
CRITICAL — Tool Usage:
|
|
212
|
+
- To CREATE files: use write_file. NEVER use bash with touch/echo>/cat<<EOF.
|
|
212
213
|
- To EDIT files: use search_replace. NEVER use bash with sed/awk/echo to edit files.
|
|
213
214
|
- To READ files: use read_file. NEVER use bash with cat/head/tail.
|
|
214
215
|
- To SEARCH code: use grep. NEVER use bash with grep/find/rg.
|
|
215
|
-
-
|
|
216
|
-
-
|
|
216
|
+
- To CREATE directories: bash mkdir -p is fine.
|
|
217
|
+
- bash is ONLY for: running tests, git commands, installing packages, mkdir, running scripts.
|
|
218
|
+
- If you have not called write_file or search_replace, you have not created or fixed anything.
|
|
217
219
|
|
|
218
220
|
Error Handling:
|
|
219
221
|
- If a command FAILS, do NOT repeat it. Read the error message and adapt.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"""Real workflow tests — the EXACT scenarios users hit.
|
|
2
|
+
|
|
3
|
+
These run against the real vLLM backend with realistic prompts.
|
|
4
|
+
If these pass, DryDock is usable for normal work.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import asyncio
|
|
10
|
+
import os
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
import httpx
|
|
14
|
+
import pytest
|
|
15
|
+
|
|
16
|
+
from drydock.core.config.harness_files import init_harness_files_manager
|
|
17
|
+
try:
|
|
18
|
+
init_harness_files_manager("user", "project")
|
|
19
|
+
except RuntimeError:
|
|
20
|
+
pass
|
|
21
|
+
|
|
22
|
+
from drydock.core.agent_loop import AgentLoop
|
|
23
|
+
from drydock.core.agents.models import BuiltinAgentName
|
|
24
|
+
from drydock.core.config import Backend, ModelConfig, ProviderConfig, VibeConfig
|
|
25
|
+
from drydock.core.types import AssistantEvent, ToolCallEvent, ToolResultEvent
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _vllm_ok():
|
|
29
|
+
try:
|
|
30
|
+
return httpx.get("http://localhost:8000/v1/models", timeout=3).status_code == 200
|
|
31
|
+
except Exception:
|
|
32
|
+
return False
|
|
33
|
+
|
|
34
|
+
pytestmark = pytest.mark.skipif(not _vllm_ok(), reason="vLLM not running")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _agent(tmp_path, max_turns=20):
|
|
38
|
+
config = VibeConfig(
|
|
39
|
+
active_model="devstral", auto_approve=True, enable_telemetry=False,
|
|
40
|
+
include_project_context=False, system_prompt_id="cli",
|
|
41
|
+
providers=[ProviderConfig(name="local", api_base="http://localhost:8000/v1", api_key_env_var="", backend=Backend.GENERIC)],
|
|
42
|
+
models=[ModelConfig(name="devstral", provider="local", input_price=0, output_price=0)],
|
|
43
|
+
session_logging={"enabled": False, "save_dir": str(tmp_path / "logs")},
|
|
44
|
+
)
|
|
45
|
+
os.chdir(tmp_path)
|
|
46
|
+
return AgentLoop(config=config, agent_name=BuiltinAgentName.AUTO_APPROVE, max_turns=max_turns)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
async def _run(agent, prompt, max_events=150):
|
|
50
|
+
events = []
|
|
51
|
+
async for ev in agent.act(prompt):
|
|
52
|
+
events.append(ev)
|
|
53
|
+
if len(events) >= max_events:
|
|
54
|
+
break
|
|
55
|
+
return events
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@pytest.mark.asyncio
|
|
59
|
+
async def test_build_project_from_prd(tmp_path):
|
|
60
|
+
"""THE user's exact scenario: read PRD, build project.
|
|
61
|
+
|
|
62
|
+
Must NOT trigger circuit breaker or crash.
|
|
63
|
+
Must create at least some files.
|
|
64
|
+
"""
|
|
65
|
+
(tmp_path / "PRD.md").write_text(
|
|
66
|
+
"# CLI Tool\\n\\nBuild a Python CLI tool.\\n"
|
|
67
|
+
"## Features\\n- Parse input files\\n- Show statistics\\n"
|
|
68
|
+
"## Structure\\n- myapp/ package\\n- parser.py, cli.py\\n"
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
agent = _agent(tmp_path)
|
|
72
|
+
events = await _run(agent, "review the PRD and get started")
|
|
73
|
+
|
|
74
|
+
errors = [e for e in events if isinstance(e, ToolResultEvent) and e.error]
|
|
75
|
+
cb_errors = [e for e in errors if "CIRCUIT BREAKER" in str(e.error)]
|
|
76
|
+
force_stops = [e for e in events if isinstance(e, AssistantEvent) and e.stopped_by_middleware
|
|
77
|
+
and "FORCED STOP" in (e.content or "")]
|
|
78
|
+
ordering = [e for e in errors if "Unexpected role" in str(e.error)]
|
|
79
|
+
|
|
80
|
+
assert not force_stops, f"Session force-stopped during normal project setup"
|
|
81
|
+
assert not ordering, f"Message ordering crash: {ordering[0].error[:100]}"
|
|
82
|
+
assert len(cb_errors) <= 2, f"Circuit breaker fired {len(cb_errors)} times during normal work"
|
|
83
|
+
|
|
84
|
+
# Should have created some files
|
|
85
|
+
created = list(tmp_path.rglob("*.py"))
|
|
86
|
+
assert len(created) > 0, "No Python files created"
|
|
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.6 → drydock_cli-1.3.8}/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.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/notifications/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-1.3.6 → drydock_cli-1.3.8}/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.6 → drydock_cli-1.3.8}/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.6 → drydock_cli-1.3.8}/drydock/cli/textual_ui/widgets/chat_input/container.py
RENAMED
|
File without changes
|
{drydock_cli-1.3.6 → drydock_cli-1.3.8}/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.6 → drydock_cli-1.3.8}/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.6 → drydock_cli-1.3.8}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py
RENAMED
|
File without changes
|
{drydock_cli-1.3.6 → drydock_cli-1.3.8}/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.6 → drydock_cli-1.3.8}/drydock/core/autocompletion/file_indexer/__init__.py
RENAMED
|
File without changes
|
{drydock_cli-1.3.6 → drydock_cli-1.3.8}/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.3.6 → drydock_cli-1.3.8}/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
|