drizzy-agent 0.7.0 → 0.7.2
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.
- package/README.md +3 -1
- package/dist/agents/coder-junior/gpt-5-3-codex.d.ts +1 -1
- package/dist/agents/coder-junior/gpt-5-4.d.ts +1 -1
- package/dist/agents/coder-junior/gpt.d.ts +1 -1
- package/dist/agents/env-context.d.ts +1 -1
- package/dist/cli/index.js +12 -12
- package/dist/features/builtin-commands/templates/refactor.d.ts +1 -1
- package/dist/index.js +176 -135
- package/dist/tools/call-drizzy-agent/background-agent-executor.d.ts +5 -0
- package/dist/tools/{call-omo-agent → call-drizzy-agent}/background-executor.d.ts +2 -2
- package/dist/tools/call-drizzy-agent/constants.d.ts +2 -0
- package/dist/tools/{call-omo-agent → call-drizzy-agent}/index.d.ts +1 -1
- package/dist/tools/{call-omo-agent → call-drizzy-agent}/session-creator.d.ts +2 -2
- package/dist/tools/{call-omo-agent → call-drizzy-agent}/subagent-session-creator.d.ts +2 -2
- package/dist/tools/{call-omo-agent → call-drizzy-agent}/sync-executor.d.ts +2 -2
- package/dist/tools/{call-omo-agent → call-drizzy-agent}/tools.d.ts +1 -1
- package/dist/tools/{call-omo-agent → call-drizzy-agent}/types.d.ts +3 -3
- package/dist/tools/delegate-task/constants.d.ts +1 -1
- package/dist/tools/index.d.ts +1 -1
- package/package.json +12 -12
- package/dist/tools/call-omo-agent/background-agent-executor.d.ts +0 -5
- package/dist/tools/call-omo-agent/constants.d.ts +0 -2
- /package/dist/tools/{call-omo-agent → call-drizzy-agent}/completion-poller.d.ts +0 -0
- /package/dist/tools/{call-omo-agent → call-drizzy-agent}/message-dir.d.ts +0 -0
- /package/dist/tools/{call-omo-agent → call-drizzy-agent}/message-processor.d.ts +0 -0
- /package/dist/tools/{call-omo-agent → call-drizzy-agent}/message-storage-directory.d.ts +0 -0
- /package/dist/tools/{call-omo-agent → call-drizzy-agent}/tool-context-with-metadata.d.ts +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# DrizzyAgent
|
|
2
2
|
|
|
3
|
-
**DrizzyAgent** is an AI agent harness that extends OpenCode
|
|
3
|
+
**DrizzyAgent** is an AI agent harness that extends OpenCode with multi-agent orchestration. It provides a powerful system for coding tasks with specialized agents for different types of work.
|
|
4
|
+
|
|
5
|
+
This project is a fork and reimagination of the oh-my-opencode project.
|
|
4
6
|
|
|
5
7
|
Built for those who want the power of multi-model AI agents without the complexity of managing them manually.
|
|
6
8
|
|
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*
|
|
4
4
|
* GPTCoder-style prompt adapted for a focused executor:
|
|
5
5
|
* - Same autonomy, reporting, parallelism, and tool usage patterns
|
|
6
|
-
* - CAN spawn explore/librarian via
|
|
6
|
+
* - CAN spawn explore/librarian via call_drizzy_agent for research
|
|
7
7
|
*/
|
|
8
8
|
export declare function buildGpt53CodexCoderJuniorPrompt(useTaskSystem: boolean, promptAppend?: string): string;
|
|
@@ -6,6 +6,6 @@
|
|
|
6
6
|
* - Deterministic tool usage (always/never, not try/maybe)
|
|
7
7
|
* - Prose-first output style
|
|
8
8
|
* - Nuanced autonomy (focus unless directly conflicting)
|
|
9
|
-
* - CAN spawn explore/librarian via
|
|
9
|
+
* - CAN spawn explore/librarian via call_drizzy_agent for research
|
|
10
10
|
*/
|
|
11
11
|
export declare function buildGpt54CoderJuniorPrompt(useTaskSystem: boolean, promptAppend?: string): string;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* GPTCoder-style prompt adapted for a focused executor:
|
|
5
5
|
* - Same autonomy, reporting, parallelism, and tool usage patterns
|
|
6
|
-
* - CAN spawn explore/librarian via
|
|
6
|
+
* - CAN spawn explore/librarian via call_drizzy_agent for research
|
|
7
7
|
* - Used as fallback for GPT models without a model-specific prompt
|
|
8
8
|
*/
|
|
9
9
|
export declare function buildGptCoderJuniorPrompt(useTaskSystem: boolean, promptAppend?: string): string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Creates
|
|
2
|
+
* Creates Drizzy-specific environment context (timezone, locale).
|
|
3
3
|
* Note: Working directory, platform, and date are already provided by OpenCode's system.ts,
|
|
4
4
|
* so we only include fields that OpenCode doesn't provide to avoid duplication.
|
|
5
5
|
* See: https://github.com/code-yeongyu/oh-my-openagent/issues/379
|
package/dist/cli/index.js
CHANGED
|
@@ -29286,7 +29286,7 @@ function createMcpOAuthCommand() {
|
|
|
29286
29286
|
// package.json
|
|
29287
29287
|
var package_default = {
|
|
29288
29288
|
name: "drizzy-agent",
|
|
29289
|
-
version: "0.7.
|
|
29289
|
+
version: "0.7.2",
|
|
29290
29290
|
description: "DrizzyAgent - AI agent plugin for OpenCode",
|
|
29291
29291
|
main: "dist/index.js",
|
|
29292
29292
|
types: "dist/index.d.ts",
|
|
@@ -29362,17 +29362,17 @@ var package_default = {
|
|
|
29362
29362
|
typescript: "^5.7.3"
|
|
29363
29363
|
},
|
|
29364
29364
|
optionalDependencies: {
|
|
29365
|
-
"drizzy-agent-darwin-arm64": "0.7.
|
|
29366
|
-
"drizzy-agent-darwin-x64": "0.7.
|
|
29367
|
-
"drizzy-agent-darwin-x64-baseline": "0.7.
|
|
29368
|
-
"drizzy-agent-linux-arm64": "0.7.
|
|
29369
|
-
"drizzy-agent-linux-arm64-musl": "0.7.
|
|
29370
|
-
"drizzy-agent-linux-x64": "0.7.
|
|
29371
|
-
"drizzy-agent-linux-x64-baseline": "0.7.
|
|
29372
|
-
"drizzy-agent-linux-x64-musl": "0.7.
|
|
29373
|
-
"drizzy-agent-linux-x64-musl-baseline": "0.7.
|
|
29374
|
-
"drizzy-agent-windows-x64": "0.7.
|
|
29375
|
-
"drizzy-agent-windows-x64-baseline": "0.7.
|
|
29365
|
+
"drizzy-agent-darwin-arm64": "0.7.2",
|
|
29366
|
+
"drizzy-agent-darwin-x64": "0.7.2",
|
|
29367
|
+
"drizzy-agent-darwin-x64-baseline": "0.7.2",
|
|
29368
|
+
"drizzy-agent-linux-arm64": "0.7.2",
|
|
29369
|
+
"drizzy-agent-linux-arm64-musl": "0.7.2",
|
|
29370
|
+
"drizzy-agent-linux-x64": "0.7.2",
|
|
29371
|
+
"drizzy-agent-linux-x64-baseline": "0.7.2",
|
|
29372
|
+
"drizzy-agent-linux-x64-musl": "0.7.2",
|
|
29373
|
+
"drizzy-agent-linux-x64-musl-baseline": "0.7.2",
|
|
29374
|
+
"drizzy-agent-windows-x64": "0.7.2",
|
|
29375
|
+
"drizzy-agent-windows-x64-baseline": "0.7.2"
|
|
29376
29376
|
},
|
|
29377
29377
|
overrides: {
|
|
29378
29378
|
"@opencode-ai/sdk": "^1.2.24"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const REFACTOR_TEMPLATE = "# Intelligent Refactor Command\n\n## Usage\n```\n/refactor <refactoring-target> [--scope=<file|module|project>] [--strategy=<safe|aggressive>]\n\nArguments:\n refactoring-target: What to refactor. Can be:\n - File path: src/auth/handler.ts\n - Symbol name: \"AuthService class\"\n - Pattern: \"all functions using deprecated API\"\n - Description: \"extract validation logic into separate module\"\n\nOptions:\n --scope: Refactoring scope (default: module)\n - file: Single file only\n - module: Module/directory scope\n - project: Entire codebase\n\n --strategy: Risk tolerance (default: safe)\n - safe: Conservative, maximum test coverage required\n - aggressive: Allow broader changes with adequate coverage\n```\n\n## What This Command Does\n\nPerforms intelligent, deterministic refactoring with full codebase awareness. Unlike blind search-and-replace, this command:\n\n1. **Understands your intent** - Analyzes what you actually want to achieve\n2. **Maps the codebase** - Builds a definitive codemap before touching anything\n3. **Assesses risk** - Evaluates test coverage and determines verification strategy\n4. **Plans meticulously** - Creates a detailed plan with Plan agent\n5. **Executes precisely** - Step-by-step refactoring with LSP and AST-grep\n6. **Verifies constantly** - Runs tests after each change to ensure zero regression\n\n---\n\n# PHASE 0: INTENT GATE (MANDATORY FIRST STEP)\n\n**BEFORE ANY ACTION, classify and validate the request.**\n\n## Step 0.1: Parse Request Type\n\n| Signal | Classification | Action |\n|--------|----------------|--------|\n| Specific file/symbol | Explicit | Proceed to codebase analysis |\n| \"Refactor X to Y\" | Clear transformation | Proceed to codebase analysis |\n| \"Improve\", \"Clean up\" | Open-ended | **MUST ask**: \"What specific improvement?\" |\n| Ambiguous scope | Uncertain | **MUST ask**: \"Which modules/files?\" |\n| Missing context | Incomplete | **MUST ask**: \"What's the desired outcome?\" |\n\n## Step 0.2: Validate Understanding\n\nBefore proceeding, confirm:\n- [ ] Target is clearly identified\n- [ ] Desired outcome is understood\n- [ ] Scope is defined (file/module/project)\n- [ ] Success criteria can be articulated\n\n**If ANY of above is unclear, ASK CLARIFYING QUESTION:**\n\n```\nI want to make sure I understand the refactoring goal correctly.\n\n**What I understood**: [interpretation]\n**What I'm unsure about**: [specific ambiguity]\n\nOptions I see:\n1. [Option A] - [implications]\n2. [Option B] - [implications]\n\n**My recommendation**: [suggestion with reasoning]\n\nShould I proceed with [recommendation], or would you prefer differently?\n```\n\n## Step 0.3: Create Initial Todos\n\n**IMMEDIATELY after understanding the request, create todos:**\n\n```\nTodoWrite([\n {\"id\": \"phase-1\", \"content\": \"PHASE 1: Codebase Analysis - launch parallel explore agents\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-2\", \"content\": \"PHASE 2: Build Codemap - map dependencies and impact zones\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-3\", \"content\": \"PHASE 3: Test Assessment - analyze test coverage and verification strategy\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-4\", \"content\": \"PHASE 4: Plan Generation - invoke Plan agent for detailed refactoring plan\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-5\", \"content\": \"PHASE 5: Execute Refactoring - step-by-step with continuous verification\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-6\", \"content\": \"PHASE 6: Final Verification - full test suite and regression check\", \"status\": \"pending\", \"priority\": \"high\"}\n])\n```\n\n---\n\n# PHASE 1: CODEBASE ANALYSIS (PARALLEL EXPLORATION)\n\n**Mark phase-1 as in_progress.**\n\n## 1.1: Launch Parallel Explore Agents (BACKGROUND)\n\nFire ALL of these simultaneously using `call_omo_agent`:\n\n```\n// Agent 1: Find the refactoring target\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find all occurrences and definitions of [TARGET]. \n Report: file paths, line numbers, usage patterns.\"\n)\n\n// Agent 2: Find related code\ncall_omo_agent(\n subagent_type=\"explore\", \n run_in_background=true,\n prompt=\"Find all code that imports, uses, or depends on [TARGET].\n Report: dependency chains, import graphs.\"\n)\n\n// Agent 3: Find similar patterns\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find similar code patterns to [TARGET] in the codebase.\n Report: analogous implementations, established conventions.\"\n)\n\n// Agent 4: Find tests\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find all test files related to [TARGET].\n Report: test file paths, test case names, coverage indicators.\"\n)\n\n// Agent 5: Architecture context\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find architectural patterns and module organization around [TARGET].\n Report: module boundaries, layer structure, design patterns in use.\"\n)\n```\n\n## 1.2: Direct Tool Exploration (WHILE AGENTS RUN)\n\nWhile background agents are running, use direct tools:\n\n### LSP Tools for Precise Analysis:\n\n```typescript\n// Find definition(s)\nLspGotoDefinition(filePath, line, character) // Where is it defined?\n\n// Find ALL usages across workspace\nLspFindReferences(filePath, line, character, includeDeclaration=true)\n\n// Get file structure\nLspDocumentSymbols(filePath) // Hierarchical outline\nLspWorkspaceSymbols(filePath, query=\"[target_symbol]\") // Search by name\n\n// Get current diagnostics\nlsp_diagnostics(filePath) // Errors, warnings before we start\n```\n\n### AST-Grep for Pattern Analysis:\n\n```typescript\n// Find structural patterns\nast_grep_search(\n pattern=\"function $NAME($$$) { $$$ }\", // or relevant pattern\n lang=\"typescript\", // or relevant language\n paths=[\"src/\"]\n)\n\n// Preview refactoring (DRY RUN)\nast_grep_replace(\n pattern=\"[old_pattern]\",\n rewrite=\"[new_pattern]\",\n lang=\"[language]\",\n dryRun=true // ALWAYS preview first\n)\n```\n\n### Grep for Text Patterns:\n\n```\ngrep(pattern=\"[search_term]\", path=\"src/\", include=\"*.ts\")\n```\n\n## 1.3: Collect Background Results\n\n```\nbackground_output(task_id=\"[agent_1_id]\")\nbackground_output(task_id=\"[agent_2_id]\")\n...\n```\n\n**Mark phase-1 as completed after all results collected.**\n\n---\n\n# PHASE 2: BUILD CODEMAP (DEPENDENCY MAPPING)\n\n**Mark phase-2 as in_progress.**\n\n## 2.1: Construct Definitive Codemap\n\nBased on Phase 1 results, build:\n\n```\n## CODEMAP: [TARGET]\n\n### Core Files (Direct Impact)\n- `path/to/file.ts:L10-L50` - Primary definition\n- `path/to/file2.ts:L25` - Key usage\n\n### Dependency Graph\n```\n[TARGET] \n\u251C\u2500\u2500 imports from: \n\u2502 \u251C\u2500\u2500 module-a (types)\n\u2502 \u2514\u2500\u2500 module-b (utils)\n\u251C\u2500\u2500 imported by:\n\u2502 \u251C\u2500\u2500 consumer-1.ts\n\u2502 \u251C\u2500\u2500 consumer-2.ts\n\u2502 \u2514\u2500\u2500 consumer-3.ts\n\u2514\u2500\u2500 used by:\n \u251C\u2500\u2500 handler.ts (direct call)\n \u2514\u2500\u2500 service.ts (dependency injection)\n```\n\n### Impact Zones\n| Zone | Risk Level | Files Affected | Test Coverage |\n|------|------------|----------------|---------------|\n| Core | HIGH | 3 files | 85% covered |\n| Consumers | MEDIUM | 8 files | 70% covered |\n| Edge | LOW | 2 files | 50% covered |\n\n### Established Patterns\n- Pattern A: [description] - used in N places\n- Pattern B: [description] - established convention\n```\n\n## 2.2: Identify Refactoring Constraints\n\nBased on codemap:\n- **MUST follow**: [existing patterns identified]\n- **MUST NOT break**: [critical dependencies]\n- **Safe to change**: [isolated code zones]\n- **Requires migration**: [breaking changes impact]\n\n**Mark phase-2 as completed.**\n\n---\n\n# PHASE 3: TEST ASSESSMENT (VERIFICATION STRATEGY)\n\n**Mark phase-3 as in_progress.**\n\n## 3.1: Detect Test Infrastructure\n\n```bash\n# Check for test commands\ncat package.json | jq '.scripts | keys[] | select(test(\"test\"))'\n\n# Or for Python\nls -la pytest.ini pyproject.toml setup.cfg\n\n# Or for Go\nls -la *_test.go\n```\n\n## 3.2: Analyze Test Coverage\n\n```\n// Find all tests related to target\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=false, // Need this synchronously\n prompt=\"Analyze test coverage for [TARGET]:\n 1. Which test files cover this code?\n 2. What test cases exist?\n 3. Are there integration tests?\n 4. What edge cases are tested?\n 5. Estimated coverage percentage?\"\n)\n```\n\n## 3.3: Determine Verification Strategy\n\nBased on test analysis:\n\n| Coverage Level | Strategy |\n|----------------|----------|\n| HIGH (>80%) | Run existing tests after each step |\n| MEDIUM (50-80%) | Run tests + add safety assertions |\n| LOW (<50%) | **PAUSE**: Propose adding tests first |\n| NONE | **BLOCK**: Refuse aggressive refactoring |\n\n**If coverage is LOW or NONE, ask user:**\n\n```\nTest coverage for [TARGET] is [LEVEL].\n\n**Risk Assessment**: Refactoring without adequate tests is dangerous.\n\nOptions:\n1. Add tests first, then refactor (RECOMMENDED)\n2. Proceed with extra caution, manual verification required\n3. Abort refactoring\n\nWhich approach do you prefer?\n```\n\n## 3.4: Document Verification Plan\n\n```\n## VERIFICATION PLAN\n\n### Test Commands\n- Unit: `bun test` / `npm test` / `pytest` / etc.\n- Integration: [command if exists]\n- Type check: `tsc --noEmit` / `pyright` / etc.\n\n### Verification Checkpoints\nAfter each refactoring step:\n1. lsp_diagnostics \u2192 zero new errors\n2. Run test command \u2192 all pass\n3. Type check \u2192 clean\n\n### Regression Indicators\n- [Specific test that must pass]\n- [Behavior that must be preserved]\n- [API contract that must not change]\n```\n\n**Mark phase-3 as completed.**\n\n---\n\n# PHASE 4: PLAN GENERATION (PLAN AGENT)\n\n**Mark phase-4 as in_progress.**\n\n## 4.1: Invoke Plan Agent\n\n```\nTask(\n subagent_type=\"plan\",\n prompt=\"Create a detailed refactoring plan:\n\n ## Refactoring Goal\n [User's original request]\n\n ## Codemap (from Phase 2)\n [Insert codemap here]\n\n ## Test Coverage (from Phase 3)\n [Insert verification plan here]\n\n ## Constraints\n - MUST follow existing patterns: [list]\n - MUST NOT break: [critical paths]\n - MUST run tests after each step\n\n ## Requirements\n 1. Break down into atomic refactoring steps\n 2. Each step must be independently verifiable\n 3. Order steps by dependency (what must happen first)\n 4. Specify exact files and line ranges for each step\n 5. Include rollback strategy for each step\n 6. Define commit checkpoints\"\n)\n```\n\n## 4.2: Review and Validate Plan\n\nAfter receiving plan from Plan agent:\n\n1. **Verify completeness**: All identified files addressed?\n2. **Verify safety**: Each step reversible?\n3. **Verify order**: Dependencies respected?\n4. **Verify verification**: Test commands specified?\n\n## 4.3: Register Detailed Todos\n\nConvert Plan agent output into granular todos:\n\n```\nTodoWrite([\n // Each step from the plan becomes a todo\n {\"id\": \"refactor-1\", \"content\": \"Step 1: [description]\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"verify-1\", \"content\": \"Verify Step 1: run tests\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"refactor-2\", \"content\": \"Step 2: [description]\", \"status\": \"pending\", \"priority\": \"medium\"},\n {\"id\": \"verify-2\", \"content\": \"Verify Step 2: run tests\", \"status\": \"pending\", \"priority\": \"medium\"},\n // ... continue for all steps\n])\n```\n\n**Mark phase-4 as completed.**\n\n---\n\n# PHASE 5: EXECUTE REFACTORING (DETERMINISTIC EXECUTION)\n\n**Mark phase-5 as in_progress.**\n\n## 5.1: Execution Protocol\n\nFor EACH refactoring step:\n\n### Pre-Step\n1. Mark step todo as `in_progress`\n2. Read current file state\n3. Verify lsp_diagnostics is baseline\n\n### Execute Step\nUse appropriate tool:\n\n**For Symbol Renames:**\n```typescript\nlsp_prepare_rename(filePath, line, character) // Validate rename is possible\nlsp_rename(filePath, line, character, newName) // Execute rename\n```\n\n**For Pattern Transformations:**\n```typescript\n// Preview first\nast_grep_replace(pattern, rewrite, lang, dryRun=true)\n\n// If preview looks good, execute\nast_grep_replace(pattern, rewrite, lang, dryRun=false)\n```\n\n**For Structural Changes:**\n```typescript\n// Use Edit tool for precise changes\nedit(filePath, oldString, newString)\n```\n\n### Post-Step Verification (MANDATORY)\n\n```typescript\n// 1. Check diagnostics\nlsp_diagnostics(filePath) // Must be clean or same as baseline\n\n// 2. Run tests\nbash(\"bun test\") // Or appropriate test command\n\n// 3. Type check\nbash(\"tsc --noEmit\") // Or appropriate type check\n```\n\n### Step Completion\n1. If verification passes \u2192 Mark step todo as `completed`\n2. If verification fails \u2192 **STOP AND FIX**\n\n## 5.2: Failure Recovery Protocol\n\nIf ANY verification fails:\n\n1. **STOP** immediately\n2. **REVERT** the failed change\n3. **DIAGNOSE** what went wrong\n4. **OPTIONS**:\n - Fix the issue and retry\n - Skip this step (if optional)\n - Consult oracle agent for help\n - Ask user for guidance\n\n**NEVER proceed to next step with broken tests.**\n\n## 5.3: Commit Checkpoints\n\nAfter each logical group of changes:\n\n```bash\ngit add [changed-files]\ngit commit -m \"refactor(scope): description\n\n[details of what was changed and why]\"\n```\n\n**Mark phase-5 as completed when all refactoring steps done.**\n\n---\n\n# PHASE 6: FINAL VERIFICATION (REGRESSION CHECK)\n\n**Mark phase-6 as in_progress.**\n\n## 6.1: Full Test Suite\n\n```bash\n# Run complete test suite\nbun test # or npm test, pytest, go test, etc.\n```\n\n## 6.2: Type Check\n\n```bash\n# Full type check\ntsc --noEmit # or equivalent\n```\n\n## 6.3: Lint Check\n\n```bash\n# Run linter\neslint . # or equivalent\n```\n\n## 6.4: Build Verification (if applicable)\n\n```bash\n# Ensure build still works\nbun run build # or npm run build, etc.\n```\n\n## 6.5: Final Diagnostics\n\n```typescript\n// Check all changed files\nfor (file of changedFiles) {\n lsp_diagnostics(file) // Must all be clean\n}\n```\n\n## 6.6: Generate Summary\n\n```markdown\n## Refactoring Complete\n\n### What Changed\n- [List of changes made]\n\n### Files Modified\n- `path/to/file.ts` - [what changed]\n- `path/to/file2.ts` - [what changed]\n\n### Verification Results\n- Tests: PASSED (X/Y passing)\n- Type Check: CLEAN\n- Lint: CLEAN\n- Build: SUCCESS\n\n### No Regressions Detected\nAll existing tests pass. No new errors introduced.\n```\n\n**Mark phase-6 as completed.**\n\n---\n\n# CRITICAL RULES\n\n## NEVER DO\n- Skip lsp_diagnostics check after changes\n- Proceed with failing tests\n- Make changes without understanding impact\n- Use `as any`, `@ts-ignore`, `@ts-expect-error`\n- Delete tests to make them pass\n- Commit broken code\n- Refactor without understanding existing patterns\n\n## ALWAYS DO\n- Understand before changing\n- Preview before applying (ast_grep dryRun=true)\n- Verify after every change\n- Follow existing codebase patterns\n- Keep todos updated in real-time\n- Commit at logical checkpoints\n- Report issues immediately\n\n## ABORT CONDITIONS\nIf any of these occur, **STOP and consult user**:\n- Test coverage is zero for target code\n- Changes would break public API\n- Refactoring scope is unclear\n- 3 consecutive verification failures\n- User-defined constraints violated\n\n---\n\n# Tool Usage Philosophy\n\nYou already know these tools. Use them intelligently:\n\n## LSP Tools\nLeverage LSP tools for precision analysis. Key patterns:\n- **Understand before changing**: `LspGotoDefinition` to grasp context\n- **Impact analysis**: `LspFindReferences` to map all usages before modification\n- **Safe refactoring**: `lsp_prepare_rename` \u2192 `lsp_rename` for symbol renames\n- **Continuous verification**: `lsp_diagnostics` after every change\n\n## AST-Grep\nUse `ast_grep_search` and `ast_grep_replace` for structural transformations.\n**Critical**: Always `dryRun=true` first, review, then execute.\n\n## Agents\n- `explore`: Parallel codebase pattern discovery\n- `plan`: Detailed refactoring plan generation\n- `oracle`: Read-only consultation for complex architectural decisions and debugging\n- `librarian`: **Use proactively** when encountering deprecated methods or library migration tasks. Query official docs and OSS examples for modern replacements.\n\n## Deprecated Code & Library Migration\nWhen you encounter deprecated methods/APIs during refactoring:\n1. Fire `librarian` to find the recommended modern alternative\n2. **DO NOT auto-upgrade to latest version** unless user explicitly requests migration\n3. If user requests library migration, use `librarian` to fetch latest API docs before making changes\n\n---\n\n**Remember: Refactoring without tests is reckless. Refactoring without understanding is destructive. This command ensures you do neither.**\n\n<user-request>\n$ARGUMENTS\n</user-request>\n";
|
|
1
|
+
export declare const REFACTOR_TEMPLATE = "# Intelligent Refactor Command\n\n## Usage\n```\n/refactor <refactoring-target> [--scope=<file|module|project>] [--strategy=<safe|aggressive>]\n\nArguments:\n refactoring-target: What to refactor. Can be:\n - File path: src/auth/handler.ts\n - Symbol name: \"AuthService class\"\n - Pattern: \"all functions using deprecated API\"\n - Description: \"extract validation logic into separate module\"\n\nOptions:\n --scope: Refactoring scope (default: module)\n - file: Single file only\n - module: Module/directory scope\n - project: Entire codebase\n\n --strategy: Risk tolerance (default: safe)\n - safe: Conservative, maximum test coverage required\n - aggressive: Allow broader changes with adequate coverage\n```\n\n## What This Command Does\n\nPerforms intelligent, deterministic refactoring with full codebase awareness. Unlike blind search-and-replace, this command:\n\n1. **Understands your intent** - Analyzes what you actually want to achieve\n2. **Maps the codebase** - Builds a definitive codemap before touching anything\n3. **Assesses risk** - Evaluates test coverage and determines verification strategy\n4. **Plans meticulously** - Creates a detailed plan with Plan agent\n5. **Executes precisely** - Step-by-step refactoring with LSP and AST-grep\n6. **Verifies constantly** - Runs tests after each change to ensure zero regression\n\n---\n\n# PHASE 0: INTENT GATE (MANDATORY FIRST STEP)\n\n**BEFORE ANY ACTION, classify and validate the request.**\n\n## Step 0.1: Parse Request Type\n\n| Signal | Classification | Action |\n|--------|----------------|--------|\n| Specific file/symbol | Explicit | Proceed to codebase analysis |\n| \"Refactor X to Y\" | Clear transformation | Proceed to codebase analysis |\n| \"Improve\", \"Clean up\" | Open-ended | **MUST ask**: \"What specific improvement?\" |\n| Ambiguous scope | Uncertain | **MUST ask**: \"Which modules/files?\" |\n| Missing context | Incomplete | **MUST ask**: \"What's the desired outcome?\" |\n\n## Step 0.2: Validate Understanding\n\nBefore proceeding, confirm:\n- [ ] Target is clearly identified\n- [ ] Desired outcome is understood\n- [ ] Scope is defined (file/module/project)\n- [ ] Success criteria can be articulated\n\n**If ANY of above is unclear, ASK CLARIFYING QUESTION:**\n\n```\nI want to make sure I understand the refactoring goal correctly.\n\n**What I understood**: [interpretation]\n**What I'm unsure about**: [specific ambiguity]\n\nOptions I see:\n1. [Option A] - [implications]\n2. [Option B] - [implications]\n\n**My recommendation**: [suggestion with reasoning]\n\nShould I proceed with [recommendation], or would you prefer differently?\n```\n\n## Step 0.3: Create Initial Todos\n\n**IMMEDIATELY after understanding the request, create todos:**\n\n```\nTodoWrite([\n {\"id\": \"phase-1\", \"content\": \"PHASE 1: Codebase Analysis - launch parallel explore agents\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-2\", \"content\": \"PHASE 2: Build Codemap - map dependencies and impact zones\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-3\", \"content\": \"PHASE 3: Test Assessment - analyze test coverage and verification strategy\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-4\", \"content\": \"PHASE 4: Plan Generation - invoke Plan agent for detailed refactoring plan\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-5\", \"content\": \"PHASE 5: Execute Refactoring - step-by-step with continuous verification\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-6\", \"content\": \"PHASE 6: Final Verification - full test suite and regression check\", \"status\": \"pending\", \"priority\": \"high\"}\n])\n```\n\n---\n\n# PHASE 1: CODEBASE ANALYSIS (PARALLEL EXPLORATION)\n\n**Mark phase-1 as in_progress.**\n\n## 1.1: Launch Parallel Explore Agents (BACKGROUND)\n\nFire ALL of these simultaneously using `call_drizzy_agent`:\n\n```\n// Agent 1: Find the refactoring target\ncall_drizzy_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find all occurrences and definitions of [TARGET]. \n Report: file paths, line numbers, usage patterns.\"\n)\n\n// Agent 2: Find related code\ncall_drizzy_agent(\n subagent_type=\"explore\", \n run_in_background=true,\n prompt=\"Find all code that imports, uses, or depends on [TARGET].\n Report: dependency chains, import graphs.\"\n)\n\n// Agent 3: Find similar patterns\ncall_drizzy_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find similar code patterns to [TARGET] in the codebase.\n Report: analogous implementations, established conventions.\"\n)\n\n// Agent 4: Find tests\ncall_drizzy_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find all test files related to [TARGET].\n Report: test file paths, test case names, coverage indicators.\"\n)\n\n// Agent 5: Architecture context\ncall_drizzy_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find architectural patterns and module organization around [TARGET].\n Report: module boundaries, layer structure, design patterns in use.\"\n)\n```\n\n## 1.2: Direct Tool Exploration (WHILE AGENTS RUN)\n\nWhile background agents are running, use direct tools:\n\n### LSP Tools for Precise Analysis:\n\n```typescript\n// Find definition(s)\nLspGotoDefinition(filePath, line, character) // Where is it defined?\n\n// Find ALL usages across workspace\nLspFindReferences(filePath, line, character, includeDeclaration=true)\n\n// Get file structure\nLspDocumentSymbols(filePath) // Hierarchical outline\nLspWorkspaceSymbols(filePath, query=\"[target_symbol]\") // Search by name\n\n// Get current diagnostics\nlsp_diagnostics(filePath) // Errors, warnings before we start\n```\n\n### AST-Grep for Pattern Analysis:\n\n```typescript\n// Find structural patterns\nast_grep_search(\n pattern=\"function $NAME($$$) { $$$ }\", // or relevant pattern\n lang=\"typescript\", // or relevant language\n paths=[\"src/\"]\n)\n\n// Preview refactoring (DRY RUN)\nast_grep_replace(\n pattern=\"[old_pattern]\",\n rewrite=\"[new_pattern]\",\n lang=\"[language]\",\n dryRun=true // ALWAYS preview first\n)\n```\n\n### Grep for Text Patterns:\n\n```\ngrep(pattern=\"[search_term]\", path=\"src/\", include=\"*.ts\")\n```\n\n## 1.3: Collect Background Results\n\n```\nbackground_output(task_id=\"[agent_1_id]\")\nbackground_output(task_id=\"[agent_2_id]\")\n...\n```\n\n**Mark phase-1 as completed after all results collected.**\n\n---\n\n# PHASE 2: BUILD CODEMAP (DEPENDENCY MAPPING)\n\n**Mark phase-2 as in_progress.**\n\n## 2.1: Construct Definitive Codemap\n\nBased on Phase 1 results, build:\n\n```\n## CODEMAP: [TARGET]\n\n### Core Files (Direct Impact)\n- `path/to/file.ts:L10-L50` - Primary definition\n- `path/to/file2.ts:L25` - Key usage\n\n### Dependency Graph\n```\n[TARGET] \n\u251C\u2500\u2500 imports from: \n\u2502 \u251C\u2500\u2500 module-a (types)\n\u2502 \u2514\u2500\u2500 module-b (utils)\n\u251C\u2500\u2500 imported by:\n\u2502 \u251C\u2500\u2500 consumer-1.ts\n\u2502 \u251C\u2500\u2500 consumer-2.ts\n\u2502 \u2514\u2500\u2500 consumer-3.ts\n\u2514\u2500\u2500 used by:\n \u251C\u2500\u2500 handler.ts (direct call)\n \u2514\u2500\u2500 service.ts (dependency injection)\n```\n\n### Impact Zones\n| Zone | Risk Level | Files Affected | Test Coverage |\n|------|------------|----------------|---------------|\n| Core | HIGH | 3 files | 85% covered |\n| Consumers | MEDIUM | 8 files | 70% covered |\n| Edge | LOW | 2 files | 50% covered |\n\n### Established Patterns\n- Pattern A: [description] - used in N places\n- Pattern B: [description] - established convention\n```\n\n## 2.2: Identify Refactoring Constraints\n\nBased on codemap:\n- **MUST follow**: [existing patterns identified]\n- **MUST NOT break**: [critical dependencies]\n- **Safe to change**: [isolated code zones]\n- **Requires migration**: [breaking changes impact]\n\n**Mark phase-2 as completed.**\n\n---\n\n# PHASE 3: TEST ASSESSMENT (VERIFICATION STRATEGY)\n\n**Mark phase-3 as in_progress.**\n\n## 3.1: Detect Test Infrastructure\n\n```bash\n# Check for test commands\ncat package.json | jq '.scripts | keys[] | select(test(\"test\"))'\n\n# Or for Python\nls -la pytest.ini pyproject.toml setup.cfg\n\n# Or for Go\nls -la *_test.go\n```\n\n## 3.2: Analyze Test Coverage\n\n```\n// Find all tests related to target\ncall_drizzy_agent(\n subagent_type=\"explore\",\n run_in_background=false, // Need this synchronously\n prompt=\"Analyze test coverage for [TARGET]:\n 1. Which test files cover this code?\n 2. What test cases exist?\n 3. Are there integration tests?\n 4. What edge cases are tested?\n 5. Estimated coverage percentage?\"\n)\n```\n\n## 3.3: Determine Verification Strategy\n\nBased on test analysis:\n\n| Coverage Level | Strategy |\n|----------------|----------|\n| HIGH (>80%) | Run existing tests after each step |\n| MEDIUM (50-80%) | Run tests + add safety assertions |\n| LOW (<50%) | **PAUSE**: Propose adding tests first |\n| NONE | **BLOCK**: Refuse aggressive refactoring |\n\n**If coverage is LOW or NONE, ask user:**\n\n```\nTest coverage for [TARGET] is [LEVEL].\n\n**Risk Assessment**: Refactoring without adequate tests is dangerous.\n\nOptions:\n1. Add tests first, then refactor (RECOMMENDED)\n2. Proceed with extra caution, manual verification required\n3. Abort refactoring\n\nWhich approach do you prefer?\n```\n\n## 3.4: Document Verification Plan\n\n```\n## VERIFICATION PLAN\n\n### Test Commands\n- Unit: `bun test` / `npm test` / `pytest` / etc.\n- Integration: [command if exists]\n- Type check: `tsc --noEmit` / `pyright` / etc.\n\n### Verification Checkpoints\nAfter each refactoring step:\n1. lsp_diagnostics \u2192 zero new errors\n2. Run test command \u2192 all pass\n3. Type check \u2192 clean\n\n### Regression Indicators\n- [Specific test that must pass]\n- [Behavior that must be preserved]\n- [API contract that must not change]\n```\n\n**Mark phase-3 as completed.**\n\n---\n\n# PHASE 4: PLAN GENERATION (PLAN AGENT)\n\n**Mark phase-4 as in_progress.**\n\n## 4.1: Invoke Plan Agent\n\n```\nTask(\n subagent_type=\"plan\",\n prompt=\"Create a detailed refactoring plan:\n\n ## Refactoring Goal\n [User's original request]\n\n ## Codemap (from Phase 2)\n [Insert codemap here]\n\n ## Test Coverage (from Phase 3)\n [Insert verification plan here]\n\n ## Constraints\n - MUST follow existing patterns: [list]\n - MUST NOT break: [critical paths]\n - MUST run tests after each step\n\n ## Requirements\n 1. Break down into atomic refactoring steps\n 2. Each step must be independently verifiable\n 3. Order steps by dependency (what must happen first)\n 4. Specify exact files and line ranges for each step\n 5. Include rollback strategy for each step\n 6. Define commit checkpoints\"\n)\n```\n\n## 4.2: Review and Validate Plan\n\nAfter receiving plan from Plan agent:\n\n1. **Verify completeness**: All identified files addressed?\n2. **Verify safety**: Each step reversible?\n3. **Verify order**: Dependencies respected?\n4. **Verify verification**: Test commands specified?\n\n## 4.3: Register Detailed Todos\n\nConvert Plan agent output into granular todos:\n\n```\nTodoWrite([\n // Each step from the plan becomes a todo\n {\"id\": \"refactor-1\", \"content\": \"Step 1: [description]\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"verify-1\", \"content\": \"Verify Step 1: run tests\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"refactor-2\", \"content\": \"Step 2: [description]\", \"status\": \"pending\", \"priority\": \"medium\"},\n {\"id\": \"verify-2\", \"content\": \"Verify Step 2: run tests\", \"status\": \"pending\", \"priority\": \"medium\"},\n // ... continue for all steps\n])\n```\n\n**Mark phase-4 as completed.**\n\n---\n\n# PHASE 5: EXECUTE REFACTORING (DETERMINISTIC EXECUTION)\n\n**Mark phase-5 as in_progress.**\n\n## 5.1: Execution Protocol\n\nFor EACH refactoring step:\n\n### Pre-Step\n1. Mark step todo as `in_progress`\n2. Read current file state\n3. Verify lsp_diagnostics is baseline\n\n### Execute Step\nUse appropriate tool:\n\n**For Symbol Renames:**\n```typescript\nlsp_prepare_rename(filePath, line, character) // Validate rename is possible\nlsp_rename(filePath, line, character, newName) // Execute rename\n```\n\n**For Pattern Transformations:**\n```typescript\n// Preview first\nast_grep_replace(pattern, rewrite, lang, dryRun=true)\n\n// If preview looks good, execute\nast_grep_replace(pattern, rewrite, lang, dryRun=false)\n```\n\n**For Structural Changes:**\n```typescript\n// Use Edit tool for precise changes\nedit(filePath, oldString, newString)\n```\n\n### Post-Step Verification (MANDATORY)\n\n```typescript\n// 1. Check diagnostics\nlsp_diagnostics(filePath) // Must be clean or same as baseline\n\n// 2. Run tests\nbash(\"bun test\") // Or appropriate test command\n\n// 3. Type check\nbash(\"tsc --noEmit\") // Or appropriate type check\n```\n\n### Step Completion\n1. If verification passes \u2192 Mark step todo as `completed`\n2. If verification fails \u2192 **STOP AND FIX**\n\n## 5.2: Failure Recovery Protocol\n\nIf ANY verification fails:\n\n1. **STOP** immediately\n2. **REVERT** the failed change\n3. **DIAGNOSE** what went wrong\n4. **OPTIONS**:\n - Fix the issue and retry\n - Skip this step (if optional)\n - Consult oracle agent for help\n - Ask user for guidance\n\n**NEVER proceed to next step with broken tests.**\n\n## 5.3: Commit Checkpoints\n\nAfter each logical group of changes:\n\n```bash\ngit add [changed-files]\ngit commit -m \"refactor(scope): description\n\n[details of what was changed and why]\"\n```\n\n**Mark phase-5 as completed when all refactoring steps done.**\n\n---\n\n# PHASE 6: FINAL VERIFICATION (REGRESSION CHECK)\n\n**Mark phase-6 as in_progress.**\n\n## 6.1: Full Test Suite\n\n```bash\n# Run complete test suite\nbun test # or npm test, pytest, go test, etc.\n```\n\n## 6.2: Type Check\n\n```bash\n# Full type check\ntsc --noEmit # or equivalent\n```\n\n## 6.3: Lint Check\n\n```bash\n# Run linter\neslint . # or equivalent\n```\n\n## 6.4: Build Verification (if applicable)\n\n```bash\n# Ensure build still works\nbun run build # or npm run build, etc.\n```\n\n## 6.5: Final Diagnostics\n\n```typescript\n// Check all changed files\nfor (file of changedFiles) {\n lsp_diagnostics(file) // Must all be clean\n}\n```\n\n## 6.6: Generate Summary\n\n```markdown\n## Refactoring Complete\n\n### What Changed\n- [List of changes made]\n\n### Files Modified\n- `path/to/file.ts` - [what changed]\n- `path/to/file2.ts` - [what changed]\n\n### Verification Results\n- Tests: PASSED (X/Y passing)\n- Type Check: CLEAN\n- Lint: CLEAN\n- Build: SUCCESS\n\n### No Regressions Detected\nAll existing tests pass. No new errors introduced.\n```\n\n**Mark phase-6 as completed.**\n\n---\n\n# CRITICAL RULES\n\n## NEVER DO\n- Skip lsp_diagnostics check after changes\n- Proceed with failing tests\n- Make changes without understanding impact\n- Use `as any`, `@ts-ignore`, `@ts-expect-error`\n- Delete tests to make them pass\n- Commit broken code\n- Refactor without understanding existing patterns\n\n## ALWAYS DO\n- Understand before changing\n- Preview before applying (ast_grep dryRun=true)\n- Verify after every change\n- Follow existing codebase patterns\n- Keep todos updated in real-time\n- Commit at logical checkpoints\n- Report issues immediately\n\n## ABORT CONDITIONS\nIf any of these occur, **STOP and consult user**:\n- Test coverage is zero for target code\n- Changes would break public API\n- Refactoring scope is unclear\n- 3 consecutive verification failures\n- User-defined constraints violated\n\n---\n\n# Tool Usage Philosophy\n\nYou already know these tools. Use them intelligently:\n\n## LSP Tools\nLeverage LSP tools for precision analysis. Key patterns:\n- **Understand before changing**: `LspGotoDefinition` to grasp context\n- **Impact analysis**: `LspFindReferences` to map all usages before modification\n- **Safe refactoring**: `lsp_prepare_rename` \u2192 `lsp_rename` for symbol renames\n- **Continuous verification**: `lsp_diagnostics` after every change\n\n## AST-Grep\nUse `ast_grep_search` and `ast_grep_replace` for structural transformations.\n**Critical**: Always `dryRun=true` first, review, then execute.\n\n## Agents\n- `explore`: Parallel codebase pattern discovery\n- `plan`: Detailed refactoring plan generation\n- `oracle`: Read-only consultation for complex architectural decisions and debugging\n- `librarian`: **Use proactively** when encountering deprecated methods or library migration tasks. Query official docs and OSS examples for modern replacements.\n\n## Deprecated Code & Library Migration\nWhen you encounter deprecated methods/APIs during refactoring:\n1. Fire `librarian` to find the recommended modern alternative\n2. **DO NOT auto-upgrade to latest version** unless user explicitly requests migration\n3. If user requests library migration, use `librarian` to fetch latest API docs before making changes\n\n---\n\n**Remember: Refactoring without tests is reckless. Refactoring without understanding is destructive. This command ensures you do neither.**\n\n<user-request>\n$ARGUMENTS\n</user-request>\n";
|
package/dist/index.js
CHANGED
|
@@ -17009,7 +17009,7 @@ var EXPLORATION_AGENT_DENYLIST = {
|
|
|
17009
17009
|
write: false,
|
|
17010
17010
|
edit: false,
|
|
17011
17011
|
task: false,
|
|
17012
|
-
|
|
17012
|
+
call_drizzy_agent: false
|
|
17013
17013
|
};
|
|
17014
17014
|
var AGENT_RESTRICTIONS = {
|
|
17015
17015
|
explore: EXPLORATION_AGENT_DENYLIST,
|
|
@@ -17018,7 +17018,7 @@ var AGENT_RESTRICTIONS = {
|
|
|
17018
17018
|
write: false,
|
|
17019
17019
|
edit: false,
|
|
17020
17020
|
task: false,
|
|
17021
|
-
|
|
17021
|
+
call_drizzy_agent: false
|
|
17022
17022
|
},
|
|
17023
17023
|
planConsultant: {
|
|
17024
17024
|
write: false,
|
|
@@ -40842,7 +40842,7 @@ var TARGET_TOOLS = new Set([
|
|
|
40842
40842
|
]);
|
|
40843
40843
|
var AGENT_TOOLS = new Set([
|
|
40844
40844
|
"task",
|
|
40845
|
-
"
|
|
40845
|
+
"call_drizzy_agent",
|
|
40846
40846
|
"task"
|
|
40847
40847
|
]);
|
|
40848
40848
|
var REMINDER_MESSAGE = `
|
|
@@ -42548,7 +42548,7 @@ var DELEGATABLE_WORK_TOOLS = new Set([
|
|
|
42548
42548
|
]);
|
|
42549
42549
|
var DELEGATION_TOOLS = new Set([
|
|
42550
42550
|
"task",
|
|
42551
|
-
"
|
|
42551
|
+
"call_drizzy_agent"
|
|
42552
42552
|
]);
|
|
42553
42553
|
function createCategorySkillReminderHook(_ctx, availableSkills = []) {
|
|
42554
42554
|
const sessionStates = new Map;
|
|
@@ -44334,11 +44334,11 @@ TodoWrite([
|
|
|
44334
44334
|
|
|
44335
44335
|
## 1.1: Launch Parallel Explore Agents (BACKGROUND)
|
|
44336
44336
|
|
|
44337
|
-
Fire ALL of these simultaneously using \`
|
|
44337
|
+
Fire ALL of these simultaneously using \`call_drizzy_agent\`:
|
|
44338
44338
|
|
|
44339
44339
|
\`\`\`
|
|
44340
44340
|
// Agent 1: Find the refactoring target
|
|
44341
|
-
|
|
44341
|
+
call_drizzy_agent(
|
|
44342
44342
|
subagent_type="explore",
|
|
44343
44343
|
run_in_background=true,
|
|
44344
44344
|
prompt="Find all occurrences and definitions of [TARGET].
|
|
@@ -44346,7 +44346,7 @@ call_omo_agent(
|
|
|
44346
44346
|
)
|
|
44347
44347
|
|
|
44348
44348
|
// Agent 2: Find related code
|
|
44349
|
-
|
|
44349
|
+
call_drizzy_agent(
|
|
44350
44350
|
subagent_type="explore",
|
|
44351
44351
|
run_in_background=true,
|
|
44352
44352
|
prompt="Find all code that imports, uses, or depends on [TARGET].
|
|
@@ -44354,7 +44354,7 @@ call_omo_agent(
|
|
|
44354
44354
|
)
|
|
44355
44355
|
|
|
44356
44356
|
// Agent 3: Find similar patterns
|
|
44357
|
-
|
|
44357
|
+
call_drizzy_agent(
|
|
44358
44358
|
subagent_type="explore",
|
|
44359
44359
|
run_in_background=true,
|
|
44360
44360
|
prompt="Find similar code patterns to [TARGET] in the codebase.
|
|
@@ -44362,7 +44362,7 @@ call_omo_agent(
|
|
|
44362
44362
|
)
|
|
44363
44363
|
|
|
44364
44364
|
// Agent 4: Find tests
|
|
44365
|
-
|
|
44365
|
+
call_drizzy_agent(
|
|
44366
44366
|
subagent_type="explore",
|
|
44367
44367
|
run_in_background=true,
|
|
44368
44368
|
prompt="Find all test files related to [TARGET].
|
|
@@ -44370,7 +44370,7 @@ call_omo_agent(
|
|
|
44370
44370
|
)
|
|
44371
44371
|
|
|
44372
44372
|
// Agent 5: Architecture context
|
|
44373
|
-
|
|
44373
|
+
call_drizzy_agent(
|
|
44374
44374
|
subagent_type="explore",
|
|
44375
44375
|
run_in_background=true,
|
|
44376
44376
|
prompt="Find architectural patterns and module organization around [TARGET].
|
|
@@ -44511,7 +44511,7 @@ ls -la *_test.go
|
|
|
44511
44511
|
|
|
44512
44512
|
\`\`\`
|
|
44513
44513
|
// Find all tests related to target
|
|
44514
|
-
|
|
44514
|
+
call_drizzy_agent(
|
|
44515
44515
|
subagent_type="explore",
|
|
44516
44516
|
run_in_background=false, // Need this synchronously
|
|
44517
44517
|
prompt="Analyze test coverage for [TARGET]:
|
|
@@ -49272,7 +49272,7 @@ function isAllowedFile(filePath, workspaceRoot) {
|
|
|
49272
49272
|
}
|
|
49273
49273
|
|
|
49274
49274
|
// src/hooks/planner-md-only/hook.ts
|
|
49275
|
-
var TASK_TOOLS = ["task", "
|
|
49275
|
+
var TASK_TOOLS = ["task", "call_drizzy_agent"];
|
|
49276
49276
|
function createPlannerMdOnlyHook(ctx) {
|
|
49277
49277
|
return {
|
|
49278
49278
|
"tool.execute.before": async (input, output) => {
|
|
@@ -49477,7 +49477,7 @@ function createCoderJuniorNotepadHook(ctx) {
|
|
|
49477
49477
|
};
|
|
49478
49478
|
}
|
|
49479
49479
|
// src/hooks/task-resume-info/hook.ts
|
|
49480
|
-
var TARGET_TOOLS2 = ["task", "Task", "task_tool", "
|
|
49480
|
+
var TARGET_TOOLS2 = ["task", "Task", "task_tool", "call_drizzy_agent"];
|
|
49481
49481
|
var SESSION_ID_PATTERNS = [
|
|
49482
49482
|
/Session ID: (ses_[a-zA-Z0-9_-]+)/,
|
|
49483
49483
|
/session_id: (ses_[a-zA-Z0-9_-]+)/,
|
|
@@ -71449,7 +71449,7 @@ Status: ${task.status}`;
|
|
|
71449
71449
|
}
|
|
71450
71450
|
});
|
|
71451
71451
|
}
|
|
71452
|
-
// src/tools/call-
|
|
71452
|
+
// src/tools/call-drizzy-agent/constants.ts
|
|
71453
71453
|
var ALLOWED_AGENTS = [
|
|
71454
71454
|
"explore",
|
|
71455
71455
|
"librarian",
|
|
@@ -71459,7 +71459,7 @@ var ALLOWED_AGENTS = [
|
|
|
71459
71459
|
"plan-reviewer",
|
|
71460
71460
|
"multimodal-looker"
|
|
71461
71461
|
];
|
|
71462
|
-
var
|
|
71462
|
+
var CALL_DRIZZY_AGENT_DESCRIPTION = `Spawn explore/librarian agent. run_in_background REQUIRED (true=async with task_id, false=sync).
|
|
71463
71463
|
|
|
71464
71464
|
Available: {agents}
|
|
71465
71465
|
|
|
@@ -71523,14 +71523,14 @@ function buildFallbackChainFromModels(fallbackModels, contextProviderID, default
|
|
|
71523
71523
|
return;
|
|
71524
71524
|
return parsed;
|
|
71525
71525
|
}
|
|
71526
|
-
// src/tools/call-
|
|
71526
|
+
// src/tools/call-drizzy-agent/background-executor.ts
|
|
71527
71527
|
async function executeBackground(args, toolContext, manager, client2, fallbackChain) {
|
|
71528
71528
|
try {
|
|
71529
71529
|
const messageDir = getMessageDir(toolContext.sessionID);
|
|
71530
71530
|
const { prevMessage, firstMessageAgent } = await resolveMessageContext(toolContext.sessionID, client2, messageDir);
|
|
71531
71531
|
const sessionAgent = getSessionAgent(toolContext.sessionID);
|
|
71532
71532
|
const parentAgent = toolContext.agent ?? sessionAgent ?? firstMessageAgent ?? prevMessage?.agent;
|
|
71533
|
-
log("[
|
|
71533
|
+
log("[call_drizzy_agent] parentAgent resolution", {
|
|
71534
71534
|
sessionID: toolContext.sessionID,
|
|
71535
71535
|
messageDir,
|
|
71536
71536
|
ctxAgent: toolContext.agent,
|
|
@@ -71568,10 +71568,10 @@ Task ID: ${task.id}`;
|
|
|
71568
71568
|
await new Promise((resolve16) => setTimeout(resolve16, WAIT_FOR_SESSION_INTERVAL_MS));
|
|
71569
71569
|
sessionId = manager.getTask(task.id)?.sessionID;
|
|
71570
71570
|
}
|
|
71571
|
-
await toolContext.metadata?.({
|
|
71571
|
+
await Promise.resolve(toolContext.metadata?.({
|
|
71572
71572
|
title: args.description,
|
|
71573
71573
|
metadata: { sessionId: sessionId ?? "pending" }
|
|
71574
|
-
});
|
|
71574
|
+
}));
|
|
71575
71575
|
return `Background agent task launched successfully.
|
|
71576
71576
|
|
|
71577
71577
|
Task ID: ${task.id}
|
|
@@ -71590,9 +71590,9 @@ Use \`background_output\` tool with task_id="${task.id}" to check progress:
|
|
|
71590
71590
|
}
|
|
71591
71591
|
}
|
|
71592
71592
|
|
|
71593
|
-
// src/tools/call-
|
|
71593
|
+
// src/tools/call-drizzy-agent/completion-poller.ts
|
|
71594
71594
|
async function waitForCompletion(sessionID, toolContext, ctx) {
|
|
71595
|
-
log(`[
|
|
71595
|
+
log(`[call_drizzy_agent] Polling for completion...`);
|
|
71596
71596
|
const POLL_INTERVAL_MS = 500;
|
|
71597
71597
|
const MAX_POLL_TIME_MS = 5 * 60 * 1000;
|
|
71598
71598
|
const pollStart = Date.now();
|
|
@@ -71601,7 +71601,7 @@ async function waitForCompletion(sessionID, toolContext, ctx) {
|
|
|
71601
71601
|
const STABILITY_REQUIRED = 3;
|
|
71602
71602
|
while (Date.now() - pollStart < MAX_POLL_TIME_MS) {
|
|
71603
71603
|
if (toolContext.abort?.aborted) {
|
|
71604
|
-
log(`[
|
|
71604
|
+
log(`[call_drizzy_agent] Aborted by user`);
|
|
71605
71605
|
throw new Error("Task aborted.");
|
|
71606
71606
|
}
|
|
71607
71607
|
await new Promise((resolve16) => setTimeout(resolve16, POLL_INTERVAL_MS));
|
|
@@ -71621,7 +71621,7 @@ async function waitForCompletion(sessionID, toolContext, ctx) {
|
|
|
71621
71621
|
if (currentMsgCount > 0 && currentMsgCount === lastMsgCount) {
|
|
71622
71622
|
stablePolls++;
|
|
71623
71623
|
if (stablePolls >= STABILITY_REQUIRED) {
|
|
71624
|
-
log(`[
|
|
71624
|
+
log(`[call_drizzy_agent] Session complete, ${currentMsgCount} messages`);
|
|
71625
71625
|
break;
|
|
71626
71626
|
}
|
|
71627
71627
|
} else {
|
|
@@ -71630,29 +71630,29 @@ async function waitForCompletion(sessionID, toolContext, ctx) {
|
|
|
71630
71630
|
}
|
|
71631
71631
|
}
|
|
71632
71632
|
if (Date.now() - pollStart >= MAX_POLL_TIME_MS) {
|
|
71633
|
-
log(`[
|
|
71633
|
+
log(`[call_drizzy_agent] Timeout reached`);
|
|
71634
71634
|
throw new Error("Agent task timed out after 5 minutes.");
|
|
71635
71635
|
}
|
|
71636
71636
|
}
|
|
71637
71637
|
|
|
71638
|
-
// src/tools/call-
|
|
71638
|
+
// src/tools/call-drizzy-agent/message-processor.ts
|
|
71639
71639
|
async function processMessages(sessionID, ctx) {
|
|
71640
71640
|
const messagesResult = await ctx.client.session.messages({
|
|
71641
71641
|
path: { id: sessionID }
|
|
71642
71642
|
});
|
|
71643
71643
|
if (messagesResult.error) {
|
|
71644
|
-
log(`[
|
|
71644
|
+
log(`[call_drizzy_agent] Messages error:`, messagesResult.error);
|
|
71645
71645
|
throw new Error(`Failed to get messages: ${messagesResult.error}`);
|
|
71646
71646
|
}
|
|
71647
71647
|
const messages = messagesResult.data;
|
|
71648
|
-
log(`[
|
|
71648
|
+
log(`[call_drizzy_agent] Got ${messages.length} messages`);
|
|
71649
71649
|
const relevantMessages = messages.filter((m) => m.info?.role === "assistant" || m.info?.role === "tool");
|
|
71650
71650
|
if (relevantMessages.length === 0) {
|
|
71651
|
-
log(`[
|
|
71652
|
-
log(`[
|
|
71651
|
+
log(`[call_drizzy_agent] No assistant or tool messages found`);
|
|
71652
|
+
log(`[call_drizzy_agent] All messages:`, JSON.stringify(messages, null, 2));
|
|
71653
71653
|
throw new Error("No assistant or tool response found");
|
|
71654
71654
|
}
|
|
71655
|
-
log(`[
|
|
71655
|
+
log(`[call_drizzy_agent] Found ${relevantMessages.length} relevant messages`);
|
|
71656
71656
|
const sortedMessages = [...relevantMessages].sort((a, b) => {
|
|
71657
71657
|
const timeA = a.info?.time?.created ?? 0;
|
|
71658
71658
|
const timeB = b.info?.time?.created ?? 0;
|
|
@@ -71684,31 +71684,31 @@ async function processMessages(sessionID, ctx) {
|
|
|
71684
71684
|
const responseText = extractedContent.filter((text) => text.length > 0).join(`
|
|
71685
71685
|
|
|
71686
71686
|
`);
|
|
71687
|
-
log(`[
|
|
71687
|
+
log(`[call_drizzy_agent] Got response, length: ${responseText.length}`);
|
|
71688
71688
|
return responseText;
|
|
71689
71689
|
}
|
|
71690
71690
|
|
|
71691
|
-
// src/tools/call-
|
|
71691
|
+
// src/tools/call-drizzy-agent/session-creator.ts
|
|
71692
71692
|
async function createOrGetSession(args, toolContext, ctx) {
|
|
71693
71693
|
if (args.session_id) {
|
|
71694
|
-
log(`[
|
|
71694
|
+
log(`[call_drizzy_agent] Using existing session: ${args.session_id}`);
|
|
71695
71695
|
const sessionResult = await ctx.client.session.get({
|
|
71696
71696
|
path: { id: args.session_id }
|
|
71697
71697
|
});
|
|
71698
71698
|
if (sessionResult.error) {
|
|
71699
|
-
log(`[
|
|
71699
|
+
log(`[call_drizzy_agent] Session get error:`, sessionResult.error);
|
|
71700
71700
|
throw new Error(`Failed to get existing session: ${sessionResult.error}`);
|
|
71701
71701
|
}
|
|
71702
71702
|
return { sessionID: args.session_id, isNew: false };
|
|
71703
71703
|
} else {
|
|
71704
|
-
log(`[
|
|
71704
|
+
log(`[call_drizzy_agent] Creating new session with parent: ${toolContext.sessionID}`);
|
|
71705
71705
|
const parentSession = await ctx.client.session.get({
|
|
71706
71706
|
path: { id: toolContext.sessionID }
|
|
71707
71707
|
}).catch((err) => {
|
|
71708
|
-
log(`[
|
|
71708
|
+
log(`[call_drizzy_agent] Failed to get parent session:`, err);
|
|
71709
71709
|
return null;
|
|
71710
71710
|
});
|
|
71711
|
-
log(`[
|
|
71711
|
+
log(`[call_drizzy_agent] Parent session dir: ${parentSession?.data?.directory}, fallback: ${ctx.directory}`);
|
|
71712
71712
|
const parentDirectory = parentSession?.data?.directory ?? ctx.directory;
|
|
71713
71713
|
const createResult = await ctx.client.session.create({
|
|
71714
71714
|
body: {
|
|
@@ -71720,7 +71720,7 @@ async function createOrGetSession(args, toolContext, ctx) {
|
|
|
71720
71720
|
}
|
|
71721
71721
|
});
|
|
71722
71722
|
if (createResult.error) {
|
|
71723
|
-
log(`[
|
|
71723
|
+
log(`[call_drizzy_agent] Session create error:`, createResult.error);
|
|
71724
71724
|
const errorStr = String(createResult.error);
|
|
71725
71725
|
if (errorStr.toLowerCase().includes("unauthorized")) {
|
|
71726
71726
|
throw new Error(`Failed to create session (Unauthorized). This may be due to:
|
|
@@ -71735,14 +71735,14 @@ Original error: ${createResult.error}`);
|
|
|
71735
71735
|
throw new Error(`Failed to create session: ${createResult.error}`);
|
|
71736
71736
|
}
|
|
71737
71737
|
const sessionID = createResult.data.id;
|
|
71738
|
-
log(`[
|
|
71738
|
+
log(`[call_drizzy_agent] Created session: ${sessionID}`);
|
|
71739
71739
|
subagentSessions.add(sessionID);
|
|
71740
71740
|
syncSubagentSessions.add(sessionID);
|
|
71741
71741
|
return { sessionID, isNew: true };
|
|
71742
71742
|
}
|
|
71743
71743
|
}
|
|
71744
71744
|
|
|
71745
|
-
// src/tools/call-
|
|
71745
|
+
// src/tools/call-drizzy-agent/sync-executor.ts
|
|
71746
71746
|
var defaultDeps = {
|
|
71747
71747
|
createOrGetSession,
|
|
71748
71748
|
waitForCompletion,
|
|
@@ -71771,8 +71771,8 @@ async function executeSync(args, toolContext, ctx, deps = defaultDeps, fallbackC
|
|
|
71771
71771
|
title: args.description,
|
|
71772
71772
|
metadata: { sessionId: sessionID }
|
|
71773
71773
|
}));
|
|
71774
|
-
log(`[
|
|
71775
|
-
log(`[
|
|
71774
|
+
log(`[call_drizzy_agent] Sending prompt to session ${sessionID}`);
|
|
71775
|
+
log(`[call_drizzy_agent] Prompt text:`, args.prompt.substring(0, 100));
|
|
71776
71776
|
try {
|
|
71777
71777
|
await ctx.client.session.promptAsync({
|
|
71778
71778
|
path: { id: sessionID },
|
|
@@ -71788,7 +71788,7 @@ async function executeSync(args, toolContext, ctx, deps = defaultDeps, fallbackC
|
|
|
71788
71788
|
});
|
|
71789
71789
|
} catch (error92) {
|
|
71790
71790
|
const errorMessage = error92 instanceof Error ? error92.message : String(error92);
|
|
71791
|
-
log(`[
|
|
71791
|
+
log(`[call_drizzy_agent] Prompt error:`, errorMessage);
|
|
71792
71792
|
if (errorMessage.includes("agent.name") || errorMessage.includes("undefined")) {
|
|
71793
71793
|
return `Error: Agent "${args.subagent_type}" not found. Make sure the agent is registered in your opencode.json or provided by a plugin.
|
|
71794
71794
|
|
|
@@ -71822,8 +71822,8 @@ session_id: ${sessionID}
|
|
|
71822
71822
|
}
|
|
71823
71823
|
}
|
|
71824
71824
|
|
|
71825
|
-
// src/tools/call-
|
|
71826
|
-
function
|
|
71825
|
+
// src/tools/call-drizzy-agent/tools.ts
|
|
71826
|
+
function resolveFallbackChainForCallDrizzyAgent(args) {
|
|
71827
71827
|
const { subagentType, agentOverrides, userCategories } = args;
|
|
71828
71828
|
const agentConfigKey = getAgentConfigKey(subagentType);
|
|
71829
71829
|
const agentRequirement = AGENT_MODEL_REQUIREMENTS[agentConfigKey];
|
|
@@ -71833,10 +71833,10 @@ function resolveFallbackChainForCallOmoAgent(args) {
|
|
|
71833
71833
|
const configuredFallbackChain = buildFallbackChainFromModels(normalizedFallbackModels, defaultProviderID);
|
|
71834
71834
|
return configuredFallbackChain ?? agentRequirement?.fallbackChain;
|
|
71835
71835
|
}
|
|
71836
|
-
function
|
|
71836
|
+
function createCallDrizzyAgent(ctx, backgroundManager, disabledAgents = [], agentOverrides, userCategories) {
|
|
71837
71837
|
const agentDescriptions = ALLOWED_AGENTS.map((name) => `- ${name}: Specialized agent for ${name} tasks`).join(`
|
|
71838
71838
|
`);
|
|
71839
|
-
const description =
|
|
71839
|
+
const description = CALL_DRIZZY_AGENT_DESCRIPTION.replace("{agents}", agentDescriptions);
|
|
71840
71840
|
return tool({
|
|
71841
71841
|
description,
|
|
71842
71842
|
args: {
|
|
@@ -71848,7 +71848,7 @@ function createCallOmoAgent(ctx, backgroundManager, disabledAgents = [], agentOv
|
|
|
71848
71848
|
},
|
|
71849
71849
|
async execute(args, toolContext) {
|
|
71850
71850
|
const toolCtx = toolContext;
|
|
71851
|
-
log(`[
|
|
71851
|
+
log(`[call_drizzy_agent] Starting with agent: ${args.subagent_type}, background: ${args.run_in_background}`);
|
|
71852
71852
|
if (!ALLOWED_AGENTS.some((name) => name.toLowerCase() === args.subagent_type.toLowerCase())) {
|
|
71853
71853
|
return `Error: Invalid agent type "${args.subagent_type}". Only ${ALLOWED_AGENTS.join(", ")} are allowed.`;
|
|
71854
71854
|
}
|
|
@@ -71857,7 +71857,7 @@ function createCallOmoAgent(ctx, backgroundManager, disabledAgents = [], agentOv
|
|
|
71857
71857
|
if (disabledAgents.some((disabled) => disabled.toLowerCase() === normalizedAgent)) {
|
|
71858
71858
|
return `Error: Agent "${normalizedAgent}" is disabled via disabled_agents configuration. Remove it from disabled_agents in your drizzy-agent.json to use it.`;
|
|
71859
71859
|
}
|
|
71860
|
-
const fallbackChain =
|
|
71860
|
+
const fallbackChain = resolveFallbackChainForCallDrizzyAgent({
|
|
71861
71861
|
subagentType: args.subagent_type,
|
|
71862
71862
|
agentOverrides,
|
|
71863
71863
|
userCategories
|
|
@@ -72385,7 +72385,7 @@ Original error: ${createResult.error}`;
|
|
|
72385
72385
|
agent: MULTIMODAL_LOOKER_AGENT,
|
|
72386
72386
|
tools: {
|
|
72387
72387
|
task: false,
|
|
72388
|
-
|
|
72388
|
+
call_drizzy_agent: false,
|
|
72389
72389
|
look_at: false,
|
|
72390
72390
|
read: false
|
|
72391
72391
|
},
|
|
@@ -72737,8 +72737,8 @@ BEFORE you begin planning, you MUST first understand the user's request deeply.
|
|
|
72737
72737
|
|
|
72738
72738
|
MANDATORY CONTEXT GATHERING PROTOCOL:
|
|
72739
72739
|
1. Launch background agents to gather context:
|
|
72740
|
-
-
|
|
72741
|
-
-
|
|
72740
|
+
- call_drizzy_agent(description="Explore codebase patterns", subagent_type="explore", run_in_background=true, prompt="<search for relevant patterns, files, and implementations in the codebase related to user's request>")
|
|
72741
|
+
- call_drizzy_agent(description="Research documentation", subagent_type="librarian", run_in_background=true, prompt="<search for external documentation, examples, and best practices related to user's request>")
|
|
72742
72742
|
|
|
72743
72743
|
2. After gathering context, ALWAYS present:
|
|
72744
72744
|
- **User Request Summary**: Concise restatement of what the user is asking for
|
|
@@ -73601,7 +73601,7 @@ async function executeSyncContinuation(args, ctx, executorCtx, deps = syncContin
|
|
|
73601
73601
|
const tools = {
|
|
73602
73602
|
...resumeAgent ? getAgentToolRestrictions(resumeAgent) : {},
|
|
73603
73603
|
task: allowTask,
|
|
73604
|
-
|
|
73604
|
+
call_drizzy_agent: true,
|
|
73605
73605
|
question: false
|
|
73606
73606
|
};
|
|
73607
73607
|
setSessionTools(args.session_id, tools);
|
|
@@ -73975,7 +73975,7 @@ async function sendSyncPrompt(client2, input, deps = sendSyncPromptDeps) {
|
|
|
73975
73975
|
const effectivePrompt = buildTaskPrompt(input.args.prompt, input.agentToUse);
|
|
73976
73976
|
const tools = {
|
|
73977
73977
|
task: allowTask,
|
|
73978
|
-
|
|
73978
|
+
call_drizzy_agent: true,
|
|
73979
73979
|
question: false,
|
|
73980
73980
|
...getAgentToolRestrictions(input.agentToUse)
|
|
73981
73981
|
};
|
|
@@ -74642,45 +74642,56 @@ function createDelegateTask(options) {
|
|
|
74642
74642
|
}).join(`
|
|
74643
74643
|
`);
|
|
74644
74644
|
const description = `Spawn agent task with category-based or direct agent selection.
|
|
74645
|
-
|
|
74646
|
-
|
|
74647
|
-
|
|
74648
|
-
|
|
74649
|
-
|
|
74650
|
-
|
|
74651
|
-
|
|
74652
|
-
|
|
74653
|
-
|
|
74654
|
-
|
|
74655
|
-
|
|
74656
|
-
|
|
74657
|
-
|
|
74658
|
-
|
|
74659
|
-
|
|
74660
|
-
|
|
74661
|
-
|
|
74662
|
-
|
|
74663
|
-
|
|
74664
|
-
|
|
74665
|
-
|
|
74666
|
-
|
|
74667
|
-
|
|
74668
|
-
|
|
74669
|
-
|
|
74670
|
-
|
|
74671
|
-
|
|
74672
|
-
|
|
74673
|
-
|
|
74674
|
-
|
|
74675
|
-
|
|
74676
|
-
|
|
74677
|
-
|
|
74678
|
-
|
|
74679
|
-
|
|
74680
|
-
|
|
74681
|
-
|
|
74682
|
-
|
|
74683
|
-
|
|
74645
|
+
|
|
74646
|
+
\u26A0\uFE0F CRITICAL: You MUST provide EITHER category OR subagent_type. Omitting BOTH will FAIL.
|
|
74647
|
+
|
|
74648
|
+
## Decision Table \u2014 Pick ONE Parameter
|
|
74649
|
+
|
|
74650
|
+
| Task Type | Parameter | Spawns | When to Use |
|
|
74651
|
+
|---|---|---|---|
|
|
74652
|
+
| **Implementation** (code, fix, write) | \`category="quick|visual-engineering|..."\` | Coder-Junior with domain-optimized model | Writing code, fixing bugs, implementing features |
|
|
74653
|
+
| **Research/Exploration** (search codebase) | \`subagent_type="explore"\` | Contextual grep agent | Finding patterns, exploring unfamiliar code |
|
|
74654
|
+
| **Reference Search** (docs, OSS, web) | \`subagent_type="librarian"\` | External search agent | Official docs, GitHub examples, API references |
|
|
74655
|
+
| **Consultation** (architecture, debugging) | \`subagent_type="oracle"\` | Read-only expert | Complex decisions, failure recovery, design review |
|
|
74656
|
+
| **Planning** (complex multi-step) | \`subagent_type="plan-consultant"\` | Planning specialist | Breaking down ambiguous work before implementing |
|
|
74657
|
+
|
|
74658
|
+
**Available Categories:**
|
|
74659
|
+
${categoryList}
|
|
74660
|
+
|
|
74661
|
+
**Anti-Patterns (DO NOT):**
|
|
74662
|
+
\`\`\`
|
|
74663
|
+
// \u274C FAILS \u2014 missing both category AND subagent_type
|
|
74664
|
+
task(description="...", prompt="...")
|
|
74665
|
+
|
|
74666
|
+
// \u274C Confusing \u2014 using subagent_type for implementation
|
|
74667
|
+
task(subagent_type="explore", prompt="Write the auth middleware...")
|
|
74668
|
+
|
|
74669
|
+
// \u274C Redundant \u2014 both provided (category wins, subagent_type ignored)
|
|
74670
|
+
task(category="quick", subagent_type="explore", ...)
|
|
74671
|
+
\`\`\`
|
|
74672
|
+
|
|
74673
|
+
**Correct Examples:**
|
|
74674
|
+
\`\`\`
|
|
74675
|
+
// \u2705 Implementation \u2192 use category
|
|
74676
|
+
task(category="quick", load_skills=[], description="Fix type error", prompt="...")
|
|
74677
|
+
|
|
74678
|
+
// \u2705 Research \u2192 use subagent_type
|
|
74679
|
+
task(subagent_type="explore", load_skills=[], description="Find auth patterns", prompt="...", run_in_background=true)
|
|
74680
|
+
|
|
74681
|
+
// \u2705 Follow-up \u2192 use session_id
|
|
74682
|
+
task(session_id="ses_abc123", load_skills=[], description="Fix error", prompt="Fix: Type error on line 42")
|
|
74683
|
+
\`\`\`
|
|
74684
|
+
|
|
74685
|
+
**Additional Parameters:**
|
|
74686
|
+
- \`load_skills\`: ALWAYS REQUIRED. Pass [] if none needed, or ["skill-1", "skill-2"] for domain expertise.
|
|
74687
|
+
- \`run_in_background\`: true=async (returns task_id), false=sync (waits). Default: false. Use background=true ONLY for parallel exploration with 5+ independent queries.
|
|
74688
|
+
- \`session_id\`: Continue existing session (saves 70%+ tokens vs starting fresh).
|
|
74689
|
+
- Task failed \u2192 \`session_id\` with "fix: [specific error]"
|
|
74690
|
+
- Follow-up question \u2192 \`session_id\` with additional context
|
|
74691
|
+
- Multi-turn \u2192 always use \`session_id\` instead of new task
|
|
74692
|
+
- \`command\`: The slash command that triggered this task (optional, for tracking).
|
|
74693
|
+
|
|
74694
|
+
Prompts MUST be in English.`;
|
|
74684
74695
|
return tool({
|
|
74685
74696
|
description,
|
|
74686
74697
|
args: {
|
|
@@ -78426,7 +78437,7 @@ class BackgroundManager {
|
|
|
78426
78437
|
tools: (() => {
|
|
78427
78438
|
const tools = {
|
|
78428
78439
|
task: false,
|
|
78429
|
-
|
|
78440
|
+
call_drizzy_agent: true,
|
|
78430
78441
|
question: false,
|
|
78431
78442
|
...getAgentToolRestrictions(input.agent)
|
|
78432
78443
|
};
|
|
@@ -78637,7 +78648,7 @@ class BackgroundManager {
|
|
|
78637
78648
|
tools: (() => {
|
|
78638
78649
|
const tools = {
|
|
78639
78650
|
task: false,
|
|
78640
|
-
|
|
78651
|
+
call_drizzy_agent: true,
|
|
78641
78652
|
question: false,
|
|
78642
78653
|
...getAgentToolRestrictions(existingTask.agent)
|
|
78643
78654
|
};
|
|
@@ -87239,7 +87250,7 @@ function createCoderAgent(model, availableAgents, availableToolNames, availableS
|
|
|
87239
87250
|
color: "#00CED1",
|
|
87240
87251
|
permission: {
|
|
87241
87252
|
question: "allow",
|
|
87242
|
-
|
|
87253
|
+
call_drizzy_agent: "deny"
|
|
87243
87254
|
},
|
|
87244
87255
|
reasoningEffort: "medium"
|
|
87245
87256
|
};
|
|
@@ -87264,7 +87275,7 @@ ${buildGeminiVerificationOverride()}
|
|
|
87264
87275
|
}
|
|
87265
87276
|
const permission = {
|
|
87266
87277
|
question: "allow",
|
|
87267
|
-
|
|
87278
|
+
call_drizzy_agent: "deny"
|
|
87268
87279
|
};
|
|
87269
87280
|
const base = {
|
|
87270
87281
|
description: "Powerful AI orchestrator. Plans obsessively with todos, assesses search complexity before exploration, delegates strategically via category+skills combinations. Uses explore for internal code (parallel-friendly), librarian for external docs. (Coder - DrizzyAgent)",
|
|
@@ -87558,7 +87569,7 @@ function createLibrarianAgent(model) {
|
|
|
87558
87569
|
"edit",
|
|
87559
87570
|
"apply_patch",
|
|
87560
87571
|
"task",
|
|
87561
|
-
"
|
|
87572
|
+
"call_drizzy_agent"
|
|
87562
87573
|
]);
|
|
87563
87574
|
return {
|
|
87564
87575
|
description: "Specialized codebase understanding agent for multi-repository analysis, searching remote codebases, retrieving official documentation, and finding implementation examples using GitHub CLI, Context7, and Web Search. MUST BE USED when users ask to look up code in remote repositories, explain library internals, or find usage examples in open source. (Librarian - DrizzyAgent)",
|
|
@@ -87875,7 +87886,7 @@ function createExploreAgent(model) {
|
|
|
87875
87886
|
"edit",
|
|
87876
87887
|
"apply_patch",
|
|
87877
87888
|
"task",
|
|
87878
|
-
"
|
|
87889
|
+
"call_drizzy_agent"
|
|
87879
87890
|
]);
|
|
87880
87891
|
return {
|
|
87881
87892
|
description: 'Contextual grep for codebases. Answers "Where is X?", "Which file has Y?", "Find the code that does Z". Fire multiple in parallel for broad searches. Specify thoroughness: "quick" for basic, "medium" for moderate, "very thorough" for comprehensive analysis. (Explore - DrizzyAgent)',
|
|
@@ -88083,9 +88094,9 @@ Confirm:
|
|
|
88083
88094
|
\`\`\`
|
|
88084
88095
|
// Launch these explore agents FIRST
|
|
88085
88096
|
// Prompt structure: CONTEXT + GOAL + QUESTION + REQUEST
|
|
88086
|
-
|
|
88087
|
-
|
|
88088
|
-
|
|
88097
|
+
call_drizzy_agent(subagent_type="explore", prompt="I'm analyzing a new feature request and need to understand existing patterns before asking clarifying questions. Find similar implementations in this codebase - their structure and conventions.")
|
|
88098
|
+
call_drizzy_agent(subagent_type="explore", prompt="I'm planning to build [feature type] and want to ensure consistency with the project. Find how similar features are organized - file structure, naming patterns, and architectural approach.")
|
|
88099
|
+
call_drizzy_agent(subagent_type="librarian", prompt="I'm implementing [technology] and need to understand best practices before making recommendations. Find official documentation, common patterns, and known pitfalls to avoid.")
|
|
88089
88100
|
\`\`\`
|
|
88090
88101
|
|
|
88091
88102
|
**Questions to Ask** (AFTER exploration):
|
|
@@ -88196,9 +88207,9 @@ Task(
|
|
|
88196
88207
|
**Investigation Structure**:
|
|
88197
88208
|
\`\`\`
|
|
88198
88209
|
// Parallel probes - Prompt structure: CONTEXT + GOAL + QUESTION + REQUEST
|
|
88199
|
-
|
|
88200
|
-
|
|
88201
|
-
|
|
88210
|
+
call_drizzy_agent(subagent_type="explore", prompt="I'm researching how to implement [feature] and need to understand the current approach. Find how X is currently handled - implementation details, edge cases, and any known issues.")
|
|
88211
|
+
call_drizzy_agent(subagent_type="librarian", prompt="I'm implementing Y and need authoritative guidance. Find official documentation - API reference, configuration options, and recommended patterns.")
|
|
88212
|
+
call_drizzy_agent(subagent_type="librarian", prompt="I'm looking for proven implementations of Z. Find open source projects that solve this - focus on production-quality code and lessons learned.")
|
|
88202
88213
|
\`\`\`
|
|
88203
88214
|
|
|
88204
88215
|
**Directives for Planner**:
|
|
@@ -88352,10 +88363,20 @@ ${buildAntiDuplicationSection()}
|
|
|
88352
88363
|
<delegation_system>
|
|
88353
88364
|
## How to Delegate
|
|
88354
88365
|
|
|
88355
|
-
|
|
88366
|
+
### Decision Table \u2014 Pick ONE Parameter
|
|
88367
|
+
|
|
88368
|
+
| Task Type | Parameter | Spawns | When to Use |
|
|
88369
|
+
|---|---|---|---|
|
|
88370
|
+
| **Implementation** (code, fix, write) | \`category="[category-name]"\` | Coder-Junior with domain-optimized model | Writing code, fixing bugs, implementing features |
|
|
88371
|
+
| **Research/Exploration** (search codebase) | \`subagent_type="explore"\` | Contextual grep agent | Finding patterns, exploring unfamiliar code |
|
|
88372
|
+
| **Reference Search** (docs, OSS, web) | \`subagent_type="librarian"\` | External search agent | Official docs, GitHub examples, API references |
|
|
88373
|
+
| **Consultation** (architecture, debugging) | \`subagent_type="oracle"\` | Read-only expert | Complex decisions, failure recovery, design review |
|
|
88374
|
+
| **Planning** (complex multi-step) | \`subagent_type="plan-consultant"\` | Planning specialist | Breaking down ambiguous work before implementing |
|
|
88375
|
+
|
|
88376
|
+
\u26A0\uFE0F **NEVER provide both category AND subagent_type \u2014 they are mutually exclusive.**
|
|
88356
88377
|
|
|
88357
88378
|
\`\`\`typescript
|
|
88358
|
-
//
|
|
88379
|
+
// \u2705 Implementation \u2192 use category
|
|
88359
88380
|
task(
|
|
88360
88381
|
category="[category-name]",
|
|
88361
88382
|
load_skills=["skill-1", "skill-2"],
|
|
@@ -88363,11 +88384,11 @@ task(
|
|
|
88363
88384
|
prompt="..."
|
|
88364
88385
|
)
|
|
88365
88386
|
|
|
88366
|
-
//
|
|
88387
|
+
// \u2705 Research/Consultation \u2192 use subagent_type
|
|
88367
88388
|
task(
|
|
88368
|
-
subagent_type="
|
|
88389
|
+
subagent_type="explore",
|
|
88369
88390
|
load_skills=[],
|
|
88370
|
-
run_in_background=
|
|
88391
|
+
run_in_background=true,
|
|
88371
88392
|
prompt="..."
|
|
88372
88393
|
)
|
|
88373
88394
|
\`\`\`
|
|
@@ -88830,13 +88851,23 @@ ${buildAntiDuplicationSection()}
|
|
|
88830
88851
|
<delegation_system>
|
|
88831
88852
|
## Delegation API
|
|
88832
88853
|
|
|
88833
|
-
|
|
88854
|
+
### Decision Table \u2014 Pick ONE Parameter
|
|
88855
|
+
|
|
88856
|
+
| Task Type | Parameter | Spawns | When to Use |
|
|
88857
|
+
|---|---|---|---|
|
|
88858
|
+
| **Implementation** (code, fix, write) | \`category="[category-name]"\` | Coder-Junior with domain-optimized model | Writing code, fixing bugs, implementing features |
|
|
88859
|
+
| **Research/Exploration** (search codebase) | \`subagent_type="explore"\` | Contextual grep agent | Finding patterns, exploring unfamiliar code |
|
|
88860
|
+
| **Reference Search** (docs, OSS, web) | \`subagent_type="librarian"\` | External search agent | Official docs, GitHub examples, API references |
|
|
88861
|
+
| **Consultation** (architecture, debugging) | \`subagent_type="oracle"\` | Read-only expert | Complex decisions, failure recovery, design review |
|
|
88862
|
+
| **Planning** (complex multi-step) | \`subagent_type="plan-consultant"\` | Planning specialist | Breaking down ambiguous work before implementing |
|
|
88863
|
+
|
|
88864
|
+
\u26A0\uFE0F **NEVER provide both category AND subagent_type \u2014 they are mutually exclusive.**
|
|
88834
88865
|
|
|
88835
88866
|
\`\`\`typescript
|
|
88836
|
-
//
|
|
88867
|
+
// \u2705 Implementation \u2192 use category
|
|
88837
88868
|
task(category="[name]", load_skills=["skill-1"], run_in_background=false, prompt="...")
|
|
88838
88869
|
|
|
88839
|
-
//
|
|
88870
|
+
// \u2705 Research/Consultation \u2192 use subagent_type
|
|
88840
88871
|
task(subagent_type="[agent]", load_skills=[], run_in_background=false, prompt="...")
|
|
88841
88872
|
\`\`\`
|
|
88842
88873
|
|
|
@@ -89234,13 +89265,23 @@ ${buildAntiDuplicationSection()}
|
|
|
89234
89265
|
<delegation_system>
|
|
89235
89266
|
## How to Delegate
|
|
89236
89267
|
|
|
89237
|
-
|
|
89268
|
+
### Decision Table \u2014 Pick ONE Parameter
|
|
89269
|
+
|
|
89270
|
+
| Task Type | Parameter | Spawns | When to Use |
|
|
89271
|
+
|---|---|---|---|
|
|
89272
|
+
| **Implementation** (code, fix, write) | \`category="[category-name]"\` | Coder-Junior with domain-optimized model | Writing code, fixing bugs, implementing features |
|
|
89273
|
+
| **Research/Exploration** (search codebase) | \`subagent_type="explore"\` | Contextual grep agent | Finding patterns, exploring unfamiliar code |
|
|
89274
|
+
| **Reference Search** (docs, OSS, web) | \`subagent_type="librarian"\` | External search agent | Official docs, GitHub examples, API references |
|
|
89275
|
+
| **Consultation** (architecture, debugging) | \`subagent_type="oracle"\` | Read-only expert | Complex decisions, failure recovery, design review |
|
|
89276
|
+
| **Planning** (complex multi-step) | \`subagent_type="plan-consultant"\` | Planning specialist | Breaking down ambiguous work before implementing |
|
|
89277
|
+
|
|
89278
|
+
\u26A0\uFE0F **NEVER provide both category AND subagent_type \u2014 they are mutually exclusive.**
|
|
89238
89279
|
|
|
89239
89280
|
\`\`\`typescript
|
|
89240
|
-
//
|
|
89281
|
+
// \u2705 Implementation \u2192 use category
|
|
89241
89282
|
task(category="[name]", load_skills=["skill-1"], run_in_background=false, prompt="...")
|
|
89242
89283
|
|
|
89243
|
-
//
|
|
89284
|
+
// \u2705 Research/Consultation \u2192 use subagent_type
|
|
89244
89285
|
task(subagent_type="[agent]", load_skills=[], run_in_background=false, prompt="...")
|
|
89245
89286
|
\`\`\`
|
|
89246
89287
|
|
|
@@ -90819,7 +90860,7 @@ function createGptcoderAgent(model, availableAgents, availableToolNames, availab
|
|
|
90819
90860
|
color: "#D97706",
|
|
90820
90861
|
permission: {
|
|
90821
90862
|
question: "allow",
|
|
90822
|
-
|
|
90863
|
+
call_drizzy_agent: "deny"
|
|
90823
90864
|
},
|
|
90824
90865
|
reasoningEffort: "medium"
|
|
90825
90866
|
};
|
|
@@ -91239,7 +91280,7 @@ function createGptcoderAgent2(model, availableAgents, availableToolNames, availa
|
|
|
91239
91280
|
color: "#D97706",
|
|
91240
91281
|
permission: {
|
|
91241
91282
|
question: "allow",
|
|
91242
|
-
|
|
91283
|
+
call_drizzy_agent: "deny"
|
|
91243
91284
|
},
|
|
91244
91285
|
reasoningEffort: "medium"
|
|
91245
91286
|
};
|
|
@@ -91351,7 +91392,7 @@ When blocked: try a different approach \u2192 decompose the problem \u2192 chall
|
|
|
91351
91392
|
- Run verification (lint, tests, build) WITHOUT asking
|
|
91352
91393
|
- Make decisions. Course-correct only on CONCRETE failure
|
|
91353
91394
|
- Note assumptions in final message, not as questions mid-work
|
|
91354
|
-
- Need context? Fire explore/librarian via
|
|
91395
|
+
- Need context? Fire explore/librarian via call_drizzy_agent IMMEDIATELY \u2014 continue only with non-overlapping work while they search
|
|
91355
91396
|
|
|
91356
91397
|
## Scope Discipline
|
|
91357
91398
|
|
|
@@ -91369,7 +91410,7 @@ When blocked: try a different approach \u2192 decompose the problem \u2192 chall
|
|
|
91369
91410
|
|
|
91370
91411
|
<tool_usage_rules>
|
|
91371
91412
|
- Parallelize independent tool calls: multiple file reads, grep searches, agent fires \u2014 all at once
|
|
91372
|
-
- Explore/Librarian via
|
|
91413
|
+
- Explore/Librarian via call_drizzy_agent = background research. Fire them and continue only with non-overlapping work
|
|
91373
91414
|
- After any file edit: restate what changed, where, and what validation follows
|
|
91374
91415
|
- Prefer tools over guessing whenever you need specific data (files, configs, patterns)
|
|
91375
91416
|
- ALWAYS use tools over internal knowledge for file contents, project state, and verification
|
|
@@ -91489,7 +91530,7 @@ When blocked: try a different approach \u2192 decompose the problem \u2192 chall
|
|
|
91489
91530
|
- Run verification (lint, tests, build) WITHOUT asking
|
|
91490
91531
|
- Make decisions. Course-correct only on CONCRETE failure
|
|
91491
91532
|
- Note assumptions in final message, not as questions mid-work
|
|
91492
|
-
- Need context? Fire explore/librarian via
|
|
91533
|
+
- Need context? Fire explore/librarian via call_drizzy_agent IMMEDIATELY \u2014 continue only with non-overlapping work while they search
|
|
91493
91534
|
|
|
91494
91535
|
## Scope Discipline
|
|
91495
91536
|
|
|
@@ -91508,7 +91549,7 @@ When blocked: try a different approach \u2192 decompose the problem \u2192 chall
|
|
|
91508
91549
|
|
|
91509
91550
|
<tool_usage_rules>
|
|
91510
91551
|
- Parallelize independent tool calls: multiple file reads, grep searches, agent fires \u2014 all at once
|
|
91511
|
-
- Explore/Librarian via
|
|
91552
|
+
- Explore/Librarian via call_drizzy_agent = background research. Fire them and continue only with non-overlapping work
|
|
91512
91553
|
- After any file edit: restate what changed, where, and what validation follows
|
|
91513
91554
|
- Prefer tools over guessing whenever you need specific data (files, configs, patterns)
|
|
91514
91555
|
- ALWAYS use tools over internal knowledge for file contents, project state, and verification
|
|
@@ -91630,7 +91671,7 @@ When blocked: try a different approach \u2192 decompose the problem \u2192 chall
|
|
|
91630
91671
|
- Run verification (lint, tests, build) WITHOUT asking
|
|
91631
91672
|
- Make decisions. Course-correct only on CONCRETE failure
|
|
91632
91673
|
- Note assumptions in final message, not as questions mid-work
|
|
91633
|
-
- Need context? Fire explore/librarian via
|
|
91674
|
+
- Need context? Fire explore/librarian via call_drizzy_agent IMMEDIATELY \u2014 continue only with non-overlapping work while they search
|
|
91634
91675
|
|
|
91635
91676
|
## Scope Discipline
|
|
91636
91677
|
|
|
@@ -91648,7 +91689,7 @@ When blocked: try a different approach \u2192 decompose the problem \u2192 chall
|
|
|
91648
91689
|
|
|
91649
91690
|
<tool_usage_rules>
|
|
91650
91691
|
- Parallelize independent tool calls: multiple file reads, grep searches, agent fires \u2014 all at once
|
|
91651
|
-
- Explore/Librarian via
|
|
91692
|
+
- Explore/Librarian via call_drizzy_agent = background research. Fire them and continue only with non-overlapping work
|
|
91652
91693
|
- After any file edit: restate what changed, where, and what validation follows
|
|
91653
91694
|
- Prefer tools over guessing whenever you need specific data (files, configs, patterns)
|
|
91654
91695
|
- ALWAYS use tools over internal knowledge for file contents, project state, and verification
|
|
@@ -91784,7 +91825,7 @@ Before responding, ask yourself: What tools do I need to call? What am I assumin
|
|
|
91784
91825
|
- Run verification (lint, tests, build) WITHOUT asking
|
|
91785
91826
|
- Make decisions. Course-correct only on CONCRETE failure
|
|
91786
91827
|
- Note assumptions in final message, not as questions mid-work
|
|
91787
|
-
- Need context? Fire explore/librarian via
|
|
91828
|
+
- Need context? Fire explore/librarian via call_drizzy_agent IMMEDIATELY \u2014 continue only with non-overlapping work while they search
|
|
91788
91829
|
|
|
91789
91830
|
## Scope Discipline
|
|
91790
91831
|
|
|
@@ -91803,7 +91844,7 @@ Before responding, ask yourself: What tools do I need to call? What am I assumin
|
|
|
91803
91844
|
|
|
91804
91845
|
<tool_usage_rules>
|
|
91805
91846
|
- Parallelize independent tool calls: multiple file reads, grep searches, agent fires \u2014 all at once
|
|
91806
|
-
- Explore/Librarian via
|
|
91847
|
+
- Explore/Librarian via call_drizzy_agent = background research. Fire them and continue only with non-overlapping work
|
|
91807
91848
|
- After any file edit: restate what changed, where, and what validation follows
|
|
91808
91849
|
- Prefer tools over guessing whenever you need specific data (files, configs, patterns)
|
|
91809
91850
|
- ALWAYS use tools over internal knowledge for file contents, project state, and verification
|
|
@@ -91970,7 +92011,7 @@ function createCoderJuniorAgentWithOverrides(override, systemDefaultModel, useTa
|
|
|
91970
92011
|
for (const tool3 of BLOCKED_TOOLS3) {
|
|
91971
92012
|
merged[tool3] = "deny";
|
|
91972
92013
|
}
|
|
91973
|
-
merged.
|
|
92014
|
+
merged.call_drizzy_agent = "allow";
|
|
91974
92015
|
const toolsConfig = { permission: { ...merged, ...basePermission } };
|
|
91975
92016
|
const base = {
|
|
91976
92017
|
description: override?.description ?? "Focused task executor. Same discipline, no delegation. (Coder-Junior - DrizzyAgent)",
|
|
@@ -92350,7 +92391,7 @@ function createResearcherAgent(model) {
|
|
|
92350
92391
|
const restrictions = createAgentToolRestrictions([
|
|
92351
92392
|
"apply_patch",
|
|
92352
92393
|
"ast_grep_replace",
|
|
92353
|
-
"
|
|
92394
|
+
"call_drizzy_agent",
|
|
92354
92395
|
"interactive_bash",
|
|
92355
92396
|
"Bash",
|
|
92356
92397
|
"hashline_edit",
|
|
@@ -92508,7 +92549,7 @@ var createResearcherJuniorAgent = (model) => {
|
|
|
92508
92549
|
const restrictions = createAgentToolRestrictions([
|
|
92509
92550
|
"apply_patch",
|
|
92510
92551
|
"ast_grep_replace",
|
|
92511
|
-
"
|
|
92552
|
+
"call_drizzy_agent",
|
|
92512
92553
|
"interactive_bash",
|
|
92513
92554
|
"Bash",
|
|
92514
92555
|
"hashline_edit",
|
|
@@ -96054,7 +96095,7 @@ function applyToolConfig(params) {
|
|
|
96054
96095
|
orchestrator.permission = {
|
|
96055
96096
|
...orchestrator.permission,
|
|
96056
96097
|
task: "allow",
|
|
96057
|
-
|
|
96098
|
+
call_drizzy_agent: "deny",
|
|
96058
96099
|
"task_*": "allow",
|
|
96059
96100
|
teammate: "allow",
|
|
96060
96101
|
...denyTodoTools
|
|
@@ -96064,7 +96105,7 @@ function applyToolConfig(params) {
|
|
|
96064
96105
|
if (coder2) {
|
|
96065
96106
|
coder2.permission = {
|
|
96066
96107
|
...coder2.permission,
|
|
96067
|
-
|
|
96108
|
+
call_drizzy_agent: "deny",
|
|
96068
96109
|
task: "allow",
|
|
96069
96110
|
question: questionPermission,
|
|
96070
96111
|
"task_*": "allow",
|
|
@@ -96076,7 +96117,7 @@ function applyToolConfig(params) {
|
|
|
96076
96117
|
if (gptcoder) {
|
|
96077
96118
|
gptcoder.permission = {
|
|
96078
96119
|
...gptcoder.permission,
|
|
96079
|
-
|
|
96120
|
+
call_drizzy_agent: "deny",
|
|
96080
96121
|
task: "allow",
|
|
96081
96122
|
question: questionPermission,
|
|
96082
96123
|
...denyTodoTools
|
|
@@ -96086,7 +96127,7 @@ function applyToolConfig(params) {
|
|
|
96086
96127
|
if (planner) {
|
|
96087
96128
|
planner.permission = {
|
|
96088
96129
|
...planner.permission,
|
|
96089
|
-
|
|
96130
|
+
call_drizzy_agent: "deny",
|
|
96090
96131
|
task: "allow",
|
|
96091
96132
|
question: questionPermission,
|
|
96092
96133
|
"task_*": "allow",
|
|
@@ -96315,7 +96356,7 @@ function normalizeToolArgSchemas(toolDefinition) {
|
|
|
96315
96356
|
function createToolRegistry(args) {
|
|
96316
96357
|
const { ctx, pluginConfig, managers, skillContext, availableCategories } = args;
|
|
96317
96358
|
const backgroundTools = createBackgroundTools(managers.backgroundManager, ctx.client);
|
|
96318
|
-
const
|
|
96359
|
+
const callDrizzyAgent = createCallDrizzyAgent(ctx, managers.backgroundManager, pluginConfig.disabled_agents ?? [], pluginConfig.agents, pluginConfig.categories);
|
|
96319
96360
|
const isMultimodalLookerEnabled = !(pluginConfig.disabled_agents ?? []).some((agent) => agent.toLowerCase() === "multimodal-looker");
|
|
96320
96361
|
const lookAt = isMultimodalLookerEnabled ? createLookAt(ctx) : null;
|
|
96321
96362
|
const delegateTask = createDelegateTask({
|
|
@@ -96382,7 +96423,7 @@ function createToolRegistry(args) {
|
|
|
96382
96423
|
...createAstGrepTools(ctx),
|
|
96383
96424
|
...createSessionManagerTools(ctx),
|
|
96384
96425
|
...backgroundTools,
|
|
96385
|
-
|
|
96426
|
+
call_drizzy_agent: callDrizzyAgent,
|
|
96386
96427
|
...lookAt ? { look_at: lookAt } : {},
|
|
96387
96428
|
task: delegateTask,
|
|
96388
96429
|
skill_mcp: skillMcpTool,
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BackgroundManager } from "../../features/background-agent";
|
|
2
|
+
import type { PluginInput } from "@opencode-ai/plugin";
|
|
3
|
+
import type { CallDrizzyAgentArgs } from "./types";
|
|
4
|
+
import type { ToolContextWithMetadata } from "./tool-context-with-metadata";
|
|
5
|
+
export declare function executeBackgroundAgent(args: CallDrizzyAgentArgs, toolContext: ToolContextWithMetadata, manager: BackgroundManager, client: PluginInput["client"]): Promise<string>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CallDrizzyAgentArgs } from "./types";
|
|
2
2
|
import type { BackgroundManager } from "../../features/background-agent";
|
|
3
3
|
import type { PluginInput } from "@opencode-ai/plugin";
|
|
4
4
|
import type { FallbackEntry } from "../../shared/model-requirements";
|
|
5
|
-
export declare function executeBackground(args:
|
|
5
|
+
export declare function executeBackground(args: CallDrizzyAgentArgs, toolContext: {
|
|
6
6
|
sessionID: string;
|
|
7
7
|
messageID: string;
|
|
8
8
|
agent: string;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const ALLOWED_AGENTS: readonly ["explore", "librarian", "oracle", "gptcoder", "plan-consultant", "plan-reviewer", "multimodal-looker"];
|
|
2
|
+
export declare const CALL_DRIZZY_AGENT_DESCRIPTION = "Spawn explore/librarian agent. run_in_background REQUIRED (true=async with task_id, false=sync).\n\nAvailable: {agents}\n\nPass `session_id=<id>` to continue previous agent with full context. Nested subagent depth is tracked automatically and blocked past the configured limit. Prompts MUST be in English. Use `background_output` for async results.";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CallDrizzyAgentArgs } from "./types";
|
|
2
2
|
import type { PluginInput } from "@opencode-ai/plugin";
|
|
3
|
-
export declare function createOrGetSession(args:
|
|
3
|
+
export declare function createOrGetSession(args: CallDrizzyAgentArgs, toolContext: {
|
|
4
4
|
sessionID: string;
|
|
5
5
|
messageID: string;
|
|
6
6
|
agent: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { PluginInput } from "@opencode-ai/plugin";
|
|
2
|
-
import type {
|
|
2
|
+
import type { CallDrizzyAgentArgs } from "./types";
|
|
3
3
|
import type { ToolContextWithMetadata } from "./tool-context-with-metadata";
|
|
4
|
-
export declare function resolveOrCreateSessionId(ctx: PluginInput, args:
|
|
4
|
+
export declare function resolveOrCreateSessionId(ctx: PluginInput, args: CallDrizzyAgentArgs, toolContext: ToolContextWithMetadata): Promise<{
|
|
5
5
|
ok: true;
|
|
6
6
|
sessionID: string;
|
|
7
7
|
} | {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CallDrizzyAgentArgs } from "./types";
|
|
2
2
|
import type { PluginInput } from "@opencode-ai/plugin";
|
|
3
3
|
import { clearSessionFallbackChain, setSessionFallbackChain } from "../../hooks/model-fallback/hook";
|
|
4
4
|
import type { FallbackEntry } from "../../shared/model-requirements";
|
|
@@ -16,7 +16,7 @@ type SpawnReservation = {
|
|
|
16
16
|
commit: () => number;
|
|
17
17
|
rollback: () => void;
|
|
18
18
|
};
|
|
19
|
-
export declare function executeSync(args:
|
|
19
|
+
export declare function executeSync(args: CallDrizzyAgentArgs, toolContext: {
|
|
20
20
|
sessionID: string;
|
|
21
21
|
messageID: string;
|
|
22
22
|
agent: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type PluginInput, type ToolDefinition } from "@opencode-ai/plugin";
|
|
2
2
|
import type { BackgroundManager } from "../../features/background-agent";
|
|
3
3
|
import type { CategoriesConfig, AgentOverrides } from "../../config/schema";
|
|
4
|
-
export declare function
|
|
4
|
+
export declare function createCallDrizzyAgent(ctx: PluginInput, backgroundManager: BackgroundManager, disabledAgents?: string[], agentOverrides?: AgentOverrides, userCategories?: CategoriesConfig): ToolDefinition;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { ALLOWED_AGENTS } from "./constants";
|
|
2
2
|
export type AllowedAgentType = (typeof ALLOWED_AGENTS)[number];
|
|
3
|
-
export interface
|
|
3
|
+
export interface CallDrizzyAgentArgs {
|
|
4
4
|
description: string;
|
|
5
5
|
prompt: string;
|
|
6
6
|
subagent_type: string;
|
|
7
7
|
run_in_background: boolean;
|
|
8
8
|
session_id?: string;
|
|
9
9
|
}
|
|
10
|
-
export interface
|
|
10
|
+
export interface CallDrizzyAgentSyncResult {
|
|
11
11
|
title: string;
|
|
12
12
|
metadata: {
|
|
13
13
|
summary?: Array<{
|
|
@@ -30,5 +30,5 @@ export type ToolContextWithMetadata = {
|
|
|
30
30
|
metadata?: (input: {
|
|
31
31
|
title?: string;
|
|
32
32
|
metadata?: Record<string, unknown>;
|
|
33
|
-
}) => void
|
|
33
|
+
}) => void | Promise<void>;
|
|
34
34
|
};
|
|
@@ -17,7 +17,7 @@ export declare const CATEGORY_DESCRIPTIONS: Record<string, string>;
|
|
|
17
17
|
* then summarize user requirements and clarify uncertainties before proceeding.
|
|
18
18
|
* Also MANDATES dependency graphs, parallel execution analysis, and category+skill recommendations.
|
|
19
19
|
*/
|
|
20
|
-
export declare const PLAN_AGENT_SYSTEM_PREPEND_STATIC_BEFORE_SKILLS = "<system>\nBEFORE you begin planning, you MUST first understand the user's request deeply.\n\nMANDATORY CONTEXT GATHERING PROTOCOL:\n1. Launch background agents to gather context:\n -
|
|
20
|
+
export declare const PLAN_AGENT_SYSTEM_PREPEND_STATIC_BEFORE_SKILLS = "<system>\nBEFORE you begin planning, you MUST first understand the user's request deeply.\n\nMANDATORY CONTEXT GATHERING PROTOCOL:\n1. Launch background agents to gather context:\n - call_drizzy_agent(description=\"Explore codebase patterns\", subagent_type=\"explore\", run_in_background=true, prompt=\"<search for relevant patterns, files, and implementations in the codebase related to user's request>\")\n - call_drizzy_agent(description=\"Research documentation\", subagent_type=\"librarian\", run_in_background=true, prompt=\"<search for external documentation, examples, and best practices related to user's request>\")\n\n2. After gathering context, ALWAYS present:\n - **User Request Summary**: Concise restatement of what the user is asking for\n - **Uncertainties**: List of unclear points, ambiguities, or assumptions you're making\n - **Clarifying Questions**: Specific questions to resolve the uncertainties\n\n3. ITERATE until ALL requirements are crystal clear:\n - Do NOT proceed to planning until you have 100% clarity\n - Ask the user to confirm your understanding\n - Resolve every ambiguity before generating the work plan\n\nREMEMBER: Vague requirements lead to failed implementations. Take the time to understand thoroughly.\n</system>\n\n<CRITICAL_REQUIREMENT_DEPENDENCY_PARALLEL_EXECUTION_CATEGORY_SKILLS>\n#####################################################################\n# #\n# \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 #\n# \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557 #\n# \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551 #\n# \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551\u2584\u2584 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2551 #\n# \u2588\u2588\uFFFD\uFFFD \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D #\n# \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2580\u2580\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u255D #\n# #\n#####################################################################\n\nYOU MUST INCLUDE THE FOLLOWING SECTIONS IN YOUR PLAN OUTPUT.\nTHIS IS NON-NEGOTIABLE. FAILURE TO INCLUDE THESE SECTIONS = INCOMPLETE PLAN.\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\u2588 SECTION 1: TASK DEPENDENCY GRAPH (MANDATORY) \u2588\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nYOU MUST ANALYZE AND DOCUMENT TASK DEPENDENCIES.\n\nFor EVERY task in your plan, you MUST specify:\n- Which tasks it DEPENDS ON (blockers)\n- Which tasks DEPEND ON IT (dependents)\n- The REASON for each dependency\n\nExample format:\n```\n## Task Dependency Graph\n\n| Task | Depends On | Reason |\n|------|------------|--------|\n| Task 1 | None | Starting point, no prerequisites |\n| Task 2 | Task 1 | Requires output/artifact from Task 1 |\n| Task 3 | Task 1 | Uses same foundation established in Task 1 |\n| Task 4 | Task 2, Task 3 | Integrates results from both tasks |\n```\n\nWHY THIS MATTERS:\n- Executors need to know execution ORDER\n- Prevents blocked work from starting prematurely\n- Identifies critical path for project timeline\n\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\u2588 SECTION 2: PARALLEL EXECUTION GRAPH (MANDATORY) \u2588\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nYOU MUST IDENTIFY WHICH TASKS CAN RUN IN PARALLEL.\n\nAnalyze your dependency graph and group tasks into PARALLEL EXECUTION WAVES:\n\nExample format:\n```\n## Parallel Execution Graph\n\nWave 1 (Start immediately):\n\u251C\u2500\u2500 Task 1: [description] (no dependencies)\n\u2514\u2500\u2500 Task 5: [description] (no dependencies)\n\nWave 2 (After Wave 1 completes):\n\u251C\u2500\u2500 Task 2: [description] (depends: Task 1)\n\u251C\u2500\u2500 Task 3: [description] (depends: Task 1)\n\u2514\u2500\u2500 Task 6: [description] (depends: Task 5)\n\nWave 3 (After Wave 2 completes):\n\u2514\u2500\u2500 Task 4: [description] (depends: Task 2, Task 3)\n\nCritical Path: Task 1 \u2192 Task 2 \u2192 Task 4\nEstimated Parallel Speedup: 40% faster than sequential\n```\n\nWHY THIS MATTERS:\n- MASSIVE time savings through parallelization\n- Executors can dispatch multiple agents simultaneously\n- Identifies bottlenecks in the execution plan\n\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\u2588 SECTION 3: CATEGORY + SKILLS RECOMMENDATIONS (MANDATORY) \u2588\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nFOR EVERY TASK, YOU MUST RECOMMEND:\n1. Which CATEGORY to use for delegation\n2. Which SKILLS to load for the delegated agent\n";
|
|
21
21
|
export declare const PLAN_AGENT_SYSTEM_PREPEND_STATIC_AFTER_SKILLS = "### REQUIRED OUTPUT FORMAT\n\nFor EACH task, include a recommendation block:\n\n```\n### Task N: [Task Title]\n\n**Delegation Recommendation:**\n- Category: `[category-name]` - [reason for choice]\n- Skills: [`skill-1`, `skill-2`] - [reason each skill is needed]\n\n**Skills Evaluation:**\n- INCLUDED `skill-name`: [reason]\n- OMITTED `other-skill`: [reason domain doesn't overlap]\n```\n\nWHY THIS MATTERS:\n- Category determines the MODEL used for execution\n- Skills inject SPECIALIZED KNOWLEDGE into the executor\n- Missing a relevant skill = suboptimal execution\n- Wrong category = wrong model = poor results\n\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\u2588 RESPONSE FORMAT SPECIFICATION (MANDATORY) \u2588\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nYOUR PLAN OUTPUT MUST FOLLOW THIS EXACT STRUCTURE:\n\n```markdown\n# [Plan Title]\n\n## Context\n[User request summary, interview findings, research results]\n\n## Task Dependency Graph\n[Dependency table - see Section 1]\n\n## Parallel Execution Graph \n[Wave structure - see Section 2]\n\n## Tasks\n\n### Task 1: [Title]\n**Description**: [What to do]\n**Delegation Recommendation**:\n- Category: `[category]` - [reason]\n- Skills: [`skill-1`] - [reason]\n**Skills Evaluation**: [\u2705 included / \u274C omitted with reasons]\n**Depends On**: [Task IDs or \"None\"]\n**Acceptance Criteria**: [Verifiable conditions]\n\n### Task 2: [Title]\n[Same structure...]\n\n## Commit Strategy\n[How to commit changes atomically]\n\n## Success Criteria\n[Final verification steps]\n```\n\n#####################################################################\n# #\n# FAILURE TO INCLUDE THESE SECTIONS = PLAN WILL BE REJECTED #\n# BY PLAN REVIEWER. DO NOT SKIP. DO NOT ABBREVIATE. #\n# #\n#####################################################################\n</CRITICAL_REQUIREMENT_DEPENDENCY_PARALLEL_EXECUTION_CATEGORY_SKILLS>\n\n<FINAL_OUTPUT_FOR_CALLER>\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\u2588 SECTION 4: ACTIONABLE TODO LIST FOR CALLER (MANDATORY) \u2588\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nYOU MUST END YOUR RESPONSE WITH THIS SECTION.\n\n```markdown\n## TODO List (ADD THESE)\n\n> CALLER: Add these TODOs using TodoWrite/TaskCreate and execute by wave.\n\n### Wave 1 (Start Immediately - No Dependencies)\n\n- [ ] **1. [Task Title]**\n - What: [Clear implementation steps]\n - Depends: None\n - Blocks: [Tasks that depend on this]\n - Category: `category-name`\n - Skills: [`skill-1`, `skill-2`]\n - QA: [How to verify completion - specific command or check]\n\n- [ ] **N. [Task Title]**\n - What: [Steps]\n - Depends: None\n - Blocks: [...]\n - Category: `category-name`\n - Skills: [`skill-1`]\n - QA: [Verification]\n\n### Wave 2 (After Wave 1 Completes)\n\n- [ ] **2. [Task Title]**\n - What: [Steps]\n - Depends: 1\n - Blocks: [4]\n - Category: `category-name`\n - Skills: [`skill-1`]\n - QA: [Verification]\n\n[Continue for all waves...]\n\n## Execution Instructions\n\n1. **Wave 1**: Fire these tasks IN PARALLEL (no dependencies)\n ```\n task(category=\"...\", load_skills=[...], run_in_background=false, prompt=\"Task 1: ...\")\n task(category=\"...\", load_skills=[...], run_in_background=false, prompt=\"Task N: ...\")\n ```\n\n2. **Wave 2**: After Wave 1 completes, fire next wave IN PARALLEL\n ```\n task(category=\"...\", load_skills=[...], run_in_background=false, prompt=\"Task 2: ...\")\n ```\n\n3. Continue until all waves complete\n\n4. Final QA: Verify all tasks pass their QA criteria\n```\n\nWHY THIS FORMAT IS MANDATORY:\n- Caller can directly copy TODO items\n- Wave grouping enables parallel execution\n- Each task has clear task parameters\n- QA criteria ensure verifiable completion\n</FINAL_OUTPUT_FOR_CALLER>\n\n";
|
|
22
22
|
export declare function buildPlanAgentSkillsSection(categories?: AvailableCategory[], skills?: AvailableSkill[]): string;
|
|
23
23
|
export declare function buildPlanAgentSystemPrepend(categories?: AvailableCategory[], skills?: AvailableSkill[]): string;
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export { createSkillMcpTool } from "./skill-mcp";
|
|
|
12
12
|
import type { PluginInput, ToolDefinition } from "@opencode-ai/plugin";
|
|
13
13
|
import type { BackgroundManager } from "../features/background-agent";
|
|
14
14
|
type OpencodeClient = PluginInput["client"];
|
|
15
|
-
export {
|
|
15
|
+
export { createCallDrizzyAgent } from "./call-drizzy-agent";
|
|
16
16
|
export { createLookAt } from "./look-at";
|
|
17
17
|
export { createDelegateTask } from "./delegate-task";
|
|
18
18
|
export { createTaskCreateTool, createTaskGetTool, createTaskList, createTaskUpdateTool, } from "./task";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "drizzy-agent",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.2",
|
|
4
4
|
"description": "DrizzyAgent - AI agent plugin for OpenCode",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -76,17 +76,17 @@
|
|
|
76
76
|
"typescript": "^5.7.3"
|
|
77
77
|
},
|
|
78
78
|
"optionalDependencies": {
|
|
79
|
-
"drizzy-agent-darwin-arm64": "0.7.
|
|
80
|
-
"drizzy-agent-darwin-x64": "0.7.
|
|
81
|
-
"drizzy-agent-darwin-x64-baseline": "0.7.
|
|
82
|
-
"drizzy-agent-linux-arm64": "0.7.
|
|
83
|
-
"drizzy-agent-linux-arm64-musl": "0.7.
|
|
84
|
-
"drizzy-agent-linux-x64": "0.7.
|
|
85
|
-
"drizzy-agent-linux-x64-baseline": "0.7.
|
|
86
|
-
"drizzy-agent-linux-x64-musl": "0.7.
|
|
87
|
-
"drizzy-agent-linux-x64-musl-baseline": "0.7.
|
|
88
|
-
"drizzy-agent-windows-x64": "0.7.
|
|
89
|
-
"drizzy-agent-windows-x64-baseline": "0.7.
|
|
79
|
+
"drizzy-agent-darwin-arm64": "0.7.2",
|
|
80
|
+
"drizzy-agent-darwin-x64": "0.7.2",
|
|
81
|
+
"drizzy-agent-darwin-x64-baseline": "0.7.2",
|
|
82
|
+
"drizzy-agent-linux-arm64": "0.7.2",
|
|
83
|
+
"drizzy-agent-linux-arm64-musl": "0.7.2",
|
|
84
|
+
"drizzy-agent-linux-x64": "0.7.2",
|
|
85
|
+
"drizzy-agent-linux-x64-baseline": "0.7.2",
|
|
86
|
+
"drizzy-agent-linux-x64-musl": "0.7.2",
|
|
87
|
+
"drizzy-agent-linux-x64-musl-baseline": "0.7.2",
|
|
88
|
+
"drizzy-agent-windows-x64": "0.7.2",
|
|
89
|
+
"drizzy-agent-windows-x64-baseline": "0.7.2"
|
|
90
90
|
},
|
|
91
91
|
"overrides": {
|
|
92
92
|
"@opencode-ai/sdk": "^1.2.24"
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { BackgroundManager } from "../../features/background-agent";
|
|
2
|
-
import type { PluginInput } from "@opencode-ai/plugin";
|
|
3
|
-
import type { CallOmoAgentArgs } from "./types";
|
|
4
|
-
import type { ToolContextWithMetadata } from "./tool-context-with-metadata";
|
|
5
|
-
export declare function executeBackgroundAgent(args: CallOmoAgentArgs, toolContext: ToolContextWithMetadata, manager: BackgroundManager, client: PluginInput["client"]): Promise<string>;
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export declare const ALLOWED_AGENTS: readonly ["explore", "librarian", "oracle", "gptcoder", "plan-consultant", "plan-reviewer", "multimodal-looker"];
|
|
2
|
-
export declare const CALL_OMO_AGENT_DESCRIPTION = "Spawn explore/librarian agent. run_in_background REQUIRED (true=async with task_id, false=sync).\n\nAvailable: {agents}\n\nPass `session_id=<id>` to continue previous agent with full context. Nested subagent depth is tracked automatically and blocked past the configured limit. Prompts MUST be in English. Use `background_output` for async results.";
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|