drydock-cli 2.3.1__tar.gz → 2.3.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-2.3.1 → drydock_cli-2.3.3}/PKG-INFO +1 -1
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/agents/models.py +3 -0
- drydock_cli-2.3.3/drydock/core/prompts/planner.md +35 -0
- drydock_cli-2.3.3/drydock/skills/api-design/SKILL.md +32 -0
- drydock_cli-2.3.3/drydock/skills/commit-code/SKILL.md +27 -0
- drydock_cli-2.3.3/drydock/skills/context-summary/SKILL.md +19 -0
- drydock_cli-2.3.3/drydock/skills/deploy/SKILL.md +26 -0
- drydock_cli-2.3.3/drydock/skills/diff-review/SKILL.md +16 -0
- drydock_cli-2.3.3/drydock/skills/doc-gen/SKILL.md +28 -0
- drydock_cli-2.3.3/drydock/skills/explain-code/SKILL.md +27 -0
- drydock_cli-2.3.3/drydock/skills/explore-code/SKILL.md +42 -0
- drydock_cli-2.3.3/drydock/skills/fix-issue/SKILL.md +33 -0
- drydock_cli-2.3.3/drydock/skills/git-ops/SKILL.md +32 -0
- drydock_cli-2.3.3/drydock/skills/init-project/SKILL.md +33 -0
- drydock_cli-2.3.3/drydock/skills/loop/SKILL.md +22 -0
- drydock_cli-2.3.3/drydock/skills/migrate/SKILL.md +25 -0
- drydock_cli-2.3.3/drydock/skills/perf-analyze/SKILL.md +29 -0
- drydock_cli-2.3.3/drydock/skills/plan-impl/SKILL.md +45 -0
- drydock_cli-2.3.3/drydock/skills/pr-review/SKILL.md +32 -0
- drydock_cli-2.3.3/drydock/skills/refactor/SKILL.md +37 -0
- drydock_cli-2.3.3/drydock/skills/regex-help/SKILL.md +30 -0
- drydock_cli-2.3.3/drydock/skills/security-review/SKILL.md +31 -0
- drydock_cli-2.3.3/drydock/skills/test-verify/SKILL.md +27 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/pyproject.toml +1 -1
- drydock_cli-2.3.1/drydock/core/prompts/planner.md +0 -15
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/.gitignore +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/.python-version +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/.typos.toml +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/.vscode/extensions.json +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/.vscode/launch.json +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/.vscode/settings.json +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/AGENTS.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/CHANGELOG.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/CLAUDE.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/LICENSE +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/NOTICE +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/PRD.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/README.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/action.yml +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/docs/README.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/docs/acp-setup.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/agent_loop.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/logger.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/paths/_vibe_home.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/slug.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/task_manager.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/types.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/core/utils.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock/whats_new.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock-acp.spec +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/drydock_terms.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/flake.lock +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/flake.nix +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/scripts/README.md +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/scripts/backup.sh +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/scripts/bump_version.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/scripts/install.sh +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/scripts/notify_release.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/scripts/test_full.sh +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/conftest.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/e2e/common.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/mock/utils.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.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-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_agents.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_integration.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_message_id.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_middleware.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_smoke.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/test_workloads.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.3.1 → drydock_cli-2.3.3}/uv.lock +0 -0
|
@@ -185,6 +185,7 @@ EXPLORE = AgentProfile(
|
|
|
185
185
|
),
|
|
186
186
|
safety=AgentSafety.SAFE,
|
|
187
187
|
agent_type=AgentType.SUBAGENT,
|
|
188
|
+
max_turns=15,
|
|
188
189
|
overrides={"enabled_tools": ["grep", "read_file", "glob"], "system_prompt_id": "explore"},
|
|
189
190
|
)
|
|
190
191
|
|
|
@@ -198,6 +199,7 @@ DIAGNOSTIC = AgentProfile(
|
|
|
198
199
|
),
|
|
199
200
|
safety=AgentSafety.SAFE,
|
|
200
201
|
agent_type=AgentType.SUBAGENT,
|
|
202
|
+
max_turns=15,
|
|
201
203
|
overrides={
|
|
202
204
|
"enabled_tools": ["grep", "read_file", "bash", "glob"],
|
|
203
205
|
"system_prompt_id": "diagnostic",
|
|
@@ -214,6 +216,7 @@ PLANNER = AgentProfile(
|
|
|
214
216
|
),
|
|
215
217
|
safety=AgentSafety.SAFE,
|
|
216
218
|
agent_type=AgentType.SUBAGENT,
|
|
219
|
+
max_turns=10,
|
|
217
220
|
overrides={
|
|
218
221
|
"enabled_tools": ["grep", "read_file", "glob"],
|
|
219
222
|
"system_prompt_id": "planner",
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
You are a codebase planner. Analyze requirements and create implementation plans.
|
|
2
|
+
|
|
3
|
+
WORKFLOW:
|
|
4
|
+
1. Read any requirements files (PRD.md, README, etc.) if not already provided
|
|
5
|
+
2. Explore the existing codebase with grep and glob to understand the current state
|
|
6
|
+
3. Create a structured implementation plan
|
|
7
|
+
|
|
8
|
+
OUTPUT FORMAT (always end with this structured plan):
|
|
9
|
+
|
|
10
|
+
## Implementation Plan
|
|
11
|
+
|
|
12
|
+
### Files to Create/Modify
|
|
13
|
+
1. `path/to/file.py` — purpose (complexity: low/med/high)
|
|
14
|
+
|
|
15
|
+
### Order of Implementation
|
|
16
|
+
1. First: [what and why]
|
|
17
|
+
2. Then: [what and why]
|
|
18
|
+
|
|
19
|
+
### Key Decisions
|
|
20
|
+
- [design choice and rationale]
|
|
21
|
+
|
|
22
|
+
### Testing Strategy
|
|
23
|
+
- [how to verify]
|
|
24
|
+
|
|
25
|
+
For bug fixes, also include:
|
|
26
|
+
TARGET: path/to/file.py
|
|
27
|
+
FUNCTION: function_name
|
|
28
|
+
CAUSE: root cause
|
|
29
|
+
FIX: fix approach
|
|
30
|
+
|
|
31
|
+
RULES:
|
|
32
|
+
- Be precise — use grep and read_file to verify your claims
|
|
33
|
+
- Never edit files. Never run tests. Only investigate and plan.
|
|
34
|
+
- After producing your plan, STOP. Do not continue exploring.
|
|
35
|
+
- Maximum 5 tool calls, then output your plan.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: api-design
|
|
3
|
+
description: Design and review REST/GraphQL APIs. Schema validation, endpoint design, error handling patterns.
|
|
4
|
+
allowed-tools: read_file grep glob write_file bash
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# API Design Review
|
|
9
|
+
|
|
10
|
+
Analyze or design an API ($ARGUMENTS).
|
|
11
|
+
|
|
12
|
+
## For existing APIs:
|
|
13
|
+
1. Find route/endpoint definitions
|
|
14
|
+
2. Check for consistency in naming, HTTP methods, status codes
|
|
15
|
+
3. Verify error handling and validation
|
|
16
|
+
4. Check authentication/authorization
|
|
17
|
+
5. Review request/response schemas
|
|
18
|
+
|
|
19
|
+
## For new APIs:
|
|
20
|
+
1. Define resources and relationships
|
|
21
|
+
2. Design endpoints following REST conventions
|
|
22
|
+
3. Define request/response schemas
|
|
23
|
+
4. Plan error codes and messages
|
|
24
|
+
5. Generate OpenAPI/Swagger spec if requested
|
|
25
|
+
|
|
26
|
+
## Best Practices
|
|
27
|
+
- Use plural nouns for resources (/users, not /user)
|
|
28
|
+
- Use HTTP methods correctly (GET=read, POST=create, PUT=update, DELETE=delete)
|
|
29
|
+
- Return appropriate status codes (201 for create, 204 for delete)
|
|
30
|
+
- Use consistent error format: `{"error": {"code": "...", "message": "..."}}`
|
|
31
|
+
- Version the API (/v1/, /v2/)
|
|
32
|
+
- Paginate list endpoints
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: commit-code
|
|
3
|
+
description: Create a git commit with a well-crafted message. Stages changes, reviews diff, writes conventional commit.
|
|
4
|
+
allowed-tools: bash read_file grep
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Commit Workflow
|
|
9
|
+
|
|
10
|
+
1. Run `git status` and `git diff --stat` to see what changed
|
|
11
|
+
2. Run `git diff` to read the actual changes (limit to 200 lines)
|
|
12
|
+
3. Write a commit message following conventional commits:
|
|
13
|
+
- `fix:` for bug fixes
|
|
14
|
+
- `feat:` for new features
|
|
15
|
+
- `refactor:` for refactoring
|
|
16
|
+
- `docs:` for documentation
|
|
17
|
+
- `test:` for test changes
|
|
18
|
+
- `chore:` for maintenance
|
|
19
|
+
4. Stage relevant files with `git add` (specific files, not -A)
|
|
20
|
+
5. Create the commit with `git commit -m "message"`
|
|
21
|
+
6. Show `git log --oneline -3` to confirm
|
|
22
|
+
|
|
23
|
+
Rules:
|
|
24
|
+
- NEVER commit .env, credentials, or secrets
|
|
25
|
+
- Keep the first line under 72 characters
|
|
26
|
+
- Add a body if the change is complex
|
|
27
|
+
- If $ARGUMENTS is provided, use it as context for the commit message
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: context-summary
|
|
3
|
+
description: Summarize the current session context. What files were read, edited, what's the current state.
|
|
4
|
+
allowed-tools: bash read_file
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Context Summary
|
|
9
|
+
|
|
10
|
+
Produce a summary of the current working state:
|
|
11
|
+
|
|
12
|
+
1. **Git status**: `git status --short`
|
|
13
|
+
2. **Recent changes**: `git diff --stat`
|
|
14
|
+
3. **Recent commits**: `git log --oneline -5`
|
|
15
|
+
4. **Modified files**: List files changed in this session
|
|
16
|
+
5. **Current task**: What was the user's original request?
|
|
17
|
+
6. **Progress**: What's been done, what remains?
|
|
18
|
+
|
|
19
|
+
Output as a clean summary the user can quickly scan.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deploy
|
|
3
|
+
description: Deployment workflow. Build, test, tag, push, deploy. Supports PyPI, Docker, GitHub releases.
|
|
4
|
+
allowed-tools: bash read_file grep
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Deployment Workflow
|
|
9
|
+
|
|
10
|
+
## Steps
|
|
11
|
+
1. Run tests: `python -m pytest -x -q`
|
|
12
|
+
2. Check version in pyproject.toml or setup.py
|
|
13
|
+
3. Build: `python -m build` or `docker build .`
|
|
14
|
+
4. Deploy based on target ($ARGUMENTS):
|
|
15
|
+
- **pypi**: `twine upload dist/*`
|
|
16
|
+
- **docker**: `docker push`
|
|
17
|
+
- **github**: `gh release create`
|
|
18
|
+
- **server**: `rsync` or `ssh` deploy
|
|
19
|
+
5. Tag: `git tag vX.Y.Z && git push --tags`
|
|
20
|
+
6. Notify: output deployment summary
|
|
21
|
+
|
|
22
|
+
## Rules
|
|
23
|
+
- ALWAYS run tests before deploying
|
|
24
|
+
- NEVER deploy with uncommitted changes
|
|
25
|
+
- Check that version was bumped
|
|
26
|
+
- Verify the deployment succeeded
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: diff-review
|
|
3
|
+
description: Show and analyze uncommitted changes. Summarize what changed and why.
|
|
4
|
+
allowed-tools: bash read_file
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Diff Review
|
|
9
|
+
|
|
10
|
+
1. Show uncommitted changes: `git diff --stat`
|
|
11
|
+
2. Show the full diff: `git diff`
|
|
12
|
+
3. For each changed file, analyze:
|
|
13
|
+
- What was the intent of the change?
|
|
14
|
+
- Is the change correct and complete?
|
|
15
|
+
- Any issues or improvements?
|
|
16
|
+
4. Provide a summary suitable for a commit message
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: doc-gen
|
|
3
|
+
description: Generate documentation for code. Docstrings, README, API docs, usage examples.
|
|
4
|
+
allowed-tools: read_file grep glob search_replace write_file
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Documentation Generator
|
|
9
|
+
|
|
10
|
+
Generate documentation for the specified code ($ARGUMENTS or current project).
|
|
11
|
+
|
|
12
|
+
## Modes
|
|
13
|
+
1. **Docstrings**: Add/update docstrings for functions, classes, methods
|
|
14
|
+
2. **README**: Generate or update README.md with usage, installation, API
|
|
15
|
+
3. **API docs**: Generate API reference documentation
|
|
16
|
+
4. **Examples**: Create usage examples
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
1. Read the source files to document
|
|
20
|
+
2. Understand the public API (exported functions, classes)
|
|
21
|
+
3. Generate documentation in the appropriate format
|
|
22
|
+
4. Write the documentation files
|
|
23
|
+
|
|
24
|
+
## Rules
|
|
25
|
+
- Follow Google-style or NumPy-style docstrings (match existing style)
|
|
26
|
+
- Include type hints in docstrings if not in code
|
|
27
|
+
- Document parameters, return values, exceptions
|
|
28
|
+
- Add usage examples for non-obvious functions
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: explain-code
|
|
3
|
+
description: Explain code in detail. What it does, how it works, why it's written that way.
|
|
4
|
+
allowed-tools: read_file grep glob
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Code Explanation
|
|
9
|
+
|
|
10
|
+
Explain the code specified in $ARGUMENTS (file path, function name, or concept).
|
|
11
|
+
|
|
12
|
+
## Approach
|
|
13
|
+
1. Find and read the relevant code
|
|
14
|
+
2. Explain at three levels:
|
|
15
|
+
- **What**: One sentence summary of what this code does
|
|
16
|
+
- **How**: Step-by-step walkthrough of the logic
|
|
17
|
+
- **Why**: Design decisions, tradeoffs, alternatives
|
|
18
|
+
3. Call out any:
|
|
19
|
+
- Non-obvious patterns or idioms
|
|
20
|
+
- Potential gotchas or edge cases
|
|
21
|
+
- Performance characteristics
|
|
22
|
+
- Dependencies on other parts of the codebase
|
|
23
|
+
|
|
24
|
+
## Format
|
|
25
|
+
Keep explanations clear and concise. Use code snippets to reference specific lines.
|
|
26
|
+
Adjust detail level to the complexity — simple code gets a brief explanation,
|
|
27
|
+
complex algorithms get detailed walkthroughs.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: explore-code
|
|
3
|
+
description: Structured codebase exploration. Map architecture, find entry points, understand dependencies.
|
|
4
|
+
allowed-tools: bash read_file grep glob
|
|
5
|
+
context: fork
|
|
6
|
+
agent: explore
|
|
7
|
+
user-invocable: true
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Codebase Exploration
|
|
11
|
+
|
|
12
|
+
1. **Structure**: List top-level directories and key files
|
|
13
|
+
- `find . -maxdepth 2 -type f -name "*.py" | head -30`
|
|
14
|
+
- Look for: README, setup.py/pyproject.toml, main entry points
|
|
15
|
+
|
|
16
|
+
2. **Entry points**: Find how the code starts
|
|
17
|
+
- Look for __main__.py, cli.py, app.py, manage.py
|
|
18
|
+
- Read the main entry point (first 50 lines)
|
|
19
|
+
|
|
20
|
+
3. **Architecture**: Map the module structure
|
|
21
|
+
- List packages (directories with __init__.py)
|
|
22
|
+
- Identify the core modules vs utilities vs tests
|
|
23
|
+
|
|
24
|
+
4. **Dependencies**: Check what's imported
|
|
25
|
+
- `grep -r "^import\|^from" --include="*.py" | sort -u | head -30`
|
|
26
|
+
- Check requirements.txt or pyproject.toml dependencies
|
|
27
|
+
|
|
28
|
+
5. **Tests**: Find the test structure
|
|
29
|
+
- `find . -name "test_*.py" -o -name "*_test.py" | head -20`
|
|
30
|
+
|
|
31
|
+
6. **Report**: Summarize findings in this format:
|
|
32
|
+
```
|
|
33
|
+
PROJECT: name
|
|
34
|
+
LANGUAGE: Python X.Y
|
|
35
|
+
STRUCTURE: package/module layout
|
|
36
|
+
ENTRY POINTS: main files
|
|
37
|
+
KEY MODULES: core functionality
|
|
38
|
+
TEST FRAMEWORK: pytest/unittest/etc
|
|
39
|
+
DEPENDENCIES: key external deps
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
If $ARGUMENTS is provided, focus exploration on that specific area.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: fix-issue
|
|
3
|
+
description: Structured bug fix workflow. Locate, hypothesize, fix, verify. Designed for SWE-bench style tasks.
|
|
4
|
+
allowed-tools: bash read_file grep glob search_replace write_file
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Fix Issue Workflow
|
|
9
|
+
|
|
10
|
+
## Phase 1: Locate
|
|
11
|
+
1. Grep for the class/function/error mentioned in the bug description
|
|
12
|
+
2. Read the relevant source file (use offset/limit, 50-100 lines)
|
|
13
|
+
3. Identify the root cause — which line(s) need to change
|
|
14
|
+
|
|
15
|
+
## Phase 2: Hypothesize
|
|
16
|
+
4. Form a hypothesis: "The bug is caused by X because Y"
|
|
17
|
+
5. Identify the minimal fix — usually 1-5 lines in 1 file
|
|
18
|
+
|
|
19
|
+
## Phase 3: Fix
|
|
20
|
+
6. Apply the fix with search_replace (exact text match)
|
|
21
|
+
7. If search_replace fails, re-read the file first, then retry with EXACT text
|
|
22
|
+
8. Read back the changed lines to verify the edit applied
|
|
23
|
+
|
|
24
|
+
## Phase 4: Verify
|
|
25
|
+
9. Run relevant tests if available: `python -m pytest <test_file> -x -q`
|
|
26
|
+
10. If tests pass, done. If tests fail, read the failure and iterate.
|
|
27
|
+
|
|
28
|
+
## Rules
|
|
29
|
+
- NEVER edit test files — the bug is in source code
|
|
30
|
+
- Keep changes minimal — no refactoring
|
|
31
|
+
- A wrong fix attempt is better than no fix
|
|
32
|
+
- Maximum 3 fix attempts before trying a different approach
|
|
33
|
+
- If $ARGUMENTS provided, treat it as the bug description
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: git-ops
|
|
3
|
+
description: Git operations helper. Branching, merging, rebasing, conflict resolution, history analysis.
|
|
4
|
+
allowed-tools: bash read_file
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Git Operations
|
|
9
|
+
|
|
10
|
+
Handle git tasks based on $ARGUMENTS:
|
|
11
|
+
|
|
12
|
+
## Common Operations
|
|
13
|
+
- **branch**: `git checkout -b feature/$0`
|
|
14
|
+
- **merge**: `git merge $0` with conflict resolution
|
|
15
|
+
- **rebase**: `git rebase $0` — fix conflicts if any
|
|
16
|
+
- **stash**: `git stash` / `git stash pop`
|
|
17
|
+
- **cherry-pick**: `git cherry-pick $0`
|
|
18
|
+
- **log**: `git log --oneline --graph -20`
|
|
19
|
+
- **blame**: `git blame $0`
|
|
20
|
+
- **bisect**: Binary search for the commit that introduced a bug
|
|
21
|
+
- **clean**: `git clean -fd` (with confirmation)
|
|
22
|
+
|
|
23
|
+
## Conflict Resolution
|
|
24
|
+
1. Show conflicted files: `git diff --name-only --diff-filter=U`
|
|
25
|
+
2. For each conflict, read the file and resolve
|
|
26
|
+
3. Stage resolved files: `git add <file>`
|
|
27
|
+
4. Continue: `git rebase --continue` or `git merge --continue`
|
|
28
|
+
|
|
29
|
+
## Rules
|
|
30
|
+
- NEVER force push to main/master
|
|
31
|
+
- Always stash before destructive operations
|
|
32
|
+
- Show the user what will happen before doing it
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: init-project
|
|
3
|
+
description: Initialize a new project with standard structure, README, tests, CI config.
|
|
4
|
+
allowed-tools: bash write_file read_file
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Project Initialization
|
|
9
|
+
|
|
10
|
+
Create a new project with standard Python structure.
|
|
11
|
+
|
|
12
|
+
1. Create directory structure:
|
|
13
|
+
```
|
|
14
|
+
$0/
|
|
15
|
+
├── $0/
|
|
16
|
+
│ ├── __init__.py
|
|
17
|
+
│ ├── __main__.py
|
|
18
|
+
│ └── cli.py
|
|
19
|
+
├── tests/
|
|
20
|
+
│ ├── __init__.py
|
|
21
|
+
│ └── test_$0.py
|
|
22
|
+
├── pyproject.toml
|
|
23
|
+
├── README.md
|
|
24
|
+
└── .gitignore
|
|
25
|
+
```
|
|
26
|
+
2. Write pyproject.toml with project metadata
|
|
27
|
+
3. Write a basic README.md
|
|
28
|
+
4. Write __init__.py with version
|
|
29
|
+
5. Write __main__.py entry point
|
|
30
|
+
6. Write a sample test
|
|
31
|
+
7. Initialize git: `git init && git add -A && git commit -m "Initial commit"`
|
|
32
|
+
|
|
33
|
+
If $ARGUMENTS specifies a framework (flask, fastapi, django), adapt the structure.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: loop
|
|
3
|
+
description: Run a prompt repeatedly on an interval. Useful for monitoring, polling, or iterative tasks.
|
|
4
|
+
allowed-tools: bash read_file grep glob search_replace write_file
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Loop Execution
|
|
9
|
+
|
|
10
|
+
Run the given task repeatedly. Usage: `/loop [interval_seconds] <task>`
|
|
11
|
+
|
|
12
|
+
Default interval: 60 seconds.
|
|
13
|
+
|
|
14
|
+
1. Parse interval from $0 (if numeric), otherwise default to 60
|
|
15
|
+
2. Execute the task: $ARGUMENTS
|
|
16
|
+
3. Wait for the interval
|
|
17
|
+
4. Repeat until interrupted or task reports completion
|
|
18
|
+
|
|
19
|
+
## Common uses:
|
|
20
|
+
- `/loop 30 check if the build passed` — poll CI every 30s
|
|
21
|
+
- `/loop 60 run tests and fix failures` — continuous test-fix loop
|
|
22
|
+
- `/loop 120 check PR comments and respond` — monitor PR
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: migrate
|
|
3
|
+
description: Help with code migrations. Python version upgrades, framework migrations, dependency updates.
|
|
4
|
+
allowed-tools: bash read_file grep glob search_replace write_file
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Migration Helper
|
|
9
|
+
|
|
10
|
+
Assist with migrating code ($ARGUMENTS describes the migration).
|
|
11
|
+
|
|
12
|
+
## Common Migrations
|
|
13
|
+
- **Python 2→3**: Fix print statements, dict methods, string handling
|
|
14
|
+
- **Django version**: Update deprecated APIs, new settings
|
|
15
|
+
- **Flask→FastAPI**: Convert routes, add async, update schemas
|
|
16
|
+
- **unittest→pytest**: Convert test classes, assertions, fixtures
|
|
17
|
+
- **requirements.txt→pyproject.toml**: Convert dependency format
|
|
18
|
+
- **JavaScript→TypeScript**: Add types, rename files
|
|
19
|
+
|
|
20
|
+
## Workflow
|
|
21
|
+
1. Identify what needs to change (grep for deprecated patterns)
|
|
22
|
+
2. Plan the migration order (dependencies first)
|
|
23
|
+
3. Apply changes file by file
|
|
24
|
+
4. Run tests after each file
|
|
25
|
+
5. Fix any breakage
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: perf-analyze
|
|
3
|
+
description: Performance analysis. Profile code, find bottlenecks, suggest optimizations.
|
|
4
|
+
allowed-tools: bash read_file grep glob
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Performance Analysis
|
|
9
|
+
|
|
10
|
+
Analyze code performance for $ARGUMENTS (or recent changes).
|
|
11
|
+
|
|
12
|
+
## Steps
|
|
13
|
+
1. Identify hot paths — which functions are called most?
|
|
14
|
+
2. Look for common performance issues:
|
|
15
|
+
- N+1 queries (loops with database calls)
|
|
16
|
+
- Unnecessary list copies/conversions
|
|
17
|
+
- Missing caching for repeated computations
|
|
18
|
+
- Blocking I/O in async code
|
|
19
|
+
- Large memory allocations in loops
|
|
20
|
+
- String concatenation in loops (use join)
|
|
21
|
+
3. Profile if possible: `python -m cProfile -s cumtime script.py 2>&1 | head -30`
|
|
22
|
+
4. Suggest specific optimizations with before/after examples
|
|
23
|
+
|
|
24
|
+
## Output
|
|
25
|
+
### Bottlenecks Found
|
|
26
|
+
- [file:line] Description — estimated impact
|
|
27
|
+
|
|
28
|
+
### Recommended Optimizations
|
|
29
|
+
1. [Change] — expected improvement
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plan-impl
|
|
3
|
+
description: Create a detailed implementation plan before coding. Identifies files, dependencies, order of changes.
|
|
4
|
+
allowed-tools: read_file grep glob
|
|
5
|
+
context: fork
|
|
6
|
+
agent: planner
|
|
7
|
+
user-invocable: true
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Implementation Planning
|
|
11
|
+
|
|
12
|
+
Given a task description ($ARGUMENTS), create a comprehensive plan.
|
|
13
|
+
|
|
14
|
+
## Steps
|
|
15
|
+
1. Analyze the requirements
|
|
16
|
+
2. Explore the existing codebase to understand constraints
|
|
17
|
+
3. Identify all files that need to be created or modified
|
|
18
|
+
4. Determine the order of changes (dependencies first)
|
|
19
|
+
5. Estimate complexity per file
|
|
20
|
+
|
|
21
|
+
## Output Format
|
|
22
|
+
```
|
|
23
|
+
# Implementation Plan: [title]
|
|
24
|
+
|
|
25
|
+
## Overview
|
|
26
|
+
[1-2 sentence summary]
|
|
27
|
+
|
|
28
|
+
## Files to Change
|
|
29
|
+
1. `path/to/file.py` — [what changes] (complexity: low/med/high)
|
|
30
|
+
2. `path/to/other.py` — [what changes] (complexity: low/med/high)
|
|
31
|
+
|
|
32
|
+
## New Files
|
|
33
|
+
1. `path/to/new.py` — [purpose]
|
|
34
|
+
|
|
35
|
+
## Order of Implementation
|
|
36
|
+
1. [first thing to do and why]
|
|
37
|
+
2. [second thing]
|
|
38
|
+
3. [etc]
|
|
39
|
+
|
|
40
|
+
## Risks & Considerations
|
|
41
|
+
- [potential issues]
|
|
42
|
+
|
|
43
|
+
## Testing Strategy
|
|
44
|
+
- [how to verify the changes work]
|
|
45
|
+
```
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pr-review
|
|
3
|
+
description: Review a pull request. Fetches diff, analyzes changes, checks for bugs, security issues, and style.
|
|
4
|
+
allowed-tools: bash read_file grep glob
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# PR Review Workflow
|
|
9
|
+
|
|
10
|
+
1. Get the PR diff: `git diff main...HEAD` (or `!`git diff main...HEAD``)
|
|
11
|
+
2. List changed files: `git diff --name-only main...HEAD`
|
|
12
|
+
3. For each changed file:
|
|
13
|
+
a. Read the full diff for that file
|
|
14
|
+
b. Check for: bugs, security issues, performance problems, missing error handling
|
|
15
|
+
c. Check for: style consistency, naming conventions, dead code
|
|
16
|
+
4. Produce a structured review:
|
|
17
|
+
|
|
18
|
+
## Review Output Format
|
|
19
|
+
### Critical Issues (must fix)
|
|
20
|
+
- [file:line] Description of issue
|
|
21
|
+
|
|
22
|
+
### Suggestions (should fix)
|
|
23
|
+
- [file:line] Description of improvement
|
|
24
|
+
|
|
25
|
+
### Nits (optional)
|
|
26
|
+
- [file:line] Minor style/preference items
|
|
27
|
+
|
|
28
|
+
### Summary
|
|
29
|
+
- Overall assessment: APPROVE / REQUEST_CHANGES / COMMENT
|
|
30
|
+
- One paragraph summary of the changes
|
|
31
|
+
|
|
32
|
+
If $0 is a PR number, fetch it with: `gh pr diff $0`
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: refactor
|
|
3
|
+
description: Structured code refactoring. Identify patterns, plan changes, apply safely, verify.
|
|
4
|
+
allowed-tools: bash read_file grep glob search_replace write_file
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Refactoring Workflow
|
|
9
|
+
|
|
10
|
+
## Phase 1: Understand
|
|
11
|
+
1. Read the code to refactor (specified in $ARGUMENTS or recent changes)
|
|
12
|
+
2. Identify the refactoring type:
|
|
13
|
+
- Extract function/method
|
|
14
|
+
- Rename variable/function/class
|
|
15
|
+
- Simplify conditionals
|
|
16
|
+
- Remove duplication
|
|
17
|
+
- Split large function
|
|
18
|
+
- Move code to better location
|
|
19
|
+
|
|
20
|
+
## Phase 2: Plan
|
|
21
|
+
3. List every file that will change
|
|
22
|
+
4. For each file, describe the specific change
|
|
23
|
+
5. Identify risks: what could break?
|
|
24
|
+
|
|
25
|
+
## Phase 3: Apply
|
|
26
|
+
6. Make changes one file at a time with search_replace
|
|
27
|
+
7. After each change, verify syntax: `python -c "import ast; ast.parse(open('file').read())"`
|
|
28
|
+
|
|
29
|
+
## Phase 4: Verify
|
|
30
|
+
8. Run tests if available
|
|
31
|
+
9. Check imports still resolve
|
|
32
|
+
10. Verify no functionality changed (refactor = same behavior, better structure)
|
|
33
|
+
|
|
34
|
+
## Rules
|
|
35
|
+
- One refactoring at a time — don't combine multiple refactors
|
|
36
|
+
- Preserve all existing behavior
|
|
37
|
+
- Run tests after each change
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: regex-help
|
|
3
|
+
description: Build, explain, and test regular expressions. Supports Python re module syntax.
|
|
4
|
+
allowed-tools: bash
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Regex Helper
|
|
9
|
+
|
|
10
|
+
Help with regular expressions based on $ARGUMENTS.
|
|
11
|
+
|
|
12
|
+
## Modes
|
|
13
|
+
- **Build**: "match email addresses" → provide the regex
|
|
14
|
+
- **Explain**: Given a regex, explain what it matches
|
|
15
|
+
- **Test**: Test a regex against sample strings
|
|
16
|
+
- **Debug**: Fix a regex that's not matching correctly
|
|
17
|
+
|
|
18
|
+
## Testing
|
|
19
|
+
```python
|
|
20
|
+
python3 -c "
|
|
21
|
+
import re
|
|
22
|
+
pattern = r'YOUR_REGEX'
|
|
23
|
+
tests = ['test1', 'test2', 'test3']
|
|
24
|
+
for t in tests:
|
|
25
|
+
m = re.search(pattern, t)
|
|
26
|
+
print(f'{t!r}: {\"MATCH\" if m else \"no match\"} {m.groups() if m else \"\"}' )
|
|
27
|
+
"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Always provide the regex in Python `re` module syntax with raw strings (r'...').
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: security-review
|
|
3
|
+
description: Security audit of code changes. Checks OWASP Top 10, secrets, injection, auth issues.
|
|
4
|
+
allowed-tools: bash read_file grep glob
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Security Review
|
|
9
|
+
|
|
10
|
+
Analyze the current changes (or specified files) for security vulnerabilities.
|
|
11
|
+
|
|
12
|
+
## Checks
|
|
13
|
+
1. **Secrets/Credentials**: grep for API keys, passwords, tokens, private keys
|
|
14
|
+
- `grep -rn "password\|secret\|api_key\|token\|private_key\|AWS_" --include="*.py" | head -20`
|
|
15
|
+
2. **SQL Injection**: Look for string formatting in SQL queries
|
|
16
|
+
- `grep -rn "f\".*SELECT\|\.format.*SELECT\|%.*SELECT" --include="*.py"`
|
|
17
|
+
3. **Command Injection**: Look for shell=True, os.system, subprocess with user input
|
|
18
|
+
- `grep -rn "shell=True\|os\.system\|subprocess.*shell" --include="*.py"`
|
|
19
|
+
4. **XSS**: Look for unescaped user input in HTML/templates
|
|
20
|
+
5. **Path Traversal**: Look for user-controlled file paths without sanitization
|
|
21
|
+
6. **Auth/AuthZ**: Check for missing authentication or authorization checks
|
|
22
|
+
7. **Sensitive Data**: Check logging for PII, credentials in error messages
|
|
23
|
+
8. **Dependencies**: Check for known vulnerable packages
|
|
24
|
+
|
|
25
|
+
## Output Format
|
|
26
|
+
### CRITICAL (immediate fix required)
|
|
27
|
+
### HIGH (fix before merge)
|
|
28
|
+
### MEDIUM (fix soon)
|
|
29
|
+
### LOW (informational)
|
|
30
|
+
|
|
31
|
+
Each finding: [SEVERITY] file:line — description + recommended fix
|