drydock-cli 2.0.1__tar.gz → 2.1.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-2.0.1 → drydock_cli-2.1.0}/PKG-INFO +1 -1
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/PRD.md +26 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/agent_loop.py +23 -109
- drydock_cli-2.1.0/drydock/core/paths/conventions.py +3 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/system_prompt.py +12 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/pyproject.toml +1 -1
- drydock_cli-2.0.1/drydock/core/paths/conventions.py +0 -3
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/.gitignore +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/.python-version +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/.typos.toml +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/.vscode/extensions.json +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/.vscode/launch.json +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/.vscode/settings.json +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/AGENTS.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/CHANGELOG.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/CLAUDE.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/LICENSE +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/NOTICE +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/README.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/action.yml +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/docs/README.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/docs/acp-setup.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/logger.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/paths/_vibe_home.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/slug.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/task_manager.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/types.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/utils.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/whats_new.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock-acp.spec +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock_terms.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/flake.lock +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/flake.nix +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/scripts/README.md +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/scripts/backup.sh +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/scripts/bump_version.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/scripts/install.sh +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/scripts/notify_release.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/scripts/test_full.sh +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/conftest.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/e2e/common.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/mock/utils.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.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-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_agents.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_integration.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_message_id.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_middleware.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_smoke.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/test_workloads.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.0.1 → drydock_cli-2.1.0}/uv.lock +0 -0
|
@@ -390,6 +390,32 @@ For complex build tasks, the orchestrator makes direct API calls instead of goin
|
|
|
390
390
|
| Circuit breaker blocks valid retries | Only block FAILED commands (3+ identical failures) |
|
|
391
391
|
| Separate httpx calls get 404 from vLLM | Use `self.backend.complete()` (same connection) |
|
|
392
392
|
|
|
393
|
+
### Upstream Alignment (Mistral Vibe docs)
|
|
394
|
+
|
|
395
|
+
DryDock is a fork of mistralai/mistral-vibe. The upstream docs at docs.mistral.ai/mistral-vibe/ define:
|
|
396
|
+
|
|
397
|
+
| Feature | Upstream | DryDock Status |
|
|
398
|
+
|---|---|---|
|
|
399
|
+
| Agent `.toml` profiles | `~/.vibe/agents/` | `~/.drydock/agents/` |
|
|
400
|
+
| Skills with `SKILL.md` | `~/.vibe/skills/` + project + config | Same (7 bundled + user) |
|
|
401
|
+
| `task` tool → subagents | explore, diagnostic, planner | Same (v2.0.0 fixed delegation) |
|
|
402
|
+
| `AGENTS.md` / `VIBE.md` | Project-root instructions loaded into context | Now loads AGENTS.md, DRYDOCK.md, .drydock.md |
|
|
403
|
+
| `DRYDOCK.md` | (our addition) | Per-project instructions |
|
|
404
|
+
| `.drydock/rules/*.md` | (our addition) | Modular project rules |
|
|
405
|
+
| Skill enable/disable | Glob + regex patterns | Same |
|
|
406
|
+
| Agent handoffs | Cloud-only (agent-to-agent) | Not applicable (local) |
|
|
407
|
+
| Cloud Agents API | `client.beta.agents` | Not used (local-first) |
|
|
408
|
+
|
|
409
|
+
**Per-Project Instructions (loaded into system prompt):**
|
|
410
|
+
- `AGENTS.md` — upstream standard, works in workspace root
|
|
411
|
+
- `DRYDOCK.md` — our addition, same purpose
|
|
412
|
+
- `.drydock/rules/*.md` — modular rules, all loaded
|
|
413
|
+
|
|
414
|
+
**What we DON'T use from upstream:**
|
|
415
|
+
- Mistral Cloud Agents API (requires mistral-medium/large, cloud-only)
|
|
416
|
+
- Agent handoffs (cloud orchestration)
|
|
417
|
+
- Teleport to Vibe Nuage (cloud feature)
|
|
418
|
+
|
|
393
419
|
---
|
|
394
420
|
|
|
395
421
|
## Key Decisions
|
|
@@ -474,104 +474,10 @@ class AgentLoop:
|
|
|
474
474
|
|
|
475
475
|
yield UserMessageEvent(content=user_msg, message_id=user_message.message_id)
|
|
476
476
|
|
|
477
|
-
# ===
|
|
478
|
-
#
|
|
479
|
-
#
|
|
480
|
-
|
|
481
|
-
try:
|
|
482
|
-
from drydock.core.build_orchestrator import run_build_pipeline
|
|
483
|
-
# Include PRD content if it exists — the user prompt is usually
|
|
484
|
-
# just "review the PRD and get started", not the PRD itself
|
|
485
|
-
build_prompt = user_msg
|
|
486
|
-
for prd_name in ("PRD.md", "prd.md", "PRD.txt"):
|
|
487
|
-
prd_path = Path.cwd() / prd_name
|
|
488
|
-
if prd_path.exists():
|
|
489
|
-
prd_content = prd_path.read_text()[:8000]
|
|
490
|
-
build_prompt = f"{user_msg}\n\nPRD CONTENT:\n{prd_content}"
|
|
491
|
-
break
|
|
492
|
-
from drydock.core.build_orchestrator import (
|
|
493
|
-
make_plan_from_prd, scaffold_package, implement_file,
|
|
494
|
-
_fix_cross_file_imports, _fix_circular_imports,
|
|
495
|
-
_extract_public_api,
|
|
496
|
-
)
|
|
497
|
-
|
|
498
|
-
# Phase 1: Plan
|
|
499
|
-
yield AssistantEvent(content="Planning project structure...")
|
|
500
|
-
plan = make_plan_from_prd(build_prompt)
|
|
501
|
-
file_list = ", ".join(f.path.split("/")[-1] for f in plan.files)
|
|
502
|
-
yield AssistantEvent(
|
|
503
|
-
content=f"Package: `{plan.package_name}` with {len(plan.files)} files: {file_list}"
|
|
504
|
-
)
|
|
505
|
-
|
|
506
|
-
# Phase 2: Scaffold
|
|
507
|
-
yield AssistantEvent(content="Creating package structure...")
|
|
508
|
-
scaffold_package(plan, Path.cwd())
|
|
509
|
-
|
|
510
|
-
# Phase 3: Implement each file
|
|
511
|
-
for i, file_spec in enumerate(plan.files):
|
|
512
|
-
yield AssistantEvent(
|
|
513
|
-
content=f"Writing {file_spec.path} ({i+1}/{len(plan.files)})..."
|
|
514
|
-
)
|
|
515
|
-
for attempt in range(3):
|
|
516
|
-
success = await implement_file(
|
|
517
|
-
file_spec, plan, self.config, Path.cwd(), self.backend
|
|
518
|
-
)
|
|
519
|
-
if success:
|
|
520
|
-
from drydock.core.build_orchestrator import _fix_imports
|
|
521
|
-
_fix_imports(Path.cwd() / file_spec.path, plan.package_name)
|
|
522
|
-
break
|
|
523
|
-
|
|
524
|
-
# Phase 3.5: Fix imports
|
|
525
|
-
yield AssistantEvent(content="Fixing cross-file imports...")
|
|
526
|
-
_fix_cross_file_imports(plan, Path.cwd())
|
|
527
|
-
_fix_circular_imports(plan, Path.cwd())
|
|
528
|
-
|
|
529
|
-
# Build summary
|
|
530
|
-
succeeded = sum(
|
|
531
|
-
1 for f in plan.files
|
|
532
|
-
if (Path.cwd() / f.path).exists()
|
|
533
|
-
and (Path.cwd() / f.path).stat().st_size > 100
|
|
534
|
-
)
|
|
535
|
-
summary = (
|
|
536
|
-
f"Project `{plan.package_name}` built: {succeeded}/{len(plan.files)} files.\n"
|
|
537
|
-
f"Test with: `python3 -m {plan.package_name} --help`"
|
|
538
|
-
)
|
|
539
|
-
yield AssistantEvent(content=summary)
|
|
540
|
-
|
|
541
|
-
# Auto-test: run python3 -m package and report result
|
|
542
|
-
import subprocess as _sp
|
|
543
|
-
pkg_name = summary.split("'")[1] if "'" in summary else "project"
|
|
544
|
-
test_result = _sp.run(
|
|
545
|
-
f"python3 -m {pkg_name} --help",
|
|
546
|
-
shell=True, cwd=str(Path.cwd()),
|
|
547
|
-
capture_output=True, text=True, timeout=15,
|
|
548
|
-
)
|
|
549
|
-
if test_result.returncode == 0:
|
|
550
|
-
yield AssistantEvent(
|
|
551
|
-
content=f"\nTest passed: `python3 -m {pkg_name} --help` works.\n\n"
|
|
552
|
-
f"```\n{test_result.stdout[:300]}\n```\n\n"
|
|
553
|
-
f"Create sample data and test further, or ask me to fix any issues."
|
|
554
|
-
)
|
|
555
|
-
else:
|
|
556
|
-
err = (test_result.stderr or test_result.stdout)[:300]
|
|
557
|
-
# Let the model fix this error
|
|
558
|
-
self._inject_system_note(
|
|
559
|
-
f"The project was built but has an error. Fix it:\n\n"
|
|
560
|
-
f"```\n{err}\n```\n\n"
|
|
561
|
-
f"Use read_file and search_replace to fix. Do NOT rewrite entire files."
|
|
562
|
-
)
|
|
563
|
-
|
|
564
|
-
logger.info("Build orchestrator completed successfully")
|
|
565
|
-
except Exception as e:
|
|
566
|
-
import traceback
|
|
567
|
-
logger.warning("Build orchestrator failed (%s), falling back to normal flow", e)
|
|
568
|
-
logger.warning("Traceback: %s", traceback.format_exc())
|
|
569
|
-
auto_context = self._build_auto_context(user_msg)
|
|
570
|
-
if auto_context:
|
|
571
|
-
self._inject_system_note(auto_context)
|
|
572
|
-
else:
|
|
573
|
-
# Smart task routing: auto-explore + skill injection
|
|
574
|
-
await self._auto_route_task(user_msg)
|
|
477
|
+
# === AUTO-CONTEXT ===
|
|
478
|
+
# Auto-explore project files + inject relevant skill for the task type.
|
|
479
|
+
# The model handles everything with subagents (v2.0.0 fixed delegation).
|
|
480
|
+
await self._auto_route_task(user_msg)
|
|
575
481
|
|
|
576
482
|
try:
|
|
577
483
|
should_break_loop = False
|
|
@@ -1863,20 +1769,28 @@ class AgentLoop:
|
|
|
1863
1769
|
self._inject_system_note("\n\n".join(parts))
|
|
1864
1770
|
|
|
1865
1771
|
def _is_build_task(self, user_msg: str) -> bool:
|
|
1866
|
-
"""Detect if a user message is
|
|
1772
|
+
"""Detect if a user message is an explicit build task that needs orchestration.
|
|
1773
|
+
|
|
1774
|
+
Only triggers on clear build intent — NOT on "review" or "look at".
|
|
1775
|
+
"""
|
|
1867
1776
|
msg_lower = user_msg.lower()
|
|
1777
|
+
|
|
1778
|
+
# Explicit build verbs — user clearly wants to create something
|
|
1868
1779
|
has_build_verb = any(kw in msg_lower for kw in (
|
|
1869
|
-
"build", "create a", "implement", "
|
|
1870
|
-
"
|
|
1780
|
+
"build", "create a", "implement", "scaffold",
|
|
1781
|
+
"build the project", "build this project",
|
|
1782
|
+
"build from prd", "build it",
|
|
1783
|
+
"get started building", "start building",
|
|
1871
1784
|
))
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1785
|
+
|
|
1786
|
+
# "review", "look at", "read" are NOT build verbs
|
|
1787
|
+
is_review = any(kw in msg_lower for kw in (
|
|
1788
|
+
"review", "look at", "read", "check", "analyze", "audit",
|
|
1789
|
+
"what does", "explain", "summarize",
|
|
1790
|
+
))
|
|
1791
|
+
if is_review and not has_build_verb:
|
|
1792
|
+
return False
|
|
1793
|
+
|
|
1880
1794
|
has_prd = Path.cwd().joinpath("PRD.md").exists() or Path.cwd().joinpath("prd.md").exists()
|
|
1881
1795
|
return has_build_verb and (has_complexity or has_prd)
|
|
1882
1796
|
|
|
@@ -303,6 +303,18 @@ def _load_project_instructions(max_bytes: int = 16_000) -> str:
|
|
|
303
303
|
"""Load DRYDOCK.md and .drydock/rules/*.md for per-project instructions."""
|
|
304
304
|
parts: list[str] = []
|
|
305
305
|
|
|
306
|
+
# Check for AGENTS.md (per-project agent instructions, like Claude's CLAUDE.md)
|
|
307
|
+
from drydock.core.paths import AGENTS_MD_FILENAMES
|
|
308
|
+
for name in AGENTS_MD_FILENAMES:
|
|
309
|
+
path = Path.cwd() / name
|
|
310
|
+
try:
|
|
311
|
+
if path.is_file():
|
|
312
|
+
content = path.read_text("utf-8", errors="ignore")[:max_bytes]
|
|
313
|
+
parts.append(f"# Project Instructions ({name})\n{content}")
|
|
314
|
+
break
|
|
315
|
+
except (OSError, PermissionError):
|
|
316
|
+
pass
|
|
317
|
+
|
|
306
318
|
# Check for DRYDOCK.md in project root
|
|
307
319
|
for name in ["DRYDOCK.md", "drydock.md", ".drydock/DRYDOCK.md"]:
|
|
308
320
|
path = Path.cwd() / name
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drydock_cli-2.0.1 → drydock_cli-2.1.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-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/notifications/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-2.0.1 → drydock_cli-2.1.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-2.0.1 → drydock_cli-2.1.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-2.0.1 → drydock_cli-2.1.0}/drydock/cli/textual_ui/widgets/chat_input/container.py
RENAMED
|
File without changes
|
{drydock_cli-2.0.1 → drydock_cli-2.1.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-2.0.1 → drydock_cli-2.1.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-2.0.1 → drydock_cli-2.1.0}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py
RENAMED
|
File without changes
|
{drydock_cli-2.0.1 → drydock_cli-2.1.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
|
{drydock_cli-2.0.1 → drydock_cli-2.1.0}/drydock/core/autocompletion/file_indexer/__init__.py
RENAMED
|
File without changes
|
{drydock_cli-2.0.1 → drydock_cli-2.1.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
|
|
File without changes
|
{drydock_cli-2.0.1 → drydock_cli-2.1.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
|