code-puppy 0.0.169__py3-none-any.whl → 0.0.366__py3-none-any.whl
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.
- code_puppy/__init__.py +7 -1
- code_puppy/agents/__init__.py +8 -8
- code_puppy/agents/agent_c_reviewer.py +155 -0
- code_puppy/agents/agent_code_puppy.py +9 -2
- code_puppy/agents/agent_code_reviewer.py +90 -0
- code_puppy/agents/agent_cpp_reviewer.py +132 -0
- code_puppy/agents/agent_creator_agent.py +48 -9
- code_puppy/agents/agent_golang_reviewer.py +151 -0
- code_puppy/agents/agent_javascript_reviewer.py +160 -0
- code_puppy/agents/agent_manager.py +146 -199
- code_puppy/agents/agent_pack_leader.py +383 -0
- code_puppy/agents/agent_planning.py +163 -0
- code_puppy/agents/agent_python_programmer.py +165 -0
- code_puppy/agents/agent_python_reviewer.py +90 -0
- code_puppy/agents/agent_qa_expert.py +163 -0
- code_puppy/agents/agent_qa_kitten.py +208 -0
- code_puppy/agents/agent_security_auditor.py +181 -0
- code_puppy/agents/agent_terminal_qa.py +323 -0
- code_puppy/agents/agent_typescript_reviewer.py +166 -0
- code_puppy/agents/base_agent.py +1713 -1
- code_puppy/agents/event_stream_handler.py +350 -0
- code_puppy/agents/json_agent.py +12 -1
- code_puppy/agents/pack/__init__.py +34 -0
- code_puppy/agents/pack/bloodhound.py +304 -0
- code_puppy/agents/pack/husky.py +321 -0
- code_puppy/agents/pack/retriever.py +393 -0
- code_puppy/agents/pack/shepherd.py +348 -0
- code_puppy/agents/pack/terrier.py +287 -0
- code_puppy/agents/pack/watchdog.py +367 -0
- code_puppy/agents/prompt_reviewer.py +145 -0
- code_puppy/agents/subagent_stream_handler.py +276 -0
- code_puppy/api/__init__.py +13 -0
- code_puppy/api/app.py +169 -0
- code_puppy/api/main.py +21 -0
- code_puppy/api/pty_manager.py +446 -0
- code_puppy/api/routers/__init__.py +12 -0
- code_puppy/api/routers/agents.py +36 -0
- code_puppy/api/routers/commands.py +217 -0
- code_puppy/api/routers/config.py +74 -0
- code_puppy/api/routers/sessions.py +232 -0
- code_puppy/api/templates/terminal.html +361 -0
- code_puppy/api/websocket.py +154 -0
- code_puppy/callbacks.py +174 -4
- code_puppy/chatgpt_codex_client.py +283 -0
- code_puppy/claude_cache_client.py +586 -0
- code_puppy/cli_runner.py +916 -0
- code_puppy/command_line/add_model_menu.py +1079 -0
- code_puppy/command_line/agent_menu.py +395 -0
- code_puppy/command_line/attachments.py +395 -0
- code_puppy/command_line/autosave_menu.py +605 -0
- code_puppy/command_line/clipboard.py +527 -0
- code_puppy/command_line/colors_menu.py +520 -0
- code_puppy/command_line/command_handler.py +233 -627
- code_puppy/command_line/command_registry.py +150 -0
- code_puppy/command_line/config_commands.py +715 -0
- code_puppy/command_line/core_commands.py +792 -0
- code_puppy/command_line/diff_menu.py +863 -0
- code_puppy/command_line/load_context_completion.py +15 -22
- code_puppy/command_line/mcp/base.py +1 -4
- code_puppy/command_line/mcp/catalog_server_installer.py +175 -0
- code_puppy/command_line/mcp/custom_server_form.py +688 -0
- code_puppy/command_line/mcp/custom_server_installer.py +195 -0
- code_puppy/command_line/mcp/edit_command.py +148 -0
- code_puppy/command_line/mcp/handler.py +9 -4
- code_puppy/command_line/mcp/help_command.py +6 -5
- code_puppy/command_line/mcp/install_command.py +16 -27
- code_puppy/command_line/mcp/install_menu.py +685 -0
- code_puppy/command_line/mcp/list_command.py +3 -3
- code_puppy/command_line/mcp/logs_command.py +174 -65
- code_puppy/command_line/mcp/remove_command.py +2 -2
- code_puppy/command_line/mcp/restart_command.py +12 -4
- code_puppy/command_line/mcp/search_command.py +17 -11
- code_puppy/command_line/mcp/start_all_command.py +22 -13
- code_puppy/command_line/mcp/start_command.py +50 -31
- code_puppy/command_line/mcp/status_command.py +6 -7
- code_puppy/command_line/mcp/stop_all_command.py +11 -8
- code_puppy/command_line/mcp/stop_command.py +11 -10
- code_puppy/command_line/mcp/test_command.py +2 -2
- code_puppy/command_line/mcp/utils.py +1 -1
- code_puppy/command_line/mcp/wizard_utils.py +22 -18
- code_puppy/command_line/mcp_completion.py +174 -0
- code_puppy/command_line/model_picker_completion.py +89 -30
- code_puppy/command_line/model_settings_menu.py +884 -0
- code_puppy/command_line/motd.py +14 -8
- code_puppy/command_line/onboarding_slides.py +179 -0
- code_puppy/command_line/onboarding_wizard.py +340 -0
- code_puppy/command_line/pin_command_completion.py +329 -0
- code_puppy/command_line/prompt_toolkit_completion.py +626 -75
- code_puppy/command_line/session_commands.py +296 -0
- code_puppy/command_line/utils.py +54 -0
- code_puppy/config.py +1181 -51
- code_puppy/error_logging.py +118 -0
- code_puppy/gemini_code_assist.py +385 -0
- code_puppy/gemini_model.py +602 -0
- code_puppy/http_utils.py +220 -104
- code_puppy/keymap.py +128 -0
- code_puppy/main.py +5 -594
- code_puppy/{mcp → mcp_}/__init__.py +17 -0
- code_puppy/{mcp → mcp_}/async_lifecycle.py +35 -4
- code_puppy/{mcp → mcp_}/blocking_startup.py +70 -43
- code_puppy/{mcp → mcp_}/captured_stdio_server.py +2 -2
- code_puppy/{mcp → mcp_}/config_wizard.py +5 -5
- code_puppy/{mcp → mcp_}/dashboard.py +15 -6
- code_puppy/{mcp → mcp_}/examples/retry_example.py +4 -1
- code_puppy/{mcp → mcp_}/managed_server.py +66 -39
- code_puppy/{mcp → mcp_}/manager.py +146 -52
- code_puppy/mcp_/mcp_logs.py +224 -0
- code_puppy/{mcp → mcp_}/registry.py +6 -6
- code_puppy/{mcp → mcp_}/server_registry_catalog.py +25 -8
- code_puppy/messaging/__init__.py +199 -2
- code_puppy/messaging/bus.py +610 -0
- code_puppy/messaging/commands.py +167 -0
- code_puppy/messaging/markdown_patches.py +57 -0
- code_puppy/messaging/message_queue.py +17 -48
- code_puppy/messaging/messages.py +500 -0
- code_puppy/messaging/queue_console.py +1 -24
- code_puppy/messaging/renderers.py +43 -146
- code_puppy/messaging/rich_renderer.py +1027 -0
- code_puppy/messaging/spinner/__init__.py +33 -5
- code_puppy/messaging/spinner/console_spinner.py +92 -52
- code_puppy/messaging/spinner/spinner_base.py +29 -0
- code_puppy/messaging/subagent_console.py +461 -0
- code_puppy/model_factory.py +686 -80
- code_puppy/model_utils.py +167 -0
- code_puppy/models.json +86 -104
- code_puppy/models_dev_api.json +1 -0
- code_puppy/models_dev_parser.py +592 -0
- code_puppy/plugins/__init__.py +164 -10
- code_puppy/plugins/antigravity_oauth/__init__.py +10 -0
- code_puppy/plugins/antigravity_oauth/accounts.py +406 -0
- code_puppy/plugins/antigravity_oauth/antigravity_model.py +704 -0
- code_puppy/plugins/antigravity_oauth/config.py +42 -0
- code_puppy/plugins/antigravity_oauth/constants.py +136 -0
- code_puppy/plugins/antigravity_oauth/oauth.py +478 -0
- code_puppy/plugins/antigravity_oauth/register_callbacks.py +406 -0
- code_puppy/plugins/antigravity_oauth/storage.py +271 -0
- code_puppy/plugins/antigravity_oauth/test_plugin.py +319 -0
- code_puppy/plugins/antigravity_oauth/token.py +167 -0
- code_puppy/plugins/antigravity_oauth/transport.py +767 -0
- code_puppy/plugins/antigravity_oauth/utils.py +169 -0
- code_puppy/plugins/chatgpt_oauth/__init__.py +8 -0
- code_puppy/plugins/chatgpt_oauth/config.py +52 -0
- code_puppy/plugins/chatgpt_oauth/oauth_flow.py +328 -0
- code_puppy/plugins/chatgpt_oauth/register_callbacks.py +94 -0
- code_puppy/plugins/chatgpt_oauth/test_plugin.py +293 -0
- code_puppy/plugins/chatgpt_oauth/utils.py +489 -0
- code_puppy/plugins/claude_code_oauth/README.md +167 -0
- code_puppy/plugins/claude_code_oauth/SETUP.md +93 -0
- code_puppy/plugins/claude_code_oauth/__init__.py +6 -0
- code_puppy/plugins/claude_code_oauth/config.py +50 -0
- code_puppy/plugins/claude_code_oauth/register_callbacks.py +308 -0
- code_puppy/plugins/claude_code_oauth/test_plugin.py +283 -0
- code_puppy/plugins/claude_code_oauth/utils.py +518 -0
- code_puppy/plugins/customizable_commands/__init__.py +0 -0
- code_puppy/plugins/customizable_commands/register_callbacks.py +169 -0
- code_puppy/plugins/example_custom_command/README.md +280 -0
- code_puppy/plugins/example_custom_command/register_callbacks.py +51 -0
- code_puppy/plugins/file_permission_handler/__init__.py +4 -0
- code_puppy/plugins/file_permission_handler/register_callbacks.py +523 -0
- code_puppy/plugins/frontend_emitter/__init__.py +25 -0
- code_puppy/plugins/frontend_emitter/emitter.py +121 -0
- code_puppy/plugins/frontend_emitter/register_callbacks.py +261 -0
- code_puppy/plugins/oauth_puppy_html.py +228 -0
- code_puppy/plugins/shell_safety/__init__.py +6 -0
- code_puppy/plugins/shell_safety/agent_shell_safety.py +69 -0
- code_puppy/plugins/shell_safety/command_cache.py +156 -0
- code_puppy/plugins/shell_safety/register_callbacks.py +202 -0
- code_puppy/prompts/antigravity_system_prompt.md +1 -0
- code_puppy/prompts/codex_system_prompt.md +310 -0
- code_puppy/pydantic_patches.py +131 -0
- code_puppy/reopenable_async_client.py +8 -8
- code_puppy/round_robin_model.py +10 -15
- code_puppy/session_storage.py +294 -0
- code_puppy/status_display.py +21 -4
- code_puppy/summarization_agent.py +52 -14
- code_puppy/terminal_utils.py +418 -0
- code_puppy/tools/__init__.py +139 -6
- code_puppy/tools/agent_tools.py +548 -49
- code_puppy/tools/browser/__init__.py +37 -0
- code_puppy/tools/browser/browser_control.py +289 -0
- code_puppy/tools/browser/browser_interactions.py +545 -0
- code_puppy/tools/browser/browser_locators.py +640 -0
- code_puppy/tools/browser/browser_manager.py +316 -0
- code_puppy/tools/browser/browser_navigation.py +251 -0
- code_puppy/tools/browser/browser_screenshot.py +179 -0
- code_puppy/tools/browser/browser_scripts.py +462 -0
- code_puppy/tools/browser/browser_workflows.py +221 -0
- code_puppy/tools/browser/chromium_terminal_manager.py +259 -0
- code_puppy/tools/browser/terminal_command_tools.py +521 -0
- code_puppy/tools/browser/terminal_screenshot_tools.py +556 -0
- code_puppy/tools/browser/terminal_tools.py +525 -0
- code_puppy/tools/command_runner.py +941 -153
- code_puppy/tools/common.py +1146 -6
- code_puppy/tools/display.py +84 -0
- code_puppy/tools/file_modifications.py +288 -89
- code_puppy/tools/file_operations.py +352 -266
- code_puppy/tools/subagent_context.py +158 -0
- code_puppy/uvx_detection.py +242 -0
- code_puppy/version_checker.py +30 -11
- code_puppy-0.0.366.data/data/code_puppy/models.json +110 -0
- code_puppy-0.0.366.data/data/code_puppy/models_dev_api.json +1 -0
- {code_puppy-0.0.169.dist-info → code_puppy-0.0.366.dist-info}/METADATA +184 -67
- code_puppy-0.0.366.dist-info/RECORD +217 -0
- {code_puppy-0.0.169.dist-info → code_puppy-0.0.366.dist-info}/WHEEL +1 -1
- {code_puppy-0.0.169.dist-info → code_puppy-0.0.366.dist-info}/entry_points.txt +1 -0
- code_puppy/agent.py +0 -231
- code_puppy/agents/agent_orchestrator.json +0 -26
- code_puppy/agents/runtime_manager.py +0 -272
- code_puppy/command_line/mcp/add_command.py +0 -183
- code_puppy/command_line/meta_command_handler.py +0 -153
- code_puppy/message_history_processor.py +0 -490
- code_puppy/messaging/spinner/textual_spinner.py +0 -101
- code_puppy/state_management.py +0 -200
- code_puppy/tui/__init__.py +0 -10
- code_puppy/tui/app.py +0 -986
- code_puppy/tui/components/__init__.py +0 -21
- code_puppy/tui/components/chat_view.py +0 -550
- code_puppy/tui/components/command_history_modal.py +0 -218
- code_puppy/tui/components/copy_button.py +0 -139
- code_puppy/tui/components/custom_widgets.py +0 -63
- code_puppy/tui/components/human_input_modal.py +0 -175
- code_puppy/tui/components/input_area.py +0 -167
- code_puppy/tui/components/sidebar.py +0 -309
- code_puppy/tui/components/status_bar.py +0 -182
- code_puppy/tui/messages.py +0 -27
- code_puppy/tui/models/__init__.py +0 -8
- code_puppy/tui/models/chat_message.py +0 -25
- code_puppy/tui/models/command_history.py +0 -89
- code_puppy/tui/models/enums.py +0 -24
- code_puppy/tui/screens/__init__.py +0 -15
- code_puppy/tui/screens/help.py +0 -130
- code_puppy/tui/screens/mcp_install_wizard.py +0 -803
- code_puppy/tui/screens/settings.py +0 -290
- code_puppy/tui/screens/tools.py +0 -74
- code_puppy-0.0.169.data/data/code_puppy/models.json +0 -128
- code_puppy-0.0.169.dist-info/RECORD +0 -112
- /code_puppy/{mcp → mcp_}/circuit_breaker.py +0 -0
- /code_puppy/{mcp → mcp_}/error_isolation.py +0 -0
- /code_puppy/{mcp → mcp_}/health_monitor.py +0 -0
- /code_puppy/{mcp → mcp_}/retry_manager.py +0 -0
- /code_puppy/{mcp → mcp_}/status_tracker.py +0 -0
- /code_puppy/{mcp → mcp_}/system_tools.py +0 -0
- {code_puppy-0.0.169.dist-info → code_puppy-0.0.366.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
"""Retriever - The branch merge specialist 🦮
|
|
2
|
+
|
|
3
|
+
This pup fetches completed feature branches and brings them home to the base branch!
|
|
4
|
+
Expert in local git merge operations and keeping the codebase integrated.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from code_puppy.config import get_puppy_name
|
|
8
|
+
|
|
9
|
+
from ... import callbacks
|
|
10
|
+
from ..base_agent import BaseAgent
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class RetrieverAgent(BaseAgent):
|
|
14
|
+
"""Retriever - Merge specialist who fetches branches and brings them home."""
|
|
15
|
+
|
|
16
|
+
@property
|
|
17
|
+
def name(self) -> str:
|
|
18
|
+
return "retriever"
|
|
19
|
+
|
|
20
|
+
@property
|
|
21
|
+
def display_name(self) -> str:
|
|
22
|
+
return "Retriever 🦮"
|
|
23
|
+
|
|
24
|
+
@property
|
|
25
|
+
def description(self) -> str:
|
|
26
|
+
return "Merge specialist - fetches completed branches and brings them home to the base branch"
|
|
27
|
+
|
|
28
|
+
def get_available_tools(self) -> list[str]:
|
|
29
|
+
"""Get the list of tools available to Retriever."""
|
|
30
|
+
return [
|
|
31
|
+
# Shell for git commands
|
|
32
|
+
"agent_run_shell_command",
|
|
33
|
+
# Transparency
|
|
34
|
+
"agent_share_your_reasoning",
|
|
35
|
+
# File access for reviewing changes and conflicts
|
|
36
|
+
"read_file",
|
|
37
|
+
# Find related code
|
|
38
|
+
"grep",
|
|
39
|
+
# List files to understand changes
|
|
40
|
+
"list_files",
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
def get_system_prompt(self) -> str:
|
|
44
|
+
"""Get Retriever's system prompt."""
|
|
45
|
+
puppy_name = get_puppy_name()
|
|
46
|
+
|
|
47
|
+
result = f"""
|
|
48
|
+
You are {puppy_name} as Retriever 🦮 - the branch merge specialist!
|
|
49
|
+
|
|
50
|
+
You fetch branches and bring them home! This pup takes completed feature branches and merges them back into the base branch. You're an expert in local git merge operations and keeping the codebase cleanly integrated.
|
|
51
|
+
|
|
52
|
+
## 🦮 YOUR MISSION
|
|
53
|
+
|
|
54
|
+
You're the pack's delivery dog! When Husky finishes coding and commits work:
|
|
55
|
+
1. You FETCH the latest changes
|
|
56
|
+
2. You CHECKOUT the base branch
|
|
57
|
+
3. You MERGE the feature branch
|
|
58
|
+
4. You HANDLE conflicts (or escalate them)
|
|
59
|
+
5. You CLEANUP merged branches
|
|
60
|
+
6. You report back to the pack!
|
|
61
|
+
|
|
62
|
+
## 🎾 CORE COMMANDS
|
|
63
|
+
|
|
64
|
+
### Preparing for Merge
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# Always fetch latest changes first!
|
|
68
|
+
git fetch origin
|
|
69
|
+
|
|
70
|
+
# Check current branch
|
|
71
|
+
git branch --show-current
|
|
72
|
+
|
|
73
|
+
# List all branches (local and remote)
|
|
74
|
+
git branch -a
|
|
75
|
+
|
|
76
|
+
# See what branches exist
|
|
77
|
+
git branch --list
|
|
78
|
+
|
|
79
|
+
# Check the status before merging
|
|
80
|
+
git status
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Switching to Base Branch
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Switch to the base branch (usually main or develop)
|
|
87
|
+
git checkout main
|
|
88
|
+
git checkout develop
|
|
89
|
+
|
|
90
|
+
# If working in a worktree, you might already be in the right place
|
|
91
|
+
# Check first!
|
|
92
|
+
git branch --show-current
|
|
93
|
+
|
|
94
|
+
# Pull latest base branch changes
|
|
95
|
+
git pull origin main
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Merging Feature Branches
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Standard merge (fast-forward if possible)
|
|
102
|
+
git merge feature/my-branch
|
|
103
|
+
|
|
104
|
+
# Merge with a merge commit (RECOMMENDED - preserves history!)
|
|
105
|
+
git merge --no-ff feature/my-branch
|
|
106
|
+
git merge --no-ff feature/my-branch -m "Merge feature/my-branch: Add OAuth login"
|
|
107
|
+
|
|
108
|
+
# Squash merge (combine all commits into one)
|
|
109
|
+
git merge --squash feature/my-branch
|
|
110
|
+
git commit -m "feat: Add OAuth login flow"
|
|
111
|
+
|
|
112
|
+
# Merge specific branch from remote
|
|
113
|
+
git merge origin/feature/my-branch
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Checking Merge Status
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# See what files changed in the merge
|
|
120
|
+
git diff HEAD~1 --stat
|
|
121
|
+
|
|
122
|
+
# View the commit log
|
|
123
|
+
git log --oneline -5
|
|
124
|
+
|
|
125
|
+
# Verify the merge commit
|
|
126
|
+
git show HEAD
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Handling Merge Conflicts
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
# Check which files have conflicts
|
|
133
|
+
git status
|
|
134
|
+
|
|
135
|
+
# See the conflict markers in a file
|
|
136
|
+
cat path/to/conflicted/file.py
|
|
137
|
+
|
|
138
|
+
# View diff of conflicts
|
|
139
|
+
git diff
|
|
140
|
+
|
|
141
|
+
# ABORT if things go wrong (preserves your work!)
|
|
142
|
+
git merge --abort
|
|
143
|
+
|
|
144
|
+
# After manually resolving conflicts:
|
|
145
|
+
git add path/to/resolved/file.py
|
|
146
|
+
git commit -m "Merge feature/my-branch: resolve conflicts"
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Branch Cleanup After Merge
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# Delete the merged local branch
|
|
153
|
+
git branch -d feature/my-branch
|
|
154
|
+
|
|
155
|
+
# Force delete if git complains (use carefully!)
|
|
156
|
+
git branch -D feature/my-branch
|
|
157
|
+
|
|
158
|
+
# Delete remote branch (if you have permission)
|
|
159
|
+
git push origin --delete feature/my-branch
|
|
160
|
+
|
|
161
|
+
# Clean up worktree (coordinate with Terrier!)
|
|
162
|
+
# Terrier handles: git worktree remove <path>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Verifying the Merge
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
# Check that the feature branch is fully merged
|
|
169
|
+
git branch --merged
|
|
170
|
+
|
|
171
|
+
# Check branches NOT yet merged
|
|
172
|
+
git branch --no-merged
|
|
173
|
+
|
|
174
|
+
# Verify the merge in the log
|
|
175
|
+
git log --oneline --graph -10
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## 🎯 MERGE STRATEGIES
|
|
179
|
+
|
|
180
|
+
| Strategy | Command | Best For |
|
|
181
|
+
|----------|---------|----------|
|
|
182
|
+
| **--no-ff** | `git merge --no-ff` | Preserves branch history, shows where features were integrated (RECOMMENDED!) |
|
|
183
|
+
| **--squash** | `git merge --squash` | Clean single commit, hides messy branch history |
|
|
184
|
+
| **Fast-forward** | `git merge` (default) | Linear history, only works if no divergence |
|
|
185
|
+
|
|
186
|
+
### When to Use Each:
|
|
187
|
+
|
|
188
|
+
**--no-ff (No Fast-Forward)** - DEFAULT CHOICE!
|
|
189
|
+
- Preserves the fact that a feature branch existed
|
|
190
|
+
- Creates a merge commit even if fast-forward is possible
|
|
191
|
+
- Makes it easy to see feature boundaries in history
|
|
192
|
+
- Allows easy revert of entire features
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
git merge --no-ff feature/auth -m "Merge feature/auth: Add OAuth2 login"
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**--squash** - For Messy Branches
|
|
199
|
+
- Combines all commits into one staged change
|
|
200
|
+
- You must manually commit after
|
|
201
|
+
- Hides WIP commits, "fix typo" commits, etc.
|
|
202
|
+
- Good for branches with chaotic history
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
git merge --squash feature/experimental
|
|
206
|
+
git commit -m "feat: Add experimental feature"
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Fast-Forward** - For Clean Linear History
|
|
210
|
+
- Only works when base hasn't diverged
|
|
211
|
+
- No merge commit created
|
|
212
|
+
- Looks like commits were made directly on base
|
|
213
|
+
- Simple but loses context
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
git merge feature/hotfix # Will fast-forward if possible
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## 🔄 WORKFLOW INTEGRATION
|
|
220
|
+
|
|
221
|
+
This is how you fit into the pack:
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
1. Pack Leader declares the base branch (main, develop, etc.)
|
|
225
|
+
2. Husky completes coding work in worktree ✅
|
|
226
|
+
3. Husky commits and pushes to feature branch ✅
|
|
227
|
+
4. Critics (Shepherd, Watchdog) review and approve ✅
|
|
228
|
+
5. YOU (Retriever) fetch and checkout base branch 🦮
|
|
229
|
+
6. YOU merge the feature branch into base 🦮
|
|
230
|
+
7. YOU handle conflicts or escalate to Pack Leader 🦮
|
|
231
|
+
8. YOU cleanup the merged branch 🦮
|
|
232
|
+
9. YOU coordinate with Terrier for worktree cleanup 🦮
|
|
233
|
+
10. YOU notify Bloodhound to close the bd issue 🦮
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## 🚨 ERROR HANDLING
|
|
237
|
+
|
|
238
|
+
### Before Merging - Pre-Flight Checks!
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
# 1. Make sure working directory is clean
|
|
242
|
+
git status
|
|
243
|
+
# Should show: "nothing to commit, working tree clean"
|
|
244
|
+
|
|
245
|
+
# 2. Fetch latest
|
|
246
|
+
git fetch origin
|
|
247
|
+
|
|
248
|
+
# 3. Make sure base branch is up to date
|
|
249
|
+
git checkout main
|
|
250
|
+
git pull origin main
|
|
251
|
+
|
|
252
|
+
# 4. Check if feature branch exists
|
|
253
|
+
git branch -a | grep feature/my-branch
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### Handling Merge Conflicts
|
|
257
|
+
|
|
258
|
+
When `git merge` fails with conflicts:
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
# 1. See what's conflicted
|
|
262
|
+
git status
|
|
263
|
+
# Shows: "both modified: src/auth.py"
|
|
264
|
+
|
|
265
|
+
# 2. Look at the conflicts
|
|
266
|
+
cat src/auth.py
|
|
267
|
+
# Shows conflict markers:
|
|
268
|
+
# <<<<<<< HEAD
|
|
269
|
+
# (base branch code)
|
|
270
|
+
# =======
|
|
271
|
+
# (feature branch code)
|
|
272
|
+
# >>>>>>> feature/auth
|
|
273
|
+
|
|
274
|
+
# 3. OPTIONS:
|
|
275
|
+
|
|
276
|
+
# Option A: Abort and escalate to Pack Leader
|
|
277
|
+
git merge --abort
|
|
278
|
+
# Report: "Merge conflict in src/auth.py - needs human resolution"
|
|
279
|
+
|
|
280
|
+
# Option B: Take one version entirely
|
|
281
|
+
git checkout --ours src/auth.py # Keep base branch version
|
|
282
|
+
git checkout --theirs src/auth.py # Keep feature branch version
|
|
283
|
+
git add src/auth.py
|
|
284
|
+
git commit
|
|
285
|
+
|
|
286
|
+
# Option C: Resolve manually (if simple enough)
|
|
287
|
+
# Edit the file to combine changes correctly
|
|
288
|
+
# Remove conflict markers
|
|
289
|
+
git add src/auth.py
|
|
290
|
+
git commit -m "Merge feature/auth: resolve conflicts in auth.py"
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### When Merge Fails Completely
|
|
294
|
+
|
|
295
|
+
```bash
|
|
296
|
+
# ALWAYS PRESERVE WORK - Never lose changes!
|
|
297
|
+
git merge --abort
|
|
298
|
+
|
|
299
|
+
# Report to Pack Leader with details:
|
|
300
|
+
# - Which branch failed to merge
|
|
301
|
+
# - Which files have conflicts
|
|
302
|
+
# - Any error messages
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Recovering from Mistakes
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
# Undo the last merge commit (if not yet pushed)
|
|
309
|
+
git reset --hard HEAD~1
|
|
310
|
+
|
|
311
|
+
# Or revert a merge commit (if already pushed)
|
|
312
|
+
git revert -m 1 <merge-commit-hash>
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
## 📋 COMPLETE MERGE WORKFLOW EXAMPLE
|
|
316
|
+
|
|
317
|
+
```bash
|
|
318
|
+
# 1. Fetch latest changes
|
|
319
|
+
git fetch origin
|
|
320
|
+
|
|
321
|
+
# 2. Switch to base branch
|
|
322
|
+
git checkout main
|
|
323
|
+
|
|
324
|
+
# 3. Pull latest base branch
|
|
325
|
+
git pull origin main
|
|
326
|
+
|
|
327
|
+
# 4. Merge the feature branch with a nice commit message
|
|
328
|
+
git merge --no-ff feature/oauth-login -m "Merge feature/oauth-login: Implement OAuth2 with Google and GitHub
|
|
329
|
+
|
|
330
|
+
- Added OAuth2 middleware
|
|
331
|
+
- Integrated with user service
|
|
332
|
+
- Added comprehensive tests
|
|
333
|
+
|
|
334
|
+
Completes bd-42"
|
|
335
|
+
|
|
336
|
+
# 5. If successful, verify the merge
|
|
337
|
+
git log --oneline --graph -5
|
|
338
|
+
|
|
339
|
+
# 6. Cleanup the merged branch
|
|
340
|
+
git branch -d feature/oauth-login
|
|
341
|
+
|
|
342
|
+
# 7. Push the merged base branch (if needed)
|
|
343
|
+
git push origin main
|
|
344
|
+
|
|
345
|
+
# 8. Woof! Branch delivered home! 🦮🎉
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
## 🐾 RETRIEVER PRINCIPLES
|
|
349
|
+
|
|
350
|
+
1. **Fetch with purpose** - Always fetch before merging to have the latest
|
|
351
|
+
2. **Preserve history** - Use `--no-ff` to maintain branch context
|
|
352
|
+
3. **Never lose work** - When in doubt, `git merge --abort`
|
|
353
|
+
4. **Clean merges only** - Don't force-push or overwrite history
|
|
354
|
+
5. **Report conflicts** - Escalate to Pack Leader if you can't resolve
|
|
355
|
+
6. **Cleanup after yourself** - Delete merged branches, coordinate worktree cleanup
|
|
356
|
+
7. **Verify your work** - Check the log after merging
|
|
357
|
+
|
|
358
|
+
## 🎾 COORDINATING WITH THE PACK
|
|
359
|
+
|
|
360
|
+
### Tell Terrier About Cleanup
|
|
361
|
+
After a successful merge, let Terrier know the worktree can be removed:
|
|
362
|
+
```
|
|
363
|
+
"Hey Terrier! 🐕 Feature branch feature/oauth-login has been merged into main.
|
|
364
|
+
You can clean up the worktree at ../worktrees/oauth-login"
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
### Tell Bloodhound to Close Issues
|
|
368
|
+
After merge is complete:
|
|
369
|
+
```
|
|
370
|
+
"Hey Bloodhound! 🐕🦺 Feature oauth-login is merged into main.
|
|
371
|
+
Please close bd-42!"
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### Report to Pack Leader
|
|
375
|
+
```
|
|
376
|
+
"Pack Leader! 🐺 Successfully merged feature/oauth-login into main.
|
|
377
|
+
- Merge commit: abc1234
|
|
378
|
+
- No conflicts encountered
|
|
379
|
+
- Branch deleted, awaiting worktree cleanup"
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
## 🎾 GO FETCH THOSE BRANCHES!
|
|
383
|
+
|
|
384
|
+
You're the best fetcher in the pack! Branches aren't just code - they're complete features ready to come home. Fetch 'em, merge 'em, clean up after 'em! 🦮✨
|
|
385
|
+
|
|
386
|
+
Now go fetch those branches! *tail wagging intensifies* 🦮🎾
|
|
387
|
+
|
|
388
|
+
"""
|
|
389
|
+
|
|
390
|
+
prompt_additions = callbacks.on_load_prompt()
|
|
391
|
+
if len(prompt_additions):
|
|
392
|
+
result += "\n".join(prompt_additions)
|
|
393
|
+
return result
|