drydock-cli 1.7.1__tar.gz → 1.7.3__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.7.1 → drydock_cli-1.7.3}/PKG-INFO +1 -1
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/agent_loop.py +1 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/build_orchestrator.py +130 -129
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/pyproject.toml +1 -1
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/.github/CODEOWNERS +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/.github/workflows/ci.yml +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/.github/workflows/release.yml +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/.gitignore +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/.pre-commit-config.yaml +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/.python-version +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/.typos.toml +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/.vscode/extensions.json +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/.vscode/launch.json +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/.vscode/settings.json +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/AGENTS.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/CHANGELOG.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/CLAUDE.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/CONTRIBUTING.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/Drydock_rebrand.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/LICENSE +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/NOTICE +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/PRD.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/README.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/action.yml +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/distribution/zed/LICENSE +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/distribution/zed/extension.toml +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/docs/README.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/docs/acp-setup.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/docs/proxy-setup.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/acp/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/acp/utils.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/cli.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/commands.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/agents/models.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/auth/github.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/consultant.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/hooks.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/llm/format.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/llm/types.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/logger.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/middleware.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/paths/_vibe_home.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/plan_session.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/plugins.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/programmatic.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/skills/models.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/slug.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/base.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/task_manager.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/types.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/core/utils.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/skills/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock/whats_new.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock-acp.spec +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/drydock_terms.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/flake.lock +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/flake.nix +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/scripts/README.md +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/scripts/backup.sh +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/scripts/bump_version.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/scripts/install.sh +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/scripts/prepare_release.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/scripts/test_bank.sh +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/scripts/test_full.sh +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/scripts/test_smoke.sh +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/conftest.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_acp.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_bash.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_content.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_utils.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/backend/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/backend/test_backend.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/test_commands.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/conftest.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/core/test_agents.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/core/test_slug.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/core/test_utils.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/e2e/common.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/e2e/conftest.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/mock/__init__.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/mock/utils.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/skills/conftest.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/skills/test_manager.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/skills/test_models.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/skills/test_parser.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/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.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_agent_backend.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_agent_stats.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_agents.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_bank_build.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_bank_debug.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_bank_prd.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_bank_tools.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_bank_update.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_build_projects.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_current_bugs.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_full_regression.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_history_manager.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_integration.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_loop_detection.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_message_id.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_message_merging.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_middleware.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_multi_agent.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_real_failures.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_real_issues.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_real_workflow.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_smoke.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_system_prompt.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_tagged_text.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_user_issues.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/test_workloads.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/testbank_helpers.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/tools/test_bash.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/tools/test_grep.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/tools/test_task.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-1.7.1 → drydock_cli-1.7.3}/uv.lock +0 -0
|
@@ -493,6 +493,7 @@ class AgentLoop:
|
|
|
493
493
|
user_prompt=build_prompt,
|
|
494
494
|
config=self.config,
|
|
495
495
|
base_dir=Path.cwd(),
|
|
496
|
+
backend=self.backend,
|
|
496
497
|
)
|
|
497
498
|
# Yield the summary directly to the user — don't let the model
|
|
498
499
|
# respond, because it will ignore the instructions and rebuild files.
|
|
@@ -23,6 +23,8 @@ from pathlib import Path
|
|
|
23
23
|
from typing import TYPE_CHECKING, Any
|
|
24
24
|
|
|
25
25
|
from drydock.core.config import ProviderConfig, VibeConfig
|
|
26
|
+
from drydock.core.llm.types import BackendLike
|
|
27
|
+
from drydock.core.types import LLMMessage, MessageList, Role
|
|
26
28
|
|
|
27
29
|
|
|
28
30
|
def _get_active_provider(config: VibeConfig) -> ProviderConfig | None:
|
|
@@ -142,98 +144,88 @@ def extract_plan(response_text: str) -> BuildPlan:
|
|
|
142
144
|
)
|
|
143
145
|
|
|
144
146
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
config: VibeConfig,
|
|
148
|
-
) -> BuildPlan:
|
|
149
|
-
"""Phase 1: Direct API call to create a build plan. No AgentLoop needed."""
|
|
150
|
-
import httpx
|
|
151
|
-
|
|
152
|
-
plan_prompt = PLAN_PROMPT.format(user_prompt=user_prompt)
|
|
153
|
-
|
|
154
|
-
provider = _get_active_provider(config)
|
|
155
|
-
if not provider:
|
|
156
|
-
raise RuntimeError("No provider configured for active model")
|
|
157
|
-
|
|
158
|
-
messages = [
|
|
159
|
-
{"role": "system", "content": "You are a project planner. Output ONLY a JSON build plan."},
|
|
160
|
-
{"role": "user", "content": plan_prompt},
|
|
161
|
-
]
|
|
147
|
+
def make_plan_from_prd(user_prompt: str) -> BuildPlan:
|
|
148
|
+
"""Extract a build plan from the PRD text. No LLM needed.
|
|
162
149
|
|
|
163
|
-
|
|
164
|
-
if
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
150
|
+
Parses the PRD looking for package name, module names, and structure.
|
|
151
|
+
Falls back to a sensible default if parsing fails.
|
|
152
|
+
"""
|
|
153
|
+
import re
|
|
154
|
+
text = user_prompt.lower()
|
|
155
|
+
|
|
156
|
+
# Try to extract package name from headings or structure sections
|
|
157
|
+
pkg_name = "project"
|
|
158
|
+
# Look for directory structure like /log_analyzer or /my_package
|
|
159
|
+
dir_match = re.search(r'/(\w+)\s*\n\s*[├└]', user_prompt)
|
|
160
|
+
if dir_match:
|
|
161
|
+
pkg_name = dir_match.group(1)
|
|
162
|
+
else:
|
|
163
|
+
# Look for package-like names in the text
|
|
164
|
+
for pattern in [
|
|
165
|
+
r'package[:\s]+[`"]?(\w+)[`"]?',
|
|
166
|
+
r'/(\w+)\s*\n\s*(?:├|└)',
|
|
167
|
+
r'`(\w+)/\w+\.py`',
|
|
168
|
+
r'(\w+)/\w+\.py',
|
|
169
|
+
]:
|
|
170
|
+
m = re.search(pattern, user_prompt)
|
|
171
|
+
if m and m.group(1) not in ("python", "usr", "bin", "home", "data", "tmp"):
|
|
172
|
+
pkg_name = m.group(1)
|
|
173
|
+
break
|
|
174
|
+
|
|
175
|
+
# Look for .py files mentioned in the PRD
|
|
176
|
+
py_files = re.findall(r'(\w+)\.py', user_prompt)
|
|
177
|
+
py_files = [f for f in py_files if f not in ("__init__", "__main__", "test", "setup", "conftest")]
|
|
178
|
+
py_files = list(dict.fromkeys(py_files)) # deduplicate preserving order
|
|
179
|
+
|
|
180
|
+
if not py_files:
|
|
181
|
+
# Default module set based on keywords
|
|
182
|
+
py_files = []
|
|
183
|
+
if any(kw in text for kw in ("parse", "parser", "ingest")):
|
|
184
|
+
py_files.append("parser")
|
|
185
|
+
if any(kw in text for kw in ("pattern", "group", "detect")):
|
|
186
|
+
py_files.append("patterns")
|
|
187
|
+
if any(kw in text for kw in ("anomal", "spike", "unusual")):
|
|
188
|
+
py_files.append("anomaly")
|
|
189
|
+
if any(kw in text for kw in ("root cause", "suggest", "diagnos")):
|
|
190
|
+
py_files.append("root_cause")
|
|
191
|
+
if any(kw in text for kw in ("cli", "command", "argparse")):
|
|
192
|
+
py_files.append("cli")
|
|
193
|
+
if not py_files:
|
|
194
|
+
py_files = ["core", "cli"]
|
|
195
|
+
py_files.append("utils")
|
|
196
|
+
|
|
197
|
+
# Ensure cli is last (it imports from everything else)
|
|
198
|
+
if "cli" in py_files:
|
|
199
|
+
py_files.remove("cli")
|
|
200
|
+
py_files.append("cli")
|
|
201
|
+
|
|
202
|
+
# Build file specs — cli imports from all others, others are independent
|
|
203
|
+
files = []
|
|
204
|
+
non_cli = [f for f in py_files if f != "cli"]
|
|
205
|
+
for f in py_files:
|
|
206
|
+
imports = []
|
|
207
|
+
if f == "cli":
|
|
208
|
+
imports = [f"{pkg_name}.{m}" for m in non_cli]
|
|
209
|
+
# Extract purpose from PRD context around the module name
|
|
210
|
+
purpose = f"Implementation for {f} module"
|
|
211
|
+
for line in user_prompt.split("\n"):
|
|
212
|
+
if f in line.lower() and len(line) > 10:
|
|
213
|
+
purpose = line.strip()[:100]
|
|
214
|
+
break
|
|
215
|
+
files.append(FileSpec(f"{pkg_name}/{f}.py", purpose, imports))
|
|
216
|
+
|
|
217
|
+
# Extract description
|
|
218
|
+
desc = "Python project"
|
|
219
|
+
first_para = user_prompt.split("\n\n")[0] if "\n\n" in user_prompt else user_prompt[:100]
|
|
220
|
+
for line in first_para.split("\n"):
|
|
221
|
+
if len(line.strip()) > 20 and not line.startswith("#"):
|
|
222
|
+
desc = line.strip()[:100]
|
|
223
|
+
break
|
|
185
224
|
|
|
186
|
-
|
|
187
|
-
return extract_plan(full_response)
|
|
188
|
-
except ValueError:
|
|
189
|
-
# Retry with simpler prompt
|
|
190
|
-
logger.warning("First planner attempt failed, retrying with simpler prompt...")
|
|
191
|
-
simple_messages = [
|
|
192
|
-
{"role": "system", "content": "Output ONLY valid JSON. No text before or after."},
|
|
193
|
-
{"role": "user", "content": (
|
|
194
|
-
"Create a JSON build plan for a Python package. "
|
|
195
|
-
"The package should be called 'log_analyzer' with these files:\n"
|
|
196
|
-
'{"package_name":"log_analyzer","description":"Log analyzer tool",'
|
|
197
|
-
'"entry_point":"cli","files":['
|
|
198
|
-
'{"path":"log_analyzer/parser.py","purpose":"Parse log lines into structured events","imports":[]},'
|
|
199
|
-
'{"path":"log_analyzer/patterns.py","purpose":"Group similar messages, detect frequency spikes","imports":["log_analyzer.parser"]},'
|
|
200
|
-
'{"path":"log_analyzer/anomaly.py","purpose":"Detect anomalies using heuristics","imports":["log_analyzer.parser"]},'
|
|
201
|
-
'{"path":"log_analyzer/root_cause.py","purpose":"Generate root cause suggestions","imports":["log_analyzer.parser","log_analyzer.patterns"]},'
|
|
202
|
-
'{"path":"log_analyzer/cli.py","purpose":"CLI with argparse: analyze command, --format, --level, --summary-only","imports":["log_analyzer.parser","log_analyzer.patterns","log_analyzer.anomaly","log_analyzer.root_cause"]},'
|
|
203
|
-
'{"path":"log_analyzer/utils.py","purpose":"Utility functions for formatting output","imports":[]}]}\n\n'
|
|
204
|
-
"Adapt this plan based on the project description below. "
|
|
205
|
-
"Output ONLY the JSON, no other text.\n\n"
|
|
206
|
-
f"{user_prompt[:3000]}"
|
|
207
|
-
)},
|
|
208
|
-
]
|
|
209
|
-
async with httpx.AsyncClient(timeout=300) as client:
|
|
210
|
-
resp2 = await client.post(
|
|
211
|
-
f"{provider.api_base}/chat/completions",
|
|
212
|
-
json={"model": config.active_model, "messages": simple_messages,
|
|
213
|
-
"max_tokens": 2048, "temperature": 0.1},
|
|
214
|
-
)
|
|
215
|
-
resp2.raise_for_status()
|
|
216
|
-
full_response2 = resp2.json()["choices"][0]["message"]["content"]
|
|
217
|
-
logger.info("Retry planner response: %d chars", len(full_response2))
|
|
225
|
+
entry = "cli" if "cli" in py_files else py_files[-1]
|
|
218
226
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
except ValueError:
|
|
222
|
-
# Last resort: use the hardcoded default plan
|
|
223
|
-
logger.warning("Planner retry failed, using default log_analyzer plan")
|
|
224
|
-
return BuildPlan(
|
|
225
|
-
package_name="log_analyzer",
|
|
226
|
-
description="Log analyzer tool",
|
|
227
|
-
entry_point="cli",
|
|
228
|
-
files=[
|
|
229
|
-
FileSpec("log_analyzer/parser.py", "Parse log lines into structured events", []),
|
|
230
|
-
FileSpec("log_analyzer/patterns.py", "Group similar messages, detect spikes", ["log_analyzer.parser"]),
|
|
231
|
-
FileSpec("log_analyzer/anomaly.py", "Detect anomalies using heuristics", ["log_analyzer.parser"]),
|
|
232
|
-
FileSpec("log_analyzer/root_cause.py", "Generate root cause suggestions", ["log_analyzer.parser"]),
|
|
233
|
-
FileSpec("log_analyzer/cli.py", "CLI with argparse: analyze, --format, --level flags", ["log_analyzer.parser", "log_analyzer.patterns", "log_analyzer.anomaly", "log_analyzer.root_cause"]),
|
|
234
|
-
FileSpec("log_analyzer/utils.py", "Utility functions for formatting", []),
|
|
235
|
-
],
|
|
236
|
-
)
|
|
227
|
+
logger.info("Plan from PRD: package=%s, files=%d, entry=%s", pkg_name, len(files), entry)
|
|
228
|
+
return BuildPlan(package_name=pkg_name, description=desc, entry_point=entry, files=files)
|
|
237
229
|
|
|
238
230
|
|
|
239
231
|
# ============================================================================
|
|
@@ -324,8 +316,9 @@ async def implement_file(
|
|
|
324
316
|
plan: BuildPlan,
|
|
325
317
|
config: VibeConfig,
|
|
326
318
|
base_dir: Path,
|
|
319
|
+
backend: BackendLike | None = None,
|
|
327
320
|
) -> bool:
|
|
328
|
-
"""Ask the LLM to generate code for one file
|
|
321
|
+
"""Ask the LLM to generate code for one file."""
|
|
329
322
|
module_lines = []
|
|
330
323
|
for f in plan.files:
|
|
331
324
|
marker = " <-- THIS FILE" if f.path == file_spec.path else ""
|
|
@@ -358,42 +351,52 @@ async def implement_file(
|
|
|
358
351
|
existing_apis=existing_apis,
|
|
359
352
|
)
|
|
360
353
|
|
|
361
|
-
# Direct API call — no AgentLoop overhead
|
|
362
354
|
try:
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
355
|
+
system_msg = (
|
|
356
|
+
"You are a code implementation agent. Write a CONCISE Python file. "
|
|
357
|
+
"Output ONLY Python code. No markdown fences. No explanation. "
|
|
358
|
+
"FIRST LINE MUST BE: from __future__ import annotations\n"
|
|
359
|
+
"Keep it under 150 lines. Use absolute imports (from pkg.module import X). "
|
|
360
|
+
"Do NOT use relative imports. Do NOT import classes just for type hints — "
|
|
361
|
+
"use string literals instead: def foo(x: 'ClassName'). "
|
|
362
|
+
"Import EXACT names from the EXISTING APIs listed."
|
|
363
|
+
)
|
|
369
364
|
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
async with httpx.AsyncClient(timeout=300) as client:
|
|
384
|
-
resp = await client.post(
|
|
385
|
-
f"{provider.api_base}/chat/completions",
|
|
386
|
-
json={
|
|
387
|
-
"model": config.active_model,
|
|
388
|
-
"messages": messages,
|
|
389
|
-
"max_tokens": 2048,
|
|
390
|
-
"temperature": 0.2,
|
|
391
|
-
},
|
|
365
|
+
msgs = MessageList()
|
|
366
|
+
msgs.append(LLMMessage(role=Role.system, content=system_msg))
|
|
367
|
+
msgs.append(LLMMessage(role=Role.user, content=prompt))
|
|
368
|
+
|
|
369
|
+
if backend:
|
|
370
|
+
# Use the same backend as the main agent loop
|
|
371
|
+
active_model = config.get_active_model()
|
|
372
|
+
result = await backend.complete(
|
|
373
|
+
model=active_model,
|
|
374
|
+
messages=msgs,
|
|
375
|
+
temperature=0.2,
|
|
376
|
+
max_tokens=2048,
|
|
392
377
|
)
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
378
|
+
content = result.message.content or ""
|
|
379
|
+
else:
|
|
380
|
+
# Fallback: direct httpx call
|
|
381
|
+
import httpx
|
|
382
|
+
provider = _get_active_provider(config)
|
|
383
|
+
if not provider:
|
|
384
|
+
return False
|
|
385
|
+
async with httpx.AsyncClient(timeout=300) as client:
|
|
386
|
+
resp = await client.post(
|
|
387
|
+
f"{provider.api_base}/chat/completions",
|
|
388
|
+
json={
|
|
389
|
+
"model": config.active_model,
|
|
390
|
+
"messages": [
|
|
391
|
+
{"role": "system", "content": system_msg},
|
|
392
|
+
{"role": "user", "content": prompt},
|
|
393
|
+
],
|
|
394
|
+
"max_tokens": 2048,
|
|
395
|
+
"temperature": 0.2,
|
|
396
|
+
},
|
|
397
|
+
)
|
|
398
|
+
resp.raise_for_status()
|
|
399
|
+
content = resp.json()["choices"][0]["message"]["content"]
|
|
397
400
|
|
|
398
401
|
# Strip markdown fences if present
|
|
399
402
|
if "```python" in content:
|
|
@@ -442,6 +445,7 @@ async def run_build_pipeline(
|
|
|
442
445
|
user_prompt: str,
|
|
443
446
|
config: VibeConfig,
|
|
444
447
|
base_dir: Path | None = None,
|
|
448
|
+
backend: BackendLike | None = None,
|
|
445
449
|
) -> str:
|
|
446
450
|
"""Run the full multi-phase build pipeline.
|
|
447
451
|
|
|
@@ -450,12 +454,9 @@ async def run_build_pipeline(
|
|
|
450
454
|
if base_dir is None:
|
|
451
455
|
base_dir = Path.cwd()
|
|
452
456
|
|
|
453
|
-
# Phase 1: Plan
|
|
457
|
+
# Phase 1: Plan (deterministic — no LLM needed)
|
|
454
458
|
logger.info("BUILD PHASE 1: Planning...")
|
|
455
|
-
|
|
456
|
-
plan = await run_planner(user_prompt, config)
|
|
457
|
-
except (ValueError, json.JSONDecodeError, KeyError) as e:
|
|
458
|
-
raise RuntimeError(f"Planning failed: {e}") from e
|
|
459
|
+
plan = make_plan_from_prd(user_prompt)
|
|
459
460
|
|
|
460
461
|
logger.info("Plan: package=%s, files=%d, entry=%s",
|
|
461
462
|
plan.package_name, len(plan.files), plan.entry_point)
|
|
@@ -474,7 +475,7 @@ async def run_build_pipeline(
|
|
|
474
475
|
success = False
|
|
475
476
|
for attempt in range(2):
|
|
476
477
|
try:
|
|
477
|
-
success = await implement_file(file_spec, plan, config, base_dir)
|
|
478
|
+
success = await implement_file(file_spec, plan, config, base_dir, backend)
|
|
478
479
|
if success:
|
|
479
480
|
_fix_imports(base_dir / file_spec.path, plan.package_name)
|
|
480
481
|
break
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.7.1 → drydock_cli-1.7.3}/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.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/notifications/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{drydock_cli-1.7.1 → drydock_cli-1.7.3}/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.7.1 → drydock_cli-1.7.3}/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.7.1 → drydock_cli-1.7.3}/drydock/cli/textual_ui/widgets/chat_input/container.py
RENAMED
|
File without changes
|
{drydock_cli-1.7.1 → drydock_cli-1.7.3}/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.7.1 → drydock_cli-1.7.3}/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.7.1 → drydock_cli-1.7.3}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py
RENAMED
|
File without changes
|