drydock-cli 2.6.144__tar.gz → 2.6.147__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.6.147/.auto_release.lock +1 -0
- drydock_cli-2.6.147/DEPLOYMENT.md +223 -0
- drydock_cli-2.6.147/OVERNIGHT_PROGRESS.md +159 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/PKG-INFO +8 -1
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/README.md +7 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/agent_loop.py +59 -10
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/todo.py +34 -2
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/pyproject.toml +1 -1
- drydock_cli-2.6.147/research/README.md +117 -0
- drydock_cli-2.6.147/research/config_base.toml +209 -0
- drydock_cli-2.6.147/research/domain_spec.md +265 -0
- drydock_cli-2.6.147/research/experimenter.py +303 -0
- drydock_cli-2.6.147/research/kernel.py +400 -0
- drydock_cli-2.6.147/research/mini_prd.md +31 -0
- drydock_cli-2.6.147/research/mini_prompts.txt +37 -0
- drydock_cli-2.6.147/research/proposer.py +373 -0
- drydock_cli-2.6.147/research/results.tsv +1 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/shakedown_interactive.py +35 -1
- drydock_cli-2.6.147/scripts/stress_babysitter.sh +150 -0
- drydock_cli-2.6.147/scripts/stress_prompts_realuser.txt +78 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/stress_shakedown.py +50 -1
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/stress_watcher.py +39 -0
- drydock_cli-2.6.144/.auto_release.lock +0 -1
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/.claude/scheduled_tasks.lock +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/.gitignore +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/.python-version +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/.typos.toml +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/.vscode/extensions.json +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/.vscode/launch.json +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/.vscode/settings.json +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/AGENTS.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/Admiral.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/BASELINE_412.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/CHANGELOG.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/CLAUDE.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/LICENSE +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/MODEL_SHORTCOMINGS.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/NOTICE +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/OVERNIGHT_REPORT_2026_04_13.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/PRD.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/action.yml +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/README.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results1.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results13.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results14.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results15.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results16.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results17.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results18.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results19.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results2.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results20.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results3.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results4.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results5.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results6.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results7.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results8.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results9.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/baseline_history/results_evolved_v1.tsv +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/docs/README.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/docs/acp-setup.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/admiral/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/admiral/detectors.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/admiral/history.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/admiral/interventions.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/admiral/llm_analyzer.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/admiral/metrics.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/admiral/opus_escalator.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/admiral/persistence.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/admiral/policy.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/admiral/proposer.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/admiral/stager.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/admiral/task_classifier.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/admiral/tuning.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/admiral/validator.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/admiral/worker.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/checkpoint.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/config/doctor.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/logger.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/paths/_drydock_home.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/slug.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/types.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/core/utils.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/setup/onboarding/screens/choice.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/setup/onboarding/screens/local_model.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/audit-tests/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/strong-tests/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock/whats_new.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock-acp.spec +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/drydock_terms.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/flake.lock +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/flake.nix +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/README.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/admiral_probe.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/audit_sampler.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/auto_generate_tests.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/auto_release.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/backup.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/bump_version.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/comprehensive_loop.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/discover_cli_tools.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/evolve_tests.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/gen_2000_prompts.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/install.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/llm_balancer.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/mega_loop.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/meta_ralph_loop.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/notify_release.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/oss_task_harness.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/poll_issues.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/port_task.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/ralph_loop.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/session_loop_audit.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/shakedown.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/shakedown_regression.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/shakedown_suite.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/shakedown_variance.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/stress_prompts_50.txt +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/stress_prompts_tool_agent.txt +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/stress_telegram_status.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/telegram_bot.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/test_full.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/test_tui_path.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/tui_test.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/scripts/vllm_failover.sh +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/conftest.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/e2e/common.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/mock/utils.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/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.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_admiral.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_admiral_phase3.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_agents.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_checkpoint.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_integration.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_issue_fixes.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_message_id.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_middleware.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_smoke.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/test_workloads.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/uv.lock +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/worked_examples/README.md +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/worked_examples/cli_subcommand_dispatch.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/worked_examples/lookup.json +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/worked_examples/sql_parser.py +0 -0
- {drydock_cli-2.6.144 → drydock_cli-2.6.147}/worked_examples/tree_walking_interpreter.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2652274
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# DryDock Deployment Guide
|
|
2
|
+
|
|
3
|
+
The known-working configuration DryDock is developed and tested against.
|
|
4
|
+
If you hit TUI loops, tool errors, or model hangs that look different
|
|
5
|
+
from what the README describes, your setup is probably drifting from
|
|
6
|
+
this baseline. This document is kept deliberately concrete — it mirrors
|
|
7
|
+
a real working machine, not aspirational recommendations.
|
|
8
|
+
|
|
9
|
+
## Hardware baseline
|
|
10
|
+
|
|
11
|
+
| Component | What works |
|
|
12
|
+
|---|---|
|
|
13
|
+
| GPU | 2× NVIDIA RTX 4060 Ti 16 GB (32 GB total VRAM) |
|
|
14
|
+
| Model | [Gemma-4-26B-A4B-it-AWQ-4bit](https://huggingface.co/casperhansen/gemma-4-26b-a4b-it-AWQ-4bit) |
|
|
15
|
+
| RAM | 64 GB recommended (32 GB minimum) |
|
|
16
|
+
| Disk | SSD, ≥100 GB free for model + session logs |
|
|
17
|
+
| OS | Ubuntu 22.04, kernel 6.8 |
|
|
18
|
+
|
|
19
|
+
A single 24 GB GPU can run the model with slightly reduced context.
|
|
20
|
+
The AWQ quant is what makes 16 GB cards viable — non-quantized
|
|
21
|
+
Gemma 4 26B needs ≥40 GB.
|
|
22
|
+
|
|
23
|
+
## vLLM (model server)
|
|
24
|
+
|
|
25
|
+
Run via Docker:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
docker run -d \
|
|
29
|
+
--gpus all \
|
|
30
|
+
--name gemma4 \
|
|
31
|
+
-p 8000:8000 \
|
|
32
|
+
-v /path/to/models:/models \
|
|
33
|
+
--ipc=host \
|
|
34
|
+
vllm/vllm-openai:gemma4 \
|
|
35
|
+
--model /models/Gemma-4-26B-A4B-it-AWQ-4bit \
|
|
36
|
+
--quantization compressed-tensors \
|
|
37
|
+
--tensor-parallel-size 2 \
|
|
38
|
+
--max-model-len 131072 \
|
|
39
|
+
--max-num-seqs 2 \
|
|
40
|
+
--gpu-memory-utilization 0.95 \
|
|
41
|
+
--kv-cache-dtype fp8 \
|
|
42
|
+
--served-model-name gemma4 \
|
|
43
|
+
--trust-remote-code \
|
|
44
|
+
--tool-call-parser gemma4 \
|
|
45
|
+
--enable-auto-tool-choice \
|
|
46
|
+
--attention-backend TRITON_ATTN
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Don't omit** any of these flags — they're all load-bearing:
|
|
50
|
+
|
|
51
|
+
| Flag | Why |
|
|
52
|
+
|---|---|
|
|
53
|
+
| `--tool-call-parser gemma4` | Without this, Gemma 4 emits tool calls in text that the OpenAI-compat layer can't route. Tool calling silently breaks. |
|
|
54
|
+
| `--enable-auto-tool-choice` | Required so `tool_choice="auto"` actually works. Without it the model can't decide between text and tool call. |
|
|
55
|
+
| `--attention-backend TRITON_ATTN` | The default backend has periodic OOM spikes on 16 GB cards. TRITON is stable. |
|
|
56
|
+
| `--kv-cache-dtype fp8` | Halves KV cache memory; required to reach 131K context on 32 GB total VRAM. |
|
|
57
|
+
| `--max-num-seqs 2` | Prevents OOM under concurrent load. Raise on larger cards. |
|
|
58
|
+
| `--gpu-memory-utilization 0.95` | Squeezes the last bit of VRAM. Drop to 0.85 if you see allocator warnings. |
|
|
59
|
+
|
|
60
|
+
Single-GPU variant: drop `--tensor-parallel-size 2` and lower
|
|
61
|
+
`--max-model-len` to something like 65536.
|
|
62
|
+
|
|
63
|
+
### Sanity-check
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
curl http://localhost:8000/v1/models
|
|
67
|
+
# Should return: {"data": [{"id": "gemma4", ...}]}
|
|
68
|
+
|
|
69
|
+
curl http://localhost:8000/v1/chat/completions \
|
|
70
|
+
-H "Content-Type: application/json" \
|
|
71
|
+
-d '{"model":"gemma4","messages":[{"role":"user","content":"hi"}]}'
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Optional: load balancer / failover
|
|
75
|
+
|
|
76
|
+
For long sessions, a thin HTTP proxy in front of vLLM survives brief
|
|
77
|
+
vLLM restarts. Point DryDock at the proxy, not vLLM directly. See
|
|
78
|
+
`scripts/llm_balancer.py` for reference; typical setup is:
|
|
79
|
+
|
|
80
|
+
- Proxy on port 8001 → vLLM on port 8000
|
|
81
|
+
- Keepalive cron respawns the balancer if it dies
|
|
82
|
+
- `scripts/vllm_failover.sh` on a 5-min cron restarts vLLM if it's unreachable
|
|
83
|
+
|
|
84
|
+
The development machine uses this setup. Skip it for first-time setup;
|
|
85
|
+
return to it when you start hitting multi-hour sessions.
|
|
86
|
+
|
|
87
|
+
## `~/.drydock/config.toml`
|
|
88
|
+
|
|
89
|
+
The known-working DryDock config. Copy into `~/.drydock/config.toml`
|
|
90
|
+
after first run (DryDock creates a stub on first launch; overwrite it):
|
|
91
|
+
|
|
92
|
+
```toml
|
|
93
|
+
active_model = "local"
|
|
94
|
+
auto_compact_threshold = 120000
|
|
95
|
+
api_timeout = 600.0
|
|
96
|
+
system_prompt_id = "ralph" # Gemma 4's simplified prompt
|
|
97
|
+
slim_system_prompt = true
|
|
98
|
+
enable_telemetry = true
|
|
99
|
+
enable_notifications = true
|
|
100
|
+
|
|
101
|
+
[[providers]]
|
|
102
|
+
name = "vllm"
|
|
103
|
+
api_base = "http://localhost:8000/v1" # or :8001 if using llm_balancer
|
|
104
|
+
api_style = "openai"
|
|
105
|
+
backend = "generic"
|
|
106
|
+
reasoning_field_name = "reasoning_content"
|
|
107
|
+
|
|
108
|
+
[[models]]
|
|
109
|
+
name = "gemma4"
|
|
110
|
+
provider = "vllm"
|
|
111
|
+
alias = "local" # matches active_model above
|
|
112
|
+
temperature = 0.2
|
|
113
|
+
thinking = "high"
|
|
114
|
+
|
|
115
|
+
[session_logging]
|
|
116
|
+
save_dir = "~/.vibe/logs/session" # drydock writes sessions here
|
|
117
|
+
session_prefix = "session"
|
|
118
|
+
enabled = true
|
|
119
|
+
|
|
120
|
+
[project_context]
|
|
121
|
+
max_chars = 40000
|
|
122
|
+
max_doc_bytes = 32768
|
|
123
|
+
max_files = 1000
|
|
124
|
+
max_depth = 3
|
|
125
|
+
timeout_seconds = 2.0
|
|
126
|
+
|
|
127
|
+
[tools.bash]
|
|
128
|
+
permission = "always"
|
|
129
|
+
max_output_bytes = 16000
|
|
130
|
+
default_timeout = 300
|
|
131
|
+
# See repo config for the full allowlist/denylist.
|
|
132
|
+
|
|
133
|
+
[tools.read_file]
|
|
134
|
+
permission = "always"
|
|
135
|
+
max_read_bytes = 64000
|
|
136
|
+
|
|
137
|
+
[tools.write_file]
|
|
138
|
+
permission = "always"
|
|
139
|
+
max_write_bytes = 64000
|
|
140
|
+
create_parent_dirs = true
|
|
141
|
+
|
|
142
|
+
[tools.search_replace]
|
|
143
|
+
permission = "always"
|
|
144
|
+
max_content_size = 100000
|
|
145
|
+
fuzzy_threshold = 0.9
|
|
146
|
+
|
|
147
|
+
[tools.grep]
|
|
148
|
+
permission = "always"
|
|
149
|
+
max_output_bytes = 64000
|
|
150
|
+
default_max_matches = 100
|
|
151
|
+
default_timeout = 60
|
|
152
|
+
|
|
153
|
+
[tools.todo]
|
|
154
|
+
permission = "always"
|
|
155
|
+
max_todos = 100
|
|
156
|
+
|
|
157
|
+
[tools.task]
|
|
158
|
+
permission = "always"
|
|
159
|
+
allowlist = ["explore", "diagnostic", "planner", "builder"]
|
|
160
|
+
|
|
161
|
+
[tools.web_fetch]
|
|
162
|
+
permission = "ask" # don't auto-approve network egress
|
|
163
|
+
default_timeout = 30
|
|
164
|
+
max_content_bytes = 512000
|
|
165
|
+
|
|
166
|
+
[tools.web_search]
|
|
167
|
+
permission = "ask"
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Critical fields:
|
|
171
|
+
|
|
172
|
+
- `temperature = 0.2` — Gemma 4 gets unstable above ~0.4. Don't raise.
|
|
173
|
+
- `thinking = "high"` — required for planning. DryDock adaptively
|
|
174
|
+
lowers it per-turn; setting it here is the default ceiling.
|
|
175
|
+
- `system_prompt_id = "ralph"` — the Gemma-4-tuned prompt. The default
|
|
176
|
+
cli prompt confuses Gemma 4 into planning instead of acting.
|
|
177
|
+
- `auto_compact_threshold = 120000` — below Gemma 4's 131K max context,
|
|
178
|
+
with headroom for the response.
|
|
179
|
+
- `api_timeout = 600.0` — Gemma 4's first-turn thinking can legitimately
|
|
180
|
+
take 60–120 s. The default timeout is too short.
|
|
181
|
+
|
|
182
|
+
## Environment variables
|
|
183
|
+
|
|
184
|
+
| Var | Default | Why you'd change it |
|
|
185
|
+
|---|---|---|
|
|
186
|
+
| `DRYDOCK_AUTO_CONTINUE_DISABLE` | unset | Set to `1` to stop the auto-"Continue." injection that keeps Gemma 4 chaining tool calls. Useful for **stress test runs** and any workflow where text-only turns should cleanly end the user turn. Leave unset for production use unless you see Continue-loops. |
|
|
187
|
+
| `DRYDOCK_INSECURE` | unset | Set to `1` to accept self-signed TLS (local LAN deployments). |
|
|
188
|
+
| `DRYDOCK_LOCAL_URL` | `http://localhost:8000/v1` | Override the default local endpoint. |
|
|
189
|
+
| `DRYDOCK_LOCAL_MODEL` | `local` | Model alias to target. |
|
|
190
|
+
|
|
191
|
+
## Known-good network topology
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
user drydock TUI llm_balancer vLLM
|
|
195
|
+
cli ───► :stdin ───► :8001 ────► :8000
|
|
196
|
+
│ │
|
|
197
|
+
└── keepalive cron └── keeps one
|
|
198
|
+
(5-min) container up
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Diagnosing bad installs
|
|
202
|
+
|
|
203
|
+
If DryDock acts up, compare your runtime to this baseline before
|
|
204
|
+
filing an issue:
|
|
205
|
+
|
|
206
|
+
1. **`curl localhost:8000/v1/models`** returns Gemma 4? If not, vLLM
|
|
207
|
+
isn't running or isn't on the expected port.
|
|
208
|
+
2. **`python3 -c "from drydock.core.agent_loop import AgentLoop; import inspect; print('aafa090' in inspect.getsource(AgentLoop._sanitize_message_ordering))"`** — checks the should_break_loop fix is in your install. If `False`, reinstall with `pip install --upgrade drydock-cli`.
|
|
209
|
+
3. **Check the session log.** `tail ~/.vibe/logs/session/session_*/messages.jsonl` — look for `"user": "Continue."` repeating. If you see that, set `DRYDOCK_AUTO_CONTINUE_DISABLE=1`.
|
|
210
|
+
4. **`docker logs gemma4 | tail -50`** — vLLM errors show up here. Common: `out of memory` (drop `--max-num-seqs` or `--max-model-len`), `unknown tool-call parser` (you're on an older vLLM image without the `gemma4` parser).
|
|
211
|
+
|
|
212
|
+
## Tested versions
|
|
213
|
+
|
|
214
|
+
Everything in this document was exercised on:
|
|
215
|
+
|
|
216
|
+
- drydock-cli ≥ 2.6.145
|
|
217
|
+
- vllm/vllm-openai:gemma4 Docker image (built from vLLM 0.7.x + Gemma 4 parser patch)
|
|
218
|
+
- Python 3.12 (dev) / 3.14 (runtime)
|
|
219
|
+
- Ubuntu 22.04, kernel 6.8, Docker 24.x with nvidia-container-toolkit
|
|
220
|
+
- NVIDIA driver 550.x
|
|
221
|
+
|
|
222
|
+
Older vLLM images may lack `--tool-call-parser gemma4`. Build from the
|
|
223
|
+
gemma4 branch or wait for upstream.
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Overnight Progress — 2026-04-20 → 2026-04-21
|
|
2
|
+
|
|
3
|
+
Drop-in status doc so a fresh Claude session (after disconnect) can
|
|
4
|
+
resume without relearning the last 24 hours. **Read this first, then
|
|
5
|
+
`git log --oneline -20` + `TaskList` for full picture.**
|
|
6
|
+
|
|
7
|
+
## What landed today (in order)
|
|
8
|
+
|
|
9
|
+
| Commit | What | Where it lives |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| 3cb957e | pexpect-buffer trim, banner detect, ESC+/clear, force-reset, checkpoint filter | scripts/ |
|
|
12
|
+
| f363ae1 | `DRYDOCK_AUTO_CONTINUE_DISABLE` env gate for agent_loop auto-Continue | drydock/core/agent_loop.py |
|
|
13
|
+
| 2e0431e | Admiral actuator via SIGUSR1 — watcher asks harness to recycle TUI | scripts/stress_watcher.py + stress_shakedown.py |
|
|
14
|
+
| 5c76801 | Wipe cwd down to fixtures on fresh stress start | scripts/stress_shakedown.py |
|
|
15
|
+
| aafa090 | **should_break_loop dead-code fix** — user turns actually end on text responses | drydock/core/agent_loop.py:876 |
|
|
16
|
+
| 1508c1b | SessionWatcher reads drydock's configured save_dir (was hardcoded ~/.drydock) | scripts/shakedown_interactive.py |
|
|
17
|
+
| c77c2e0 | Hourly stress_babysitter cron | scripts/stress_babysitter.sh + crontab |
|
|
18
|
+
| 0ae9d07 | Karpathy-autoresearch scaffold | research/ (kernel.py, experimenter.py, config_base.toml, mini_*) |
|
|
19
|
+
| 11cfe89 | Todo loop fix (#10) + Check 0 empty-result detector + realuser prompts + raw-md detector | drydock/core/tools/builtins/todo.py, agent_loop.py, scripts/ |
|
|
20
|
+
| fd7a160 | v2.6.145 release | PyPI + GitHub |
|
|
21
|
+
| aad7ac6 | Admiral sees raw-markdown leakage; DEPLOYMENT.md baseline | scripts/stress_watcher.py, DEPLOYMENT.md, README.md |
|
|
22
|
+
| 553926a | v2.6.146 release | PyPI + GitHub |
|
|
23
|
+
|
|
24
|
+
## Long-running processes (DO NOT KILL without checking)
|
|
25
|
+
|
|
26
|
+
| PID | Process | Notes |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| 2625579 | stress_shakedown (v10 restart #1) | auto-restarted by babysitter at 02:00 UTC after original died. Resuming from step 866. |
|
|
29
|
+
| child of 2625579 | drydock TUI | Recycled periodically by admiral actuator |
|
|
30
|
+
| 2366908 or newer | stress_watcher (v10) | Paired with current stress PID |
|
|
31
|
+
| 2251231 | admiral_probe on :8878 | Read-only dashboard endpoint |
|
|
32
|
+
| 1230765 | llm_balancer on :8001 | DO NOT KILL — proxies to vLLM, shared |
|
|
33
|
+
| cron | stress_babysitter.sh hourly | Auto-restarts stress if PID dies |
|
|
34
|
+
|
|
35
|
+
**v10 progress summary** (as of ~03:00 UTC 2026-04-21):
|
|
36
|
+
- Original run: reached idx 972/1658 (59%) with done=866, skip=105, recycle=72 — died at ~21:00 UTC
|
|
37
|
+
- Restart #1: resumed from step 866, currently at idx ~921, done=50, skip=5, recycle=3
|
|
38
|
+
- Net cumulative: ~920/1658, acceptance rate still ~95%
|
|
39
|
+
- Babysitter fired once (telegram sent), admiral actuator firing per run
|
|
40
|
+
|
|
41
|
+
## Meta-Harness integration — in progress
|
|
42
|
+
|
|
43
|
+
User approved the scope at ~03:00 local and asked for overnight build.
|
|
44
|
+
See `research/domain_spec.md` for the full design (just written).
|
|
45
|
+
|
|
46
|
+
**Approved mutation surface:**
|
|
47
|
+
- `drydock/core/prompts/gemma4.md` (system prompt)
|
|
48
|
+
- `drydock/core/prompts/cli.md` (alternate prompt)
|
|
49
|
+
- admiral knob TOML (existing 7 numerics in `config_base.toml`)
|
|
50
|
+
- `scripts/stress_shakedown.py` threshold constants
|
|
51
|
+
(MAX_CONSECUTIVE_SKIPS_BEFORE_RESET, SESSION_RESET_EVERY, retry windows)
|
|
52
|
+
- `drydock/admiral/detectors.py` thresholds + patterns
|
|
53
|
+
|
|
54
|
+
**Approved frozen:**
|
|
55
|
+
- `drydock/core/agent_loop.py` (just stabilized, too risky)
|
|
56
|
+
- Tool implementations
|
|
57
|
+
- Provider config
|
|
58
|
+
- Core stress harness flow (pexpect loop, session tracking)
|
|
59
|
+
|
|
60
|
+
**Approved budget:**
|
|
61
|
+
- Per candidate: 20-min mini-stress (50 prompts) as search-set, 5-min kernel as held-out smoke
|
|
62
|
+
- Per 24 hr: up to ~30 candidates
|
|
63
|
+
- Full 1658-prompt stress is quarterly regression only
|
|
64
|
+
|
|
65
|
+
**Remaining overnight tasks:**
|
|
66
|
+
1. [in progress] Expand `config_base.toml` mutation surface (tasks #16)
|
|
67
|
+
2. [pending] Trace capture in `kernel.py` — save per-run artifacts to `research/traces/<exp_id>/` (task #17)
|
|
68
|
+
3. [pending] `research/proposer.py` — Opus-backed proposer (task #18)
|
|
69
|
+
4. [pending] `--proposer opus` flag in `experimenter.py` (task #19)
|
|
70
|
+
5. [pending] Commit + let auto_release ship (task #20)
|
|
71
|
+
|
|
72
|
+
**NOT running the experimenter overnight** — it would share vLLM with
|
|
73
|
+
v10 stress and starve both. Scaffolded ready-to-launch.
|
|
74
|
+
|
|
75
|
+
## Known issues to investigate (user-reported, not yet fixed)
|
|
76
|
+
|
|
77
|
+
### 2026-04-21 03:xx user reports drydock crash with 15+ API errors
|
|
78
|
+
|
|
79
|
+
User's quote:
|
|
80
|
+
```
|
|
81
|
+
✓ Read 0 line from prepare.py (truncated)
|
|
82
|
+
✓ Read 66 lines from prepare.py
|
|
83
|
+
✓ Read 66 lines from prepare.py
|
|
84
|
+
✓ Read 630 lines from train.py
|
|
85
|
+
✓ Read 19 lines from AGENTS.md
|
|
86
|
+
|
|
87
|
+
[6 consecutive API errors (round 1/3). Compacting and retrying. Last error: API error
|
|
88
|
+
from vllm (model: gemma4): LLM backend error [vllm]
|
|
89
|
+
status: 400 Bad Request
|
|
90
|
+
...]
|
|
91
|
+
|
|
92
|
+
[Stopping: 15+ API errors. The model cannot process this request.]
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Plus drydock self-diagnoses: "You've written prepare.py 4 times this session.
|
|
96
|
+
If the file is oscillating Fix this before moving to the next file."
|
|
97
|
+
|
|
98
|
+
**This is the production version of the exact wedge pattern the stress
|
|
99
|
+
harness fixes.** Production drydock hits 400s, auto-compacts 2-3 times,
|
|
100
|
+
then gives up at 15+ errors. It DOES have recovery — the compaction
|
|
101
|
+
fires — but 15 errors in a row means compaction isn't finding enough
|
|
102
|
+
context to shrink.
|
|
103
|
+
|
|
104
|
+
**Root cause hypothesis:**
|
|
105
|
+
- User's session accumulated large read_file results (train.py 630 lines
|
|
106
|
+
is substantial), plus prepare.py written 4 times = 4 copies of the file
|
|
107
|
+
content in history.
|
|
108
|
+
- Auto-compact at 120000 tokens doesn't fire because the issue isn't
|
|
109
|
+
raw token count, it's a single turn's payload exceeding vLLM's 131K
|
|
110
|
+
context limit.
|
|
111
|
+
- Compaction per-attempt only truncates old tool results; doesn't
|
|
112
|
+
dedupe repeat writes to the same file.
|
|
113
|
+
|
|
114
|
+
**Fix hypothesis (for tomorrow's session):**
|
|
115
|
+
- `_prune_duplicate_writes` already exists in `drydock/core/agent_loop.py`
|
|
116
|
+
but only fires when the hard-block trips on a write_file call. Extend
|
|
117
|
+
it to fire on ANY `write_file` call where the target already has ≥3
|
|
118
|
+
prior write_file entries in history.
|
|
119
|
+
- Lower emergency-compact aggressiveness: when a 400 arrives, drop
|
|
120
|
+
middle-of-history message runs even if recent, not just oldest
|
|
121
|
+
truncation. The "keep first user + last 5" fallback is already there
|
|
122
|
+
(lines 834-846 of agent_loop.py).
|
|
123
|
+
- Consider: hard-cap read_file results at 32KB per call regardless of
|
|
124
|
+
`max_read_bytes` config when the session has had >50k tokens of
|
|
125
|
+
tool results already.
|
|
126
|
+
|
|
127
|
+
**NOT fixing overnight** — this is in `agent_loop.py` which is marked
|
|
128
|
+
frozen for the meta-harness integration AND just got stabilized
|
|
129
|
+
yesterday. Investigate + propose fix in morning session.
|
|
130
|
+
|
|
131
|
+
## Auto-release state
|
|
132
|
+
|
|
133
|
+
**Paused flag:** NOT set. Auto-release cron fires at 0/6/12/18 UTC.
|
|
134
|
+
Next fire: 06:00 UTC (~03:00 local). Any commits before then ship in
|
|
135
|
+
v2.6.147.
|
|
136
|
+
|
|
137
|
+
**Version:** local == v2.6.146 (tagged fd7a160, aad7ac6 shipped).
|
|
138
|
+
|
|
139
|
+
## Monitoring for connection loss
|
|
140
|
+
|
|
141
|
+
If this Claude session disconnects:
|
|
142
|
+
|
|
143
|
+
1. **v10 stress continues** — babysitter cron handles restarts. Check
|
|
144
|
+
`/tmp/stress_babysitter.log` and `~/.drydock/logs/admiral_history.log`.
|
|
145
|
+
2. **Meta-harness files** are committed incrementally. `git log --oneline`
|
|
146
|
+
shows progress. Any staged-but-uncommitted changes are lost, but the
|
|
147
|
+
`domain_spec.md` alone is enough to resume.
|
|
148
|
+
3. **No orphan processes** — all long-running jobs are daemonized via
|
|
149
|
+
`nohup + disown`, they survive my death.
|
|
150
|
+
|
|
151
|
+
## For the next session (morning handoff)
|
|
152
|
+
|
|
153
|
+
- Read `research/domain_spec.md` for the full design.
|
|
154
|
+
- `git log --oneline fd7a160..HEAD` for commits since v2.6.145.
|
|
155
|
+
- Check v10 state: `tail /tmp/stress_babysitter.log`.
|
|
156
|
+
- Check meta-harness progress: `ls research/`, look for `proposer.py`
|
|
157
|
+
and `traces/` — if both exist, the overnight build finished.
|
|
158
|
+
- **Priority for morning:** investigate the prepare.py-loop / 400-error
|
|
159
|
+
wedge the user reported. Hypothesized fixes above.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.147
|
|
4
4
|
Summary: Local-first CLI coding agent — tested with Gemma 4 26B via vLLM
|
|
5
5
|
Project-URL: Homepage, https://github.com/fbobe321/drydock
|
|
6
6
|
Project-URL: Repository, https://github.com/fbobe321/drydock
|
|
@@ -156,6 +156,13 @@ Or with uv:
|
|
|
156
156
|
uv tool install drydock-cli
|
|
157
157
|
```
|
|
158
158
|
|
|
159
|
+
> [!TIP]
|
|
160
|
+
> **New install hitting weird behavior?** See [DEPLOYMENT.md](DEPLOYMENT.md)
|
|
161
|
+
> for the exact known-working vLLM launch flags, `~/.drydock/config.toml`,
|
|
162
|
+
> env vars, and a diagnostic checklist. Most "DryDock doesn't work" issues
|
|
163
|
+
> trace back to missing vLLM flags (`--tool-call-parser gemma4`,
|
|
164
|
+
> `--enable-auto-tool-choice`) or temperature/thinking config drift.
|
|
165
|
+
|
|
159
166
|
## Quick Start
|
|
160
167
|
|
|
161
168
|
```bash
|
|
@@ -100,6 +100,13 @@ Or with uv:
|
|
|
100
100
|
uv tool install drydock-cli
|
|
101
101
|
```
|
|
102
102
|
|
|
103
|
+
> [!TIP]
|
|
104
|
+
> **New install hitting weird behavior?** See [DEPLOYMENT.md](DEPLOYMENT.md)
|
|
105
|
+
> for the exact known-working vLLM launch flags, `~/.drydock/config.toml`,
|
|
106
|
+
> env vars, and a diagnostic checklist. Most "DryDock doesn't work" issues
|
|
107
|
+
> trace back to missing vLLM flags (`--tool-call-parser gemma4`,
|
|
108
|
+
> `--enable-auto-tool-choice`) or temperature/thinking config drift.
|
|
109
|
+
|
|
103
110
|
## Quick Start
|
|
104
111
|
|
|
105
112
|
```bash
|
|
@@ -865,17 +865,31 @@ class AgentLoop:
|
|
|
865
865
|
has_made_edit = True
|
|
866
866
|
break
|
|
867
867
|
|
|
868
|
-
#
|
|
869
|
-
#
|
|
870
|
-
#
|
|
871
|
-
#
|
|
872
|
-
#
|
|
873
|
-
#
|
|
874
|
-
#
|
|
875
|
-
#
|
|
868
|
+
# Break when the model emits a text-only assistant
|
|
869
|
+
# response (no tool calls). That means the model is done
|
|
870
|
+
# with this user turn — return control so the user sees
|
|
871
|
+
# the response and can send the next prompt.
|
|
872
|
+
#
|
|
873
|
+
# The previous condition `last_message.role != Role.tool
|
|
874
|
+
# and tool_turns == 0` was unreachable: tool_turns is
|
|
875
|
+
# incremented to ≥1 at the top of every iteration, so
|
|
876
|
+
# the equality is never true after the first call. With
|
|
877
|
+
# the auto-"Continue." injection in _sanitize_message_
|
|
878
|
+
# ordering, the model re-ran forever on text-only
|
|
879
|
+
# prompts; with that injection disabled (via
|
|
880
|
+
# DRYDOCK_AUTO_CONTINUE_DISABLE=1) the model regenerated
|
|
881
|
+
# the same text response until PER_PROMPT_BUDGET_SEC
|
|
882
|
+
# timed out. Either way user turns never closed on a
|
|
883
|
+
# "done" state. See stress_shakedown.py runs v3–v7 for
|
|
884
|
+
# the full wedge picture.
|
|
885
|
+
#
|
|
886
|
+
# If Gemma 4 emits intermediate summaries without tool
|
|
887
|
+
# calls ("Wrote X, now I'll write Y") the user will see
|
|
888
|
+
# partial progress and have to prompt "continue". That's
|
|
889
|
+
# an acceptable cost compared to the forever-loop.
|
|
876
890
|
should_break_loop = (
|
|
877
|
-
last_message.role
|
|
878
|
-
and
|
|
891
|
+
last_message.role == Role.assistant
|
|
892
|
+
and not last_message.tool_calls
|
|
879
893
|
)
|
|
880
894
|
|
|
881
895
|
# No circuit breakers, no loop detection, no forced nudges.
|
|
@@ -2277,6 +2291,41 @@ class AgentLoop:
|
|
|
2277
2291
|
sigs.reverse()
|
|
2278
2292
|
tool_names.reverse()
|
|
2279
2293
|
|
|
2294
|
+
# Check 0: Same call + empty-pattern result 3+ times in a row.
|
|
2295
|
+
# Lower threshold than Check 1 (8) or the WARNING path (4) for
|
|
2296
|
+
# the specific case where the tool keeps saying "nothing's
|
|
2297
|
+
# here" — more calls literally cannot change state. GitHub #10:
|
|
2298
|
+
# model called todo_list 4× getting "Retrieved 0 todos"; the
|
|
2299
|
+
# existing Check 1 wouldn't fire until 8, leaving the user
|
|
2300
|
+
# staring at a blob of empty calls for ~half a minute.
|
|
2301
|
+
#
|
|
2302
|
+
# We only fire when the result LOOKS empty (total_count: 0,
|
|
2303
|
+
# "no todos", "no tasks", "no results", or entirely blank).
|
|
2304
|
+
# Same call with a non-empty result (e.g., model re-reading a
|
|
2305
|
+
# file whose content hasn't changed) is left to Check 1/WARNING
|
|
2306
|
+
# — those cases often have legitimate ambiguity.
|
|
2307
|
+
def _looks_empty(c: str) -> bool:
|
|
2308
|
+
s = (c or "").lower().strip()
|
|
2309
|
+
if not s:
|
|
2310
|
+
return True
|
|
2311
|
+
for p in ('"total_count": 0', '"total_count":0',
|
|
2312
|
+
'total_count: 0', 'retrieved 0 todos',
|
|
2313
|
+
'no todos', '0 tasks', 'no tasks',
|
|
2314
|
+
'no results', 'no matches', '0 matches'):
|
|
2315
|
+
if p in s:
|
|
2316
|
+
return True
|
|
2317
|
+
return False
|
|
2318
|
+
if len(sigs) >= 3 and all(s == sigs[-1] for s in sigs[-3:]):
|
|
2319
|
+
recent_results: list[str] = []
|
|
2320
|
+
for msg in reversed(self.messages):
|
|
2321
|
+
if msg.role == Role.tool:
|
|
2322
|
+
recent_results.append(str(msg.content or ""))
|
|
2323
|
+
if len(recent_results) >= 3:
|
|
2324
|
+
break
|
|
2325
|
+
if (len(recent_results) >= 3
|
|
2326
|
+
and all(_looks_empty(r) for r in recent_results)):
|
|
2327
|
+
return "FORCE_STOP"
|
|
2328
|
+
|
|
2280
2329
|
# Check 1: Exact same tool call repeated (same name + same args)
|
|
2281
2330
|
last_tool = tool_names[-1] if tool_names else ""
|
|
2282
2331
|
if (
|
|
@@ -119,6 +119,11 @@ class TodoConfig(BaseToolConfig):
|
|
|
119
119
|
|
|
120
120
|
class TodoState(BaseToolState):
|
|
121
121
|
todos: list[TodoItem] = Field(default_factory=list)
|
|
122
|
+
# Track consecutive empty reads so the tool can escalate its reply
|
|
123
|
+
# from "empty" to "stop calling me". GitHub #10: model asked to
|
|
124
|
+
# "review PRD and continue", read empty todos, and re-called the
|
|
125
|
+
# read 4× in a row hoping for a change.
|
|
126
|
+
consecutive_empty_reads: int = 0
|
|
122
127
|
|
|
123
128
|
|
|
124
129
|
class Todo(
|
|
@@ -167,10 +172,36 @@ class Todo(
|
|
|
167
172
|
)
|
|
168
173
|
|
|
169
174
|
def _read_todos(self) -> TodoResult:
|
|
175
|
+
count = len(self.state.todos)
|
|
176
|
+
if count == 0:
|
|
177
|
+
# Escalate the reply each consecutive empty read. GitHub #10:
|
|
178
|
+
# with a neutral "Retrieved 0 todos", the model kept calling
|
|
179
|
+
# read in a loop hoping for a change. Directive phrasing plus
|
|
180
|
+
# an explicit "stop re-reading" at attempt 2+ breaks the loop.
|
|
181
|
+
self.state.consecutive_empty_reads += 1
|
|
182
|
+
n = self.state.consecutive_empty_reads
|
|
183
|
+
if n == 1:
|
|
184
|
+
message = (
|
|
185
|
+
"No todos yet. The list is empty because nothing has "
|
|
186
|
+
"been written. If you want to track work items, call "
|
|
187
|
+
"this tool with action='write' and a todos list. "
|
|
188
|
+
"Do not call with action='read' again until you've "
|
|
189
|
+
"written at least one."
|
|
190
|
+
)
|
|
191
|
+
else:
|
|
192
|
+
message = (
|
|
193
|
+
f"Still no todos (this is read #{n} in a row with no "
|
|
194
|
+
"write between them). Stop calling read. Either write "
|
|
195
|
+
"a todos list, or proceed with the user's task "
|
|
196
|
+
"directly — empty state will not change on its own."
|
|
197
|
+
)
|
|
198
|
+
else:
|
|
199
|
+
self.state.consecutive_empty_reads = 0
|
|
200
|
+
message = f"Retrieved {count} todos"
|
|
170
201
|
return TodoResult(
|
|
171
|
-
message=
|
|
202
|
+
message=message,
|
|
172
203
|
todos=self.state.todos,
|
|
173
|
-
total_count=
|
|
204
|
+
total_count=count,
|
|
174
205
|
)
|
|
175
206
|
|
|
176
207
|
def _write_todos(self, todos: list[TodoItem]) -> TodoResult:
|
|
@@ -182,6 +213,7 @@ class Todo(
|
|
|
182
213
|
raise ToolError("Todo IDs must be unique")
|
|
183
214
|
|
|
184
215
|
self.state.todos = todos
|
|
216
|
+
self.state.consecutive_empty_reads = 0
|
|
185
217
|
|
|
186
218
|
return TodoResult(
|
|
187
219
|
message=f"Updated {len(todos)} todos",
|