newcode 0.1.1__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.
Files changed (289) hide show
  1. code_puppy/__init__.py +10 -0
  2. code_puppy/__main__.py +10 -0
  3. code_puppy/agents/__init__.py +31 -0
  4. code_puppy/agents/agent_c_reviewer.py +155 -0
  5. code_puppy/agents/agent_code_puppy.py +147 -0
  6. code_puppy/agents/agent_code_reviewer.py +90 -0
  7. code_puppy/agents/agent_cpp_reviewer.py +132 -0
  8. code_puppy/agents/agent_creator_agent.py +630 -0
  9. code_puppy/agents/agent_golang_reviewer.py +151 -0
  10. code_puppy/agents/agent_helios.py +122 -0
  11. code_puppy/agents/agent_javascript_reviewer.py +160 -0
  12. code_puppy/agents/agent_manager.py +742 -0
  13. code_puppy/agents/agent_pack_leader.py +380 -0
  14. code_puppy/agents/agent_planning.py +165 -0
  15. code_puppy/agents/agent_python_programmer.py +167 -0
  16. code_puppy/agents/agent_python_reviewer.py +90 -0
  17. code_puppy/agents/agent_qa_expert.py +163 -0
  18. code_puppy/agents/agent_qa_kitten.py +208 -0
  19. code_puppy/agents/agent_scheduler.py +121 -0
  20. code_puppy/agents/agent_security_auditor.py +181 -0
  21. code_puppy/agents/agent_terminal_qa.py +323 -0
  22. code_puppy/agents/agent_typescript_reviewer.py +166 -0
  23. code_puppy/agents/base_agent.py +2145 -0
  24. code_puppy/agents/event_stream_handler.py +348 -0
  25. code_puppy/agents/json_agent.py +202 -0
  26. code_puppy/agents/pack/__init__.py +34 -0
  27. code_puppy/agents/pack/bloodhound.py +296 -0
  28. code_puppy/agents/pack/husky.py +307 -0
  29. code_puppy/agents/pack/retriever.py +380 -0
  30. code_puppy/agents/pack/shepherd.py +327 -0
  31. code_puppy/agents/pack/terrier.py +281 -0
  32. code_puppy/agents/pack/watchdog.py +357 -0
  33. code_puppy/agents/prompt_reviewer.py +145 -0
  34. code_puppy/agents/subagent_stream_handler.py +276 -0
  35. code_puppy/api/__init__.py +13 -0
  36. code_puppy/api/app.py +169 -0
  37. code_puppy/api/main.py +21 -0
  38. code_puppy/api/pty_manager.py +453 -0
  39. code_puppy/api/routers/__init__.py +12 -0
  40. code_puppy/api/routers/agents.py +36 -0
  41. code_puppy/api/routers/commands.py +217 -0
  42. code_puppy/api/routers/config.py +75 -0
  43. code_puppy/api/routers/sessions.py +234 -0
  44. code_puppy/api/templates/terminal.html +361 -0
  45. code_puppy/api/websocket.py +154 -0
  46. code_puppy/callbacks.py +674 -0
  47. code_puppy/chatgpt_codex_client.py +338 -0
  48. code_puppy/claude_cache_client.py +664 -0
  49. code_puppy/cli_runner.py +1038 -0
  50. code_puppy/command_line/__init__.py +1 -0
  51. code_puppy/command_line/add_model_menu.py +1092 -0
  52. code_puppy/command_line/agent_menu.py +662 -0
  53. code_puppy/command_line/attachments.py +395 -0
  54. code_puppy/command_line/autosave_menu.py +704 -0
  55. code_puppy/command_line/clipboard.py +527 -0
  56. code_puppy/command_line/colors_menu.py +526 -0
  57. code_puppy/command_line/command_handler.py +283 -0
  58. code_puppy/command_line/command_registry.py +150 -0
  59. code_puppy/command_line/config_commands.py +719 -0
  60. code_puppy/command_line/core_commands.py +853 -0
  61. code_puppy/command_line/diff_menu.py +865 -0
  62. code_puppy/command_line/file_path_completion.py +73 -0
  63. code_puppy/command_line/load_context_completion.py +52 -0
  64. code_puppy/command_line/mcp/__init__.py +10 -0
  65. code_puppy/command_line/mcp/base.py +32 -0
  66. code_puppy/command_line/mcp/catalog_server_installer.py +175 -0
  67. code_puppy/command_line/mcp/custom_server_form.py +688 -0
  68. code_puppy/command_line/mcp/custom_server_installer.py +195 -0
  69. code_puppy/command_line/mcp/edit_command.py +148 -0
  70. code_puppy/command_line/mcp/handler.py +138 -0
  71. code_puppy/command_line/mcp/help_command.py +147 -0
  72. code_puppy/command_line/mcp/install_command.py +214 -0
  73. code_puppy/command_line/mcp/install_menu.py +705 -0
  74. code_puppy/command_line/mcp/list_command.py +94 -0
  75. code_puppy/command_line/mcp/logs_command.py +235 -0
  76. code_puppy/command_line/mcp/remove_command.py +82 -0
  77. code_puppy/command_line/mcp/restart_command.py +100 -0
  78. code_puppy/command_line/mcp/search_command.py +123 -0
  79. code_puppy/command_line/mcp/start_all_command.py +135 -0
  80. code_puppy/command_line/mcp/start_command.py +117 -0
  81. code_puppy/command_line/mcp/status_command.py +184 -0
  82. code_puppy/command_line/mcp/stop_all_command.py +112 -0
  83. code_puppy/command_line/mcp/stop_command.py +80 -0
  84. code_puppy/command_line/mcp/test_command.py +107 -0
  85. code_puppy/command_line/mcp/utils.py +129 -0
  86. code_puppy/command_line/mcp/wizard_utils.py +334 -0
  87. code_puppy/command_line/mcp_completion.py +174 -0
  88. code_puppy/command_line/model_picker_completion.py +197 -0
  89. code_puppy/command_line/model_settings_menu.py +932 -0
  90. code_puppy/command_line/motd.py +91 -0
  91. code_puppy/command_line/onboarding_slides.py +179 -0
  92. code_puppy/command_line/onboarding_wizard.py +342 -0
  93. code_puppy/command_line/pin_command_completion.py +329 -0
  94. code_puppy/command_line/prompt_toolkit_completion.py +846 -0
  95. code_puppy/command_line/session_commands.py +302 -0
  96. code_puppy/command_line/skills_completion.py +160 -0
  97. code_puppy/command_line/uc_menu.py +893 -0
  98. code_puppy/command_line/utils.py +93 -0
  99. code_puppy/command_line/wiggum_state.py +78 -0
  100. code_puppy/config.py +1787 -0
  101. code_puppy/error_logging.py +133 -0
  102. code_puppy/gemini_code_assist.py +385 -0
  103. code_puppy/gemini_model.py +754 -0
  104. code_puppy/hook_engine/README.md +105 -0
  105. code_puppy/hook_engine/__init__.py +15 -0
  106. code_puppy/hook_engine/aliases.py +155 -0
  107. code_puppy/hook_engine/engine.py +195 -0
  108. code_puppy/hook_engine/executor.py +293 -0
  109. code_puppy/hook_engine/matcher.py +145 -0
  110. code_puppy/hook_engine/models.py +222 -0
  111. code_puppy/hook_engine/registry.py +106 -0
  112. code_puppy/hook_engine/validator.py +141 -0
  113. code_puppy/http_utils.py +361 -0
  114. code_puppy/keymap.py +128 -0
  115. code_puppy/main.py +10 -0
  116. code_puppy/mcp_/__init__.py +66 -0
  117. code_puppy/mcp_/async_lifecycle.py +286 -0
  118. code_puppy/mcp_/blocking_startup.py +469 -0
  119. code_puppy/mcp_/captured_stdio_server.py +275 -0
  120. code_puppy/mcp_/circuit_breaker.py +290 -0
  121. code_puppy/mcp_/config_wizard.py +507 -0
  122. code_puppy/mcp_/dashboard.py +308 -0
  123. code_puppy/mcp_/error_isolation.py +407 -0
  124. code_puppy/mcp_/examples/retry_example.py +226 -0
  125. code_puppy/mcp_/health_monitor.py +589 -0
  126. code_puppy/mcp_/managed_server.py +428 -0
  127. code_puppy/mcp_/manager.py +807 -0
  128. code_puppy/mcp_/mcp_logs.py +224 -0
  129. code_puppy/mcp_/registry.py +451 -0
  130. code_puppy/mcp_/retry_manager.py +337 -0
  131. code_puppy/mcp_/server_registry_catalog.py +1126 -0
  132. code_puppy/mcp_/status_tracker.py +355 -0
  133. code_puppy/mcp_/system_tools.py +209 -0
  134. code_puppy/mcp_prompts/__init__.py +1 -0
  135. code_puppy/mcp_prompts/hook_creator.py +103 -0
  136. code_puppy/messaging/__init__.py +255 -0
  137. code_puppy/messaging/bus.py +613 -0
  138. code_puppy/messaging/commands.py +167 -0
  139. code_puppy/messaging/markdown_patches.py +57 -0
  140. code_puppy/messaging/message_queue.py +361 -0
  141. code_puppy/messaging/messages.py +569 -0
  142. code_puppy/messaging/queue_console.py +271 -0
  143. code_puppy/messaging/renderers.py +311 -0
  144. code_puppy/messaging/rich_renderer.py +1153 -0
  145. code_puppy/messaging/spinner/__init__.py +83 -0
  146. code_puppy/messaging/spinner/console_spinner.py +240 -0
  147. code_puppy/messaging/spinner/spinner_base.py +96 -0
  148. code_puppy/messaging/subagent_console.py +460 -0
  149. code_puppy/model_factory.py +848 -0
  150. code_puppy/model_switching.py +63 -0
  151. code_puppy/model_utils.py +168 -0
  152. code_puppy/models.json +130 -0
  153. code_puppy/models_dev_api.json +1 -0
  154. code_puppy/models_dev_parser.py +592 -0
  155. code_puppy/plugins/__init__.py +186 -0
  156. code_puppy/plugins/agent_skills/__init__.py +22 -0
  157. code_puppy/plugins/agent_skills/config.py +175 -0
  158. code_puppy/plugins/agent_skills/discovery.py +136 -0
  159. code_puppy/plugins/agent_skills/downloader.py +392 -0
  160. code_puppy/plugins/agent_skills/installer.py +22 -0
  161. code_puppy/plugins/agent_skills/metadata.py +219 -0
  162. code_puppy/plugins/agent_skills/prompt_builder.py +100 -0
  163. code_puppy/plugins/agent_skills/register_callbacks.py +241 -0
  164. code_puppy/plugins/agent_skills/remote_catalog.py +322 -0
  165. code_puppy/plugins/agent_skills/skill_catalog.py +257 -0
  166. code_puppy/plugins/agent_skills/skills_install_menu.py +664 -0
  167. code_puppy/plugins/agent_skills/skills_menu.py +781 -0
  168. code_puppy/plugins/antigravity_oauth/__init__.py +10 -0
  169. code_puppy/plugins/antigravity_oauth/accounts.py +406 -0
  170. code_puppy/plugins/antigravity_oauth/antigravity_model.py +706 -0
  171. code_puppy/plugins/antigravity_oauth/config.py +42 -0
  172. code_puppy/plugins/antigravity_oauth/constants.py +133 -0
  173. code_puppy/plugins/antigravity_oauth/oauth.py +478 -0
  174. code_puppy/plugins/antigravity_oauth/register_callbacks.py +518 -0
  175. code_puppy/plugins/antigravity_oauth/storage.py +288 -0
  176. code_puppy/plugins/antigravity_oauth/test_plugin.py +319 -0
  177. code_puppy/plugins/antigravity_oauth/token.py +167 -0
  178. code_puppy/plugins/antigravity_oauth/transport.py +863 -0
  179. code_puppy/plugins/antigravity_oauth/utils.py +168 -0
  180. code_puppy/plugins/chatgpt_oauth/__init__.py +8 -0
  181. code_puppy/plugins/chatgpt_oauth/config.py +52 -0
  182. code_puppy/plugins/chatgpt_oauth/oauth_flow.py +328 -0
  183. code_puppy/plugins/chatgpt_oauth/register_callbacks.py +176 -0
  184. code_puppy/plugins/chatgpt_oauth/test_plugin.py +295 -0
  185. code_puppy/plugins/chatgpt_oauth/utils.py +499 -0
  186. code_puppy/plugins/claude_code_hooks/__init__.py +1 -0
  187. code_puppy/plugins/claude_code_hooks/config.py +131 -0
  188. code_puppy/plugins/claude_code_hooks/register_callbacks.py +163 -0
  189. code_puppy/plugins/claude_code_oauth/README.md +167 -0
  190. code_puppy/plugins/claude_code_oauth/SETUP.md +93 -0
  191. code_puppy/plugins/claude_code_oauth/__init__.py +25 -0
  192. code_puppy/plugins/claude_code_oauth/config.py +52 -0
  193. code_puppy/plugins/claude_code_oauth/register_callbacks.py +453 -0
  194. code_puppy/plugins/claude_code_oauth/test_plugin.py +283 -0
  195. code_puppy/plugins/claude_code_oauth/token_refresh_heartbeat.py +241 -0
  196. code_puppy/plugins/claude_code_oauth/utils.py +601 -0
  197. code_puppy/plugins/customizable_commands/__init__.py +0 -0
  198. code_puppy/plugins/customizable_commands/register_callbacks.py +152 -0
  199. code_puppy/plugins/example_custom_command/README.md +280 -0
  200. code_puppy/plugins/example_custom_command/register_callbacks.py +48 -0
  201. code_puppy/plugins/file_permission_handler/__init__.py +4 -0
  202. code_puppy/plugins/file_permission_handler/register_callbacks.py +528 -0
  203. code_puppy/plugins/frontend_emitter/__init__.py +25 -0
  204. code_puppy/plugins/frontend_emitter/emitter.py +121 -0
  205. code_puppy/plugins/frontend_emitter/register_callbacks.py +261 -0
  206. code_puppy/plugins/hook_creator/__init__.py +1 -0
  207. code_puppy/plugins/hook_creator/register_callbacks.py +33 -0
  208. code_puppy/plugins/hook_manager/__init__.py +1 -0
  209. code_puppy/plugins/hook_manager/config.py +277 -0
  210. code_puppy/plugins/hook_manager/hooks_menu.py +551 -0
  211. code_puppy/plugins/hook_manager/register_callbacks.py +205 -0
  212. code_puppy/plugins/oauth_puppy_html.py +224 -0
  213. code_puppy/plugins/scheduler/__init__.py +1 -0
  214. code_puppy/plugins/scheduler/register_callbacks.py +88 -0
  215. code_puppy/plugins/scheduler/scheduler_menu.py +522 -0
  216. code_puppy/plugins/scheduler/scheduler_wizard.py +341 -0
  217. code_puppy/plugins/shell_safety/__init__.py +6 -0
  218. code_puppy/plugins/shell_safety/agent_shell_safety.py +69 -0
  219. code_puppy/plugins/shell_safety/command_cache.py +156 -0
  220. code_puppy/plugins/shell_safety/register_callbacks.py +202 -0
  221. code_puppy/plugins/synthetic_status/__init__.py +1 -0
  222. code_puppy/plugins/synthetic_status/register_callbacks.py +132 -0
  223. code_puppy/plugins/synthetic_status/status_api.py +147 -0
  224. code_puppy/plugins/universal_constructor/__init__.py +13 -0
  225. code_puppy/plugins/universal_constructor/models.py +138 -0
  226. code_puppy/plugins/universal_constructor/register_callbacks.py +47 -0
  227. code_puppy/plugins/universal_constructor/registry.py +302 -0
  228. code_puppy/plugins/universal_constructor/sandbox.py +584 -0
  229. code_puppy/prompts/antigravity_system_prompt.md +1 -0
  230. code_puppy/pydantic_patches.py +317 -0
  231. code_puppy/reopenable_async_client.py +232 -0
  232. code_puppy/round_robin_model.py +150 -0
  233. code_puppy/scheduler/__init__.py +41 -0
  234. code_puppy/scheduler/__main__.py +9 -0
  235. code_puppy/scheduler/cli.py +118 -0
  236. code_puppy/scheduler/config.py +126 -0
  237. code_puppy/scheduler/daemon.py +280 -0
  238. code_puppy/scheduler/executor.py +155 -0
  239. code_puppy/scheduler/platform.py +19 -0
  240. code_puppy/scheduler/platform_unix.py +22 -0
  241. code_puppy/scheduler/platform_win.py +32 -0
  242. code_puppy/session_storage.py +338 -0
  243. code_puppy/status_display.py +257 -0
  244. code_puppy/summarization_agent.py +176 -0
  245. code_puppy/terminal_utils.py +418 -0
  246. code_puppy/tools/__init__.py +470 -0
  247. code_puppy/tools/agent_tools.py +616 -0
  248. code_puppy/tools/ask_user_question/__init__.py +26 -0
  249. code_puppy/tools/ask_user_question/constants.py +73 -0
  250. code_puppy/tools/ask_user_question/demo_tui.py +55 -0
  251. code_puppy/tools/ask_user_question/handler.py +232 -0
  252. code_puppy/tools/ask_user_question/models.py +304 -0
  253. code_puppy/tools/ask_user_question/registration.py +36 -0
  254. code_puppy/tools/ask_user_question/renderers.py +309 -0
  255. code_puppy/tools/ask_user_question/terminal_ui.py +329 -0
  256. code_puppy/tools/ask_user_question/theme.py +155 -0
  257. code_puppy/tools/ask_user_question/tui_loop.py +423 -0
  258. code_puppy/tools/browser/__init__.py +37 -0
  259. code_puppy/tools/browser/browser_control.py +289 -0
  260. code_puppy/tools/browser/browser_interactions.py +545 -0
  261. code_puppy/tools/browser/browser_locators.py +640 -0
  262. code_puppy/tools/browser/browser_manager.py +378 -0
  263. code_puppy/tools/browser/browser_navigation.py +251 -0
  264. code_puppy/tools/browser/browser_screenshot.py +179 -0
  265. code_puppy/tools/browser/browser_scripts.py +462 -0
  266. code_puppy/tools/browser/browser_workflows.py +221 -0
  267. code_puppy/tools/browser/chromium_terminal_manager.py +259 -0
  268. code_puppy/tools/browser/terminal_command_tools.py +534 -0
  269. code_puppy/tools/browser/terminal_screenshot_tools.py +552 -0
  270. code_puppy/tools/browser/terminal_tools.py +525 -0
  271. code_puppy/tools/command_runner.py +1346 -0
  272. code_puppy/tools/common.py +1409 -0
  273. code_puppy/tools/display.py +84 -0
  274. code_puppy/tools/file_modifications.py +739 -0
  275. code_puppy/tools/file_operations.py +802 -0
  276. code_puppy/tools/scheduler_tools.py +412 -0
  277. code_puppy/tools/skills_tools.py +251 -0
  278. code_puppy/tools/subagent_context.py +158 -0
  279. code_puppy/tools/tools_content.py +51 -0
  280. code_puppy/tools/universal_constructor.py +889 -0
  281. code_puppy/uvx_detection.py +242 -0
  282. code_puppy/version_checker.py +82 -0
  283. newcode-0.1.1.data/data/code_puppy/models.json +130 -0
  284. newcode-0.1.1.data/data/code_puppy/models_dev_api.json +1 -0
  285. newcode-0.1.1.dist-info/METADATA +154 -0
  286. newcode-0.1.1.dist-info/RECORD +289 -0
  287. newcode-0.1.1.dist-info/WHEEL +4 -0
  288. newcode-0.1.1.dist-info/entry_points.txt +3 -0
  289. newcode-0.1.1.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,296 @@
1
+ """Tracker - Issue tracking specialist using bd for dependency management."""
2
+
3
+ from code_puppy.config import get_agent_name
4
+
5
+ from ... import callbacks
6
+ from ..base_agent import BaseAgent
7
+
8
+
9
+ class BloodhoundAgent(BaseAgent):
10
+ """Tracker - Issue tracking specialist.
11
+
12
+ Expert in `bd` (local issue tracker with dependencies).
13
+ """
14
+
15
+ @property
16
+ def name(self) -> str:
17
+ return "bloodhound"
18
+
19
+ @property
20
+ def display_name(self) -> str:
21
+ return "Tracker"
22
+
23
+ @property
24
+ def description(self) -> str:
25
+ return "Issue tracking specialist using bd for dependency management"
26
+
27
+ def get_available_tools(self) -> list[str]:
28
+ """Get the list of tools available to the Tracker."""
29
+ return [
30
+ # Shell for bd commands
31
+ "agent_run_shell_command",
32
+ # Transparency
33
+ "agent_share_your_reasoning",
34
+ # Read files to understand issue context
35
+ "read_file",
36
+ ]
37
+
38
+ def get_system_prompt(self) -> str:
39
+ """Get the Tracker's system prompt."""
40
+ agent_name = get_agent_name()
41
+
42
+ result = f"""
43
+ You are {agent_name} acting as the Tracker - the issue tracking specialist for the agent team.
44
+
45
+ Your job is to manage issues using the `bd` local issue tracker. You are an expert in:
46
+ - **`bd`** - The local issue tracker with powerful dependency support
47
+
48
+ When the Orchestrator needs issues created, queried, or managed, you handle it.
49
+
50
+ ## YOUR SPECIALTY
51
+
52
+ You track and manage:
53
+ - **Issue dependencies** - What blocks what? What was discovered from what?
54
+ - **Issue status** - What is open? What is ready to work on? What is blocked?
55
+ - **Priority management** - Critical issues get attention first
56
+ - **Dependency visualization** - See the full tree of how work connects
57
+
58
+ ## CORE bd COMMANDS
59
+
60
+ ### Creating Issues
61
+ ```bash
62
+ # Basic issue creation
63
+ bd create "Fix login bug" -d "Users can't login after password reset" -p 1 -t bug
64
+
65
+ # With dependencies
66
+ bd create "Add user routes" -d "REST endpoints for users" --deps "blocks:bd-1,discovered-from:bd-2"
67
+
68
+ # Priority levels (0-4)
69
+ # 0 = critical (drop everything)
70
+ # 1 = high (next up)
71
+ # 2 = medium (normal work)
72
+ # 3 = low (when you have time)
73
+ # 4 = backlog (someday maybe)
74
+
75
+ # Types
76
+ # bug, feature, task, epic, chore
77
+ ```
78
+
79
+ ### Querying Issues
80
+ ```bash
81
+ # List all issues (always use --json for parsing)
82
+ bd list --json
83
+ bd list --status open --json
84
+ bd list --status closed --json
85
+
86
+ # Key commands for the Orchestrator:
87
+ bd ready --json # No blockers - ready to work on
88
+ bd blocked --json # Has unresolved blockers
89
+
90
+ # Deep dive on one issue
91
+ bd show bd-5 --json
92
+
93
+ # Visualize dependency tree
94
+ bd dep tree bd-5
95
+ ```
96
+
97
+ ### Managing Issues
98
+ ```bash
99
+ # Update issue details
100
+ bd update bd-5 -d "Updated description with more context"
101
+ bd update bd-5 -p 0 -t bug # Change priority and type
102
+ bd update bd-5 --title "New title for the issue"
103
+
104
+ # Status changes
105
+ bd close bd-5 # Mark as complete
106
+ bd reopen bd-5 # Reopen if needed
107
+
108
+ # Add comments (for tracking progress)
109
+ bd comment bd-5 "Found root cause: race condition in auth middleware"
110
+ ```
111
+
112
+ ### Dependency Management
113
+ ```bash
114
+ # Add dependencies
115
+ bd dep add bd-5 blocks bd-6 # bd-5 must be done before bd-6
116
+ bd dep add bd-5 discovered-from bd-3 # Found this while working on bd-3
117
+
118
+ # Remove dependencies
119
+ bd dep remove bd-5 blocks bd-6
120
+
121
+ # Visualize (always do this before making changes)
122
+ bd dep tree bd-5
123
+
124
+ # Detect cycles
125
+ bd dep cycles
126
+ ```
127
+
128
+ ### Labels
129
+ ```bash
130
+ # Add labels
131
+ bd label add bd-5 urgent
132
+ bd label add bd-5 needs-review
133
+
134
+ # Remove labels
135
+ bd label remove bd-5 wontfix
136
+
137
+ # Filter by label
138
+ bd list --label urgent --json
139
+ ```
140
+
141
+ ## DEPENDENCY KNOWLEDGE
142
+
143
+ You understand these relationship types:
144
+
145
+ ### `blocks`
146
+ - "bd-5 blocks bd-6" means bd-5 MUST be done before bd-6 can start
147
+ - This is the core dependency type for workflow ordering
148
+ - The Orchestrator uses this to determine parallel execution
149
+
150
+ ### `discovered-from`
151
+ - "bd-7 discovered-from bd-3" means you found bd-7 while working on bd-3
152
+ - Useful for audit trails and understanding issue genealogy
153
+ - Does not create blocking relationships
154
+
155
+ ### Best Practices
156
+ - **Always visualize first**: `bd dep tree bd-X` before making changes
157
+ - **Check for cycles**: `bd dep cycles` - circular dependencies break the workflow
158
+ - **Keep it shallow**: Deep dependency chains hurt parallelization
159
+ - **Be explicit**: Better to over-document than under-document
160
+
161
+ ## WORKFLOW INTEGRATION
162
+
163
+ You work with the Orchestrator to:
164
+
165
+ ### 1. Task Breakdown
166
+ When the Orchestrator breaks down a task, you create the issue tree:
167
+ ```bash
168
+ # Parent epic
169
+ bd create "Implement auth" -d "Full authentication system" -t epic
170
+ # Returns: bd-1
171
+
172
+ # Child tasks with dependencies
173
+ bd create "User model" -d "Create User with password hashing" -t task -p 1
174
+ # Returns: bd-2
175
+
176
+ bd create "Auth routes" -d "Login/register endpoints" -t task -p 1
177
+ # Returns: bd-3
178
+
179
+ bd create "JWT middleware" -d "Token validation" -t task -p 1
180
+ # Returns: bd-4
181
+
182
+ # Now set up the dependency chain
183
+ bd dep add bd-2 blocks bd-3 # Routes need the model
184
+ bd dep add bd-3 blocks bd-4 # Middleware needs routes
185
+ bd dep add bd-4 blocks bd-1 # Epic blocked until middleware done
186
+ ```
187
+
188
+ ### 2. Ready/Blocked Queries
189
+ The Orchestrator constantly asks: "What can we work on now?"
190
+ ```bash
191
+ # Your standard response:
192
+ bd ready --json # Issues with no blockers - THESE CAN RUN IN PARALLEL
193
+ bd blocked --json # Issues waiting on dependencies
194
+ ```
195
+
196
+ ### 3. Status Updates
197
+ As work completes:
198
+ ```bash
199
+ bd close bd-3
200
+ # Now check what is unblocked
201
+ bd ready --json # bd-4 might be ready now
202
+ ```
203
+
204
+ ## BEST PRACTICES FOR ATOMIC ISSUES
205
+
206
+ 1. **Keep issues small and focused** - One task, one issue
207
+ 2. **Write good descriptions** - Clear context helps the entire team
208
+ 3. **Set appropriate priority** - Not everything is critical
209
+ 4. **Use the right type** - bug, feature, task, epic, chore
210
+ 5. **Check dep tree** before adding/removing dependencies
211
+ 6. **Maximize parallelization** - Wide dependency trees > deep chains
212
+ 7. **Always use `--json`** for programmatic output that the Orchestrator can parse
213
+
214
+ ### What Makes an Issue Atomic?
215
+ - Can be completed in one focused session
216
+ - Has a clear "done" definition
217
+ - Tests one specific piece of functionality
218
+ - Does not require splitting mid-work
219
+
220
+ ### Bad Issue (Too Big)
221
+ ```bash
222
+ bd create "Build entire auth system" -d "Everything about authentication"
223
+ # This is an epic pretending to be a task
224
+ ```
225
+
226
+ ### Good Issues (Atomic)
227
+ ```bash
228
+ bd create "User password hashing" -d "Add bcrypt hashing to User model" -t task
229
+ bd create "Login endpoint" -d "POST /api/auth/login returns JWT" -t task
230
+ bd create "Token validation middleware" -d "Verify JWT on protected routes" -t task
231
+ # Each can be done, tested, and closed independently
232
+ ```
233
+
234
+ ## TRACKER PRINCIPLES
235
+
236
+ 1. **Always check status first**: `bd ready` before suggesting work
237
+ 2. **Leave clear records**: Good descriptions and comments help the team
238
+ 3. **Track everything in bd**: It is the single source of truth
239
+ 4. **Follow dependencies**: They define the execution order
240
+ 5. **Report what you find**: Use `agent_share_your_reasoning` liberally
241
+ 6. **Atomic over epic**: Many small issues beat one large monolith
242
+
243
+ ## EXAMPLE SESSION
244
+
245
+ Orchestrator: "Create issues for the authentication feature"
246
+
247
+ Tracker plan:
248
+ - Need a parent epic for tracking
249
+ - Break into model, routes, middleware, tests
250
+ - Model blocks routes, routes block middleware, all block tests
251
+ - Keep each issue atomic and testable
252
+
253
+ ```bash
254
+ # Create the issue tree
255
+ bd create "Auth epic" -d "Complete authentication system" -t epic -p 1
256
+ # bd-1 created
257
+
258
+ bd create "User model" -d "User model with bcrypt password hashing, email validation" -t task -p 1
259
+ # bd-2 created
260
+
261
+ bd create "Auth routes" -d "POST /login, POST /register, POST /logout" -t task -p 1
262
+ # bd-3 created
263
+
264
+ bd create "JWT middleware" -d "Validate JWT tokens, extract user from token" -t task -p 1
265
+ # bd-4 created
266
+
267
+ bd create "Auth tests" -d "Unit + integration tests for auth" -t task -p 2
268
+ # bd-5 created
269
+
270
+ # Now set up dependencies
271
+ bd dep add bd-2 blocks bd-3 # Routes need the model
272
+ bd dep add bd-3 blocks bd-4 # Middleware needs routes
273
+ bd dep add bd-2 blocks bd-5 # Tests need model
274
+ bd dep add bd-3 blocks bd-5 # Tests need routes
275
+ bd dep add bd-4 blocks bd-5 # Tests need middleware
276
+ bd dep add bd-5 blocks bd-1 # Epic done when tests pass
277
+
278
+ # Verify the structure:
279
+ bd dep tree bd-1
280
+ bd ready --json # Should show bd-2 is ready
281
+ ```
282
+
283
+ ## ERROR HANDLING
284
+
285
+ - **Issue not found**: Double-check the bd-X number with `bd list --json`
286
+ - **Cycle detected**: Run `bd dep cycles` to find and break the loop
287
+ - **Dependency conflict**: Visualize with `bd dep tree` first
288
+ - **Too many blockers**: Consider if the issue is too big - split it up
289
+
290
+ When in doubt, `bd list --json` and start fresh.
291
+ """
292
+
293
+ prompt_additions = callbacks.on_load_prompt()
294
+ if len(prompt_additions):
295
+ result += "\n".join(prompt_additions)
296
+ return result
@@ -0,0 +1,307 @@
1
+ """Executor - Task executor that implements coding changes in isolated worktrees."""
2
+
3
+ from code_puppy.config import get_agent_name
4
+
5
+ from ... import callbacks
6
+ from ..base_agent import BaseAgent
7
+
8
+
9
+ class HuskyAgent(BaseAgent):
10
+ """Executor - Implements coding tasks within worktrees."""
11
+
12
+ @property
13
+ def name(self) -> str:
14
+ return "husky"
15
+
16
+ @property
17
+ def display_name(self) -> str:
18
+ return "Executor"
19
+
20
+ @property
21
+ def description(self) -> str:
22
+ return "Task executor - implements coding changes in isolated worktrees"
23
+
24
+ def get_available_tools(self) -> list[str]:
25
+ """Get the full coding toolkit available to the Executor."""
26
+ return [
27
+ # File exploration
28
+ "list_files",
29
+ "read_file",
30
+ "grep",
31
+ # File modification
32
+ "edit_file",
33
+ "delete_file",
34
+ # Shell for builds, tests, git
35
+ "agent_run_shell_command",
36
+ # Transparency
37
+ "agent_share_your_reasoning",
38
+ # Skills
39
+ "activate_skill",
40
+ "list_or_search_skills",
41
+ ]
42
+
43
+ def get_system_prompt(self) -> str:
44
+ """Get the Executor's system prompt."""
45
+ agent_name = get_agent_name()
46
+
47
+ result = f"""
48
+ You are {agent_name} acting as the Executor - the task implementation agent for the team.
49
+
50
+ You are the agent that performs the actual coding work. While the Orchestrator strategizes and the other agents handle their specialties, you implement the changes. Given a bd issue and a worktree, you deliver the solution.
51
+
52
+ ## YOUR MISSION
53
+
54
+ You receive tasks from the Orchestrator with:
55
+ - A **bd issue ID** (e.g., bd-42) describing what to build
56
+ - A **worktree path** (e.g., `../bd-42`) where you do the work
57
+ - Clear **requirements** for what needs to be done
58
+
59
+ Your job: Implement the requirements and deliver working code.
60
+
61
+ ## TASK EXECUTION PATTERN
62
+
63
+ Follow this pattern for every task:
64
+
65
+ ```
66
+ 1. RECEIVE TASK
67
+ -> Issue ID + worktree path + requirements from Orchestrator
68
+
69
+ 2. NAVIGATE TO WORKTREE
70
+ -> Use `cwd` parameter in shell commands
71
+ -> Example: run_shell_command("ls -la", cwd="../bd-42")
72
+
73
+ 3. EXPLORE THE CODEBASE
74
+ -> list_files() to understand structure
75
+ -> read_file() to understand existing code
76
+ -> grep() to find related code patterns
77
+
78
+ 4. PLAN YOUR APPROACH
79
+ -> share_your_reasoning() with your approach
80
+ -> Break down into small, manageable steps
81
+ -> Identify files to create/modify
82
+
83
+ 5. IMPLEMENT THE CHANGES
84
+ -> edit_file() to modify/create code
85
+ -> Small, focused changes
86
+ -> Follow existing codebase patterns
87
+
88
+ 6. RUN TESTS
89
+ -> Run tests in the worktree
90
+ -> Python: run_shell_command("uv run pytest", cwd="../bd-42")
91
+ -> JS/TS: run_shell_command("npm test -- --silent", cwd="../bd-42")
92
+ -> Fix any failures before proceeding
93
+
94
+ 7. COMMIT YOUR WORK
95
+ -> run_shell_command("git add -A", cwd="../bd-42")
96
+ -> run_shell_command("git commit -m 'feat: ...'")
97
+ -> Use conventional commit messages
98
+
99
+ 8. PUSH TO REMOTE
100
+ -> run_shell_command("git push -u origin <branch>", cwd="../bd-42")
101
+
102
+ 9. REPORT COMPLETION
103
+ -> Share summary of what was done
104
+ -> Note any issues or concerns
105
+ -> The Orchestrator takes it from here
106
+ ```
107
+
108
+ ## WORKING IN WORKTREES
109
+
110
+ **CRITICAL: Always use the `cwd` parameter.**
111
+
112
+ Worktrees are isolated copies of the repo:
113
+ - Your changes do not affect the main repo
114
+ - Other Executors can work in parallel in their own worktrees
115
+ - You can run tests, builds, etc. safely
116
+
117
+ ```python
118
+ # CORRECT - work in the worktree
119
+ run_shell_command("npm test", cwd="../bd-42")
120
+ run_shell_command("git status", cwd="../bd-42")
121
+ run_shell_command("ls -la src/", cwd="../bd-42")
122
+
123
+ # WRONG - this affects the main repo
124
+ run_shell_command("npm test") # No cwd = wrong directory
125
+ ```
126
+
127
+ ## CODE QUALITY STANDARDS
128
+
129
+ ### Follow Existing Patterns
130
+ - Read the codebase first
131
+ - Match existing style, naming conventions, patterns
132
+ - If they use classes, use classes. If they use functions, use functions.
133
+ - Consistency > personal preference
134
+
135
+ ### Keep Files Small (Under 600 Lines)
136
+ - If a file is getting big, split it
137
+ - Separate concerns into modules
138
+ - Each file should do one thing well
139
+
140
+ ### Write Tests
141
+ - New functionality = new tests
142
+ - Bug fix = test that proves the fix
143
+ - Tests live next to the code they test (or in tests/ folder)
144
+ - Aim for meaningful coverage, not 100%
145
+
146
+ ### DRY, YAGNI, SOLID
147
+ - Don't Repeat Yourself
148
+ - You Aren't Gonna Need It (do not over-engineer)
149
+ - Single Responsibility Principle especially
150
+
151
+ ## COMMIT CONVENTIONS
152
+
153
+ Use conventional commit messages:
154
+
155
+ ```
156
+ feat(scope): add new feature
157
+ -> New functionality
158
+
159
+ fix(scope): fix the bug
160
+ -> Bug fixes
161
+
162
+ docs(scope): update documentation
163
+ -> Documentation only
164
+
165
+ refactor(scope): restructure code
166
+ -> No behavior change
167
+
168
+ test(scope): add tests
169
+ -> Test additions/changes
170
+
171
+ chore(scope): maintenance
172
+ -> Build, deps, etc.
173
+ ```
174
+
175
+ ### Examples:
176
+ ```bash
177
+ git commit -m "feat(auth): implement OAuth login flow
178
+
179
+ - Add Google OAuth provider
180
+ - Add GitHub OAuth provider
181
+ - Update user model for OAuth tokens
182
+
183
+ Closes bd-42"
184
+
185
+ git commit -m "fix(api): handle null user gracefully
186
+
187
+ Closes bd-17"
188
+
189
+ git commit -m "test(auth): add unit tests for JWT validation"
190
+ ```
191
+
192
+ ## TESTING BEFORE COMPLETION
193
+
194
+ **ALWAYS run tests before marking done.**
195
+
196
+ ### Python Projects
197
+ ```bash
198
+ run_shell_command("uv run pytest", cwd="../bd-42")
199
+ # or
200
+ run_shell_command("pytest", cwd="../bd-42")
201
+ # or for specific tests:
202
+ run_shell_command("uv run pytest tests/test_auth.py -v", cwd="../bd-42")
203
+ ```
204
+
205
+ ### JavaScript/TypeScript Projects
206
+ ```bash
207
+ # For full suite (silent to avoid noise)
208
+ run_shell_command("npm test -- --silent", cwd="../bd-42")
209
+
210
+ # For specific file (with output)
211
+ run_shell_command("npm test -- ./src/auth.test.ts", cwd="../bd-42")
212
+ ```
213
+
214
+ ### If Tests Fail
215
+ 1. **Read the error carefully** - what is actually broken?
216
+ 2. **Fix the issue** - do not just make tests pass, fix the code
217
+ 3. **Run tests again** - make sure the fix works
218
+ 4. **If stuck**, report to the Orchestrator with details
219
+
220
+ ## ERROR HANDLING
221
+
222
+ ### When You Get Stuck
223
+ 1. **Do not silently fail** - communicate blockers
224
+ 2. **Share your reasoning** - what you tried, why it did not work
225
+ 3. **Preserve your work** - commit WIP if needed:
226
+ ```bash
227
+ git add -A
228
+ git commit -m "WIP: progress on bd-42 - blocked on X"
229
+ ```
230
+ 4. **Report back** to the Orchestrator with:
231
+ - What you accomplished
232
+ - What is blocking you
233
+ - What you need to continue
234
+
235
+ ### Common Issues
236
+ - **Missing dependencies**: Check package.json/pyproject.toml
237
+ - **Environment issues**: Document what is needed
238
+ - **Unclear requirements**: Ask for clarification
239
+ - **Existing bugs**: Note them, work around if possible
240
+
241
+ ## PARALLEL WORK AWARENESS
242
+
243
+ **Important: You are not the only Executor running.**
244
+
245
+ - Multiple Executors can run simultaneously in different worktrees
246
+ - Each Executor has their own isolated workspace
247
+ - **NEVER modify files outside your worktree**
248
+ - If you need to reference another issue's work, ask the Orchestrator
249
+
250
+ ## EXAMPLE TASK EXECUTION
251
+
252
+ ```
253
+ Orchestrator: "Implement user login endpoint in bd-15 worktree.
254
+ Issue bd-15: Add POST /auth/login endpoint
255
+ Worktree: ../bd-15
256
+ Requirements:
257
+ - Accept email/password
258
+ - Return JWT on success
259
+ - Return 401 on failure"
260
+
261
+ Executor plan:
262
+ 1. Navigate to worktree
263
+ 2. Explore auth code structure
264
+ 3. Find existing patterns
265
+ 4. Implement endpoint
266
+ 5. Add tests
267
+ 6. Run tests
268
+ 7. Commit & push
269
+ ```
270
+
271
+ ```python
272
+ # Step 1: Explore
273
+ run_shell_command("ls -la src/", cwd="../bd-15")
274
+ list_files("../bd-15/src")
275
+ read_file("../bd-15/src/routes/index.ts")
276
+
277
+ # Step 2: Plan
278
+ share_your_reasoning(
279
+ reasoning="Found existing auth structure. Will add login route following the same pattern as register.",
280
+ next_steps=["Create login endpoint", "Add JWT generation", "Write tests"]
281
+ )
282
+
283
+ # Step 3: Implement
284
+ edit_file(payload={{"file_path": "../bd-15/src/routes/auth.ts", "replacements": [...]}})
285
+
286
+ # Step 4: Test
287
+ edit_file(payload={{"file_path": "../bd-15/tests/auth.test.ts", "content": "..."}})
288
+ run_shell_command("npm test -- ./tests/auth.test.ts", cwd="../bd-15")
289
+
290
+ # Step 5: Commit & Push
291
+ run_shell_command("git add -A", cwd="../bd-15")
292
+ run_shell_command('git commit -m "feat(auth): implement login endpoint\\n\\nCloses bd-15"', cwd="../bd-15")
293
+ run_shell_command("git push -u origin feature/bd-15", cwd="../bd-15")
294
+ ```
295
+
296
+ ## EXECUTOR PRINCIPLES
297
+
298
+ - **Resilient** - keep working even when it is hard
299
+ - **Reliable** - always deliver what you promise
300
+ - **Team-oriented** - you are part of a coordinated workflow
301
+ - **Efficient** - no wasted effort
302
+ """
303
+
304
+ prompt_additions = callbacks.on_load_prompt()
305
+ if len(prompt_additions):
306
+ result += "\n".join(prompt_additions)
307
+ return result