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.
Files changed (27) hide show
  1. package/README.md +3 -1
  2. package/dist/agents/coder-junior/gpt-5-3-codex.d.ts +1 -1
  3. package/dist/agents/coder-junior/gpt-5-4.d.ts +1 -1
  4. package/dist/agents/coder-junior/gpt.d.ts +1 -1
  5. package/dist/agents/env-context.d.ts +1 -1
  6. package/dist/cli/index.js +12 -12
  7. package/dist/features/builtin-commands/templates/refactor.d.ts +1 -1
  8. package/dist/index.js +176 -135
  9. package/dist/tools/call-drizzy-agent/background-agent-executor.d.ts +5 -0
  10. package/dist/tools/{call-omo-agent → call-drizzy-agent}/background-executor.d.ts +2 -2
  11. package/dist/tools/call-drizzy-agent/constants.d.ts +2 -0
  12. package/dist/tools/{call-omo-agent → call-drizzy-agent}/index.d.ts +1 -1
  13. package/dist/tools/{call-omo-agent → call-drizzy-agent}/session-creator.d.ts +2 -2
  14. package/dist/tools/{call-omo-agent → call-drizzy-agent}/subagent-session-creator.d.ts +2 -2
  15. package/dist/tools/{call-omo-agent → call-drizzy-agent}/sync-executor.d.ts +2 -2
  16. package/dist/tools/{call-omo-agent → call-drizzy-agent}/tools.d.ts +1 -1
  17. package/dist/tools/{call-omo-agent → call-drizzy-agent}/types.d.ts +3 -3
  18. package/dist/tools/delegate-task/constants.d.ts +1 -1
  19. package/dist/tools/index.d.ts +1 -1
  20. package/package.json +12 -12
  21. package/dist/tools/call-omo-agent/background-agent-executor.d.ts +0 -5
  22. package/dist/tools/call-omo-agent/constants.d.ts +0 -2
  23. /package/dist/tools/{call-omo-agent → call-drizzy-agent}/completion-poller.d.ts +0 -0
  24. /package/dist/tools/{call-omo-agent → call-drizzy-agent}/message-dir.d.ts +0 -0
  25. /package/dist/tools/{call-omo-agent → call-drizzy-agent}/message-processor.d.ts +0 -0
  26. /package/dist/tools/{call-omo-agent → call-drizzy-agent}/message-storage-directory.d.ts +0 -0
  27. /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 (oh-my-opencode fork) with multi-agent orchestration. It provides a powerful system for coding tasks with specialized agents for different types of work.
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 call_omo_agent for research
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 call_omo_agent for research
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 call_omo_agent for research
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 OmO-specific environment context (timezone, locale).
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.0",
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.0",
29366
- "drizzy-agent-darwin-x64": "0.7.0",
29367
- "drizzy-agent-darwin-x64-baseline": "0.7.0",
29368
- "drizzy-agent-linux-arm64": "0.7.0",
29369
- "drizzy-agent-linux-arm64-musl": "0.7.0",
29370
- "drizzy-agent-linux-x64": "0.7.0",
29371
- "drizzy-agent-linux-x64-baseline": "0.7.0",
29372
- "drizzy-agent-linux-x64-musl": "0.7.0",
29373
- "drizzy-agent-linux-x64-musl-baseline": "0.7.0",
29374
- "drizzy-agent-windows-x64": "0.7.0",
29375
- "drizzy-agent-windows-x64-baseline": "0.7.0"
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
- call_omo_agent: false
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
- call_omo_agent: false
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
- "call_omo_agent",
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
- "call_omo_agent"
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 \`call_omo_agent\`:
44337
+ Fire ALL of these simultaneously using \`call_drizzy_agent\`:
44338
44338
 
44339
44339
  \`\`\`
44340
44340
  // Agent 1: Find the refactoring target
44341
- call_omo_agent(
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
- call_omo_agent(
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
- call_omo_agent(
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
- call_omo_agent(
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
- call_omo_agent(
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
- call_omo_agent(
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", "call_omo_agent"];
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", "call_omo_agent"];
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-omo-agent/constants.ts
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 CALL_OMO_AGENT_DESCRIPTION = `Spawn explore/librarian agent. run_in_background REQUIRED (true=async with task_id, false=sync).
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-omo-agent/background-executor.ts
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("[call_omo_agent] parentAgent resolution", {
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-omo-agent/completion-poller.ts
71593
+ // src/tools/call-drizzy-agent/completion-poller.ts
71594
71594
  async function waitForCompletion(sessionID, toolContext, ctx) {
71595
- log(`[call_omo_agent] Polling for completion...`);
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(`[call_omo_agent] Aborted by user`);
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(`[call_omo_agent] Session complete, ${currentMsgCount} messages`);
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(`[call_omo_agent] Timeout reached`);
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-omo-agent/message-processor.ts
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(`[call_omo_agent] Messages error:`, messagesResult.error);
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(`[call_omo_agent] Got ${messages.length} messages`);
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(`[call_omo_agent] No assistant or tool messages found`);
71652
- log(`[call_omo_agent] All messages:`, JSON.stringify(messages, null, 2));
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(`[call_omo_agent] Found ${relevantMessages.length} relevant messages`);
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(`[call_omo_agent] Got response, length: ${responseText.length}`);
71687
+ log(`[call_drizzy_agent] Got response, length: ${responseText.length}`);
71688
71688
  return responseText;
71689
71689
  }
71690
71690
 
71691
- // src/tools/call-omo-agent/session-creator.ts
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(`[call_omo_agent] Using existing session: ${args.session_id}`);
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(`[call_omo_agent] Session get error:`, sessionResult.error);
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(`[call_omo_agent] Creating new session with parent: ${toolContext.sessionID}`);
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(`[call_omo_agent] Failed to get parent session:`, err);
71708
+ log(`[call_drizzy_agent] Failed to get parent session:`, err);
71709
71709
  return null;
71710
71710
  });
71711
- log(`[call_omo_agent] Parent session dir: ${parentSession?.data?.directory}, fallback: ${ctx.directory}`);
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(`[call_omo_agent] Session create error:`, createResult.error);
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(`[call_omo_agent] Created session: ${sessionID}`);
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-omo-agent/sync-executor.ts
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(`[call_omo_agent] Sending prompt to session ${sessionID}`);
71775
- log(`[call_omo_agent] Prompt text:`, args.prompt.substring(0, 100));
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(`[call_omo_agent] Prompt error:`, errorMessage);
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-omo-agent/tools.ts
71826
- function resolveFallbackChainForCallOmoAgent(args) {
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 createCallOmoAgent(ctx, backgroundManager, disabledAgents = [], agentOverrides, userCategories) {
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 = CALL_OMO_AGENT_DESCRIPTION.replace("{agents}", agentDescriptions);
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(`[call_omo_agent] Starting with agent: ${args.subagent_type}, background: ${args.run_in_background}`);
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 = resolveFallbackChainForCallOmoAgent({
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
- call_omo_agent: false,
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
- - call_omo_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_omo_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>")
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
- call_omo_agent: true,
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
- call_omo_agent: true,
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
- \u26A0\uFE0F CRITICAL: You MUST provide EITHER category OR subagent_type. Omitting BOTH will FAIL.
74647
-
74648
- **COMMON MISTAKE (DO NOT DO THIS):**
74649
- \`\`\`
74650
- task(description="...", prompt="...", run_in_background=false) // \u274C FAILS - missing category AND subagent_type
74651
- \`\`\`
74652
-
74653
- **CORRECT - Using category:**
74654
- \`\`\`
74655
- task(category="quick", load_skills=[], description="Fix type error", prompt="...", run_in_background=false)
74656
- \`\`\`
74657
-
74658
- **CORRECT - Using subagent_type:**
74659
- \`\`\`
74660
- task(subagent_type="explore", load_skills=[], description="Find patterns", prompt="...", run_in_background=true)
74661
- \`\`\`
74662
-
74663
- REQUIRED: Provide ONE of:
74664
- - category: For task delegation (uses Coder-Junior with category-optimized model)
74665
- - subagent_type: For direct agent invocation (explore, librarian, oracle, etc.)
74666
-
74667
- **DO NOT provide both.** If category is provided, subagent_type is ignored.
74668
-
74669
- - load_skills: ALWAYS REQUIRED. Pass [] if no skills needed, or ["skill-1", "skill-2"] for category tasks.
74670
- - category: Use predefined category \u2192 Spawns Coder-Junior with category config
74671
- Available categories:
74672
- ${categoryList}
74673
- - subagent_type: Use specific agent directly (explore, librarian, oracle, plan-consultant, plan-reviewer)
74674
- - run_in_background: true=async (returns task_id), false=sync (waits). Default: false. Use background=true ONLY for parallel exploration with 5+ independent queries.
74675
- - session_id: Existing Task session to continue (from previous task output). Continues agent with FULL CONTEXT PRESERVED - saves tokens, maintains continuity.
74676
- - command: The command that triggered this task (optional, for slash command tracking).
74677
-
74678
- **WHEN TO USE session_id:**
74679
- - Task failed/incomplete \u2192 session_id with "fix: [specific issue]"
74680
- - Need follow-up on previous result \u2192 session_id with additional question
74681
- - Multi-turn conversation with same agent \u2192 always session_id instead of new task
74682
-
74683
- Prompts MUST be in English.`;
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
- call_omo_agent: true,
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
- call_omo_agent: true,
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
- call_omo_agent: "deny"
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
- call_omo_agent: "deny"
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
- "call_omo_agent"
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
- "call_omo_agent"
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
- call_omo_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.")
88087
- call_omo_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.")
88088
- call_omo_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.")
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
- call_omo_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.")
88200
- call_omo_agent(subagent_type="librarian", prompt="I'm implementing Y and need authoritative guidance. Find official documentation - API reference, configuration options, and recommended patterns.")
88201
- call_omo_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.")
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
- Use \`task()\` with EITHER category OR agent (mutually exclusive):
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
- // Option A: Category + Skills (spawns Coder-Junior with domain config)
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
- // Option B: Specialized Agent (for specific expert tasks)
88387
+ // \u2705 Research/Consultation \u2192 use subagent_type
88367
88388
  task(
88368
- subagent_type="[agent-name]",
88389
+ subagent_type="explore",
88369
88390
  load_skills=[],
88370
- run_in_background=false,
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
- Use \`task()\` with EITHER category OR agent (mutually exclusive):
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
- // Category + Skills (spawns Coder-Junior)
88867
+ // \u2705 Implementation \u2192 use category
88837
88868
  task(category="[name]", load_skills=["skill-1"], run_in_background=false, prompt="...")
88838
88869
 
88839
- // Specialized Agent
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
- Use \`task()\` with EITHER category OR agent (mutually exclusive):
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
- // Category + Skills (spawns Coder-Junior)
89281
+ // \u2705 Implementation \u2192 use category
89241
89282
  task(category="[name]", load_skills=["skill-1"], run_in_background=false, prompt="...")
89242
89283
 
89243
- // Specialized Agent
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
- call_omo_agent: "deny"
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
- call_omo_agent: "deny"
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 call_omo_agent IMMEDIATELY \u2014 continue only with non-overlapping work while they search
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 call_omo_agent = background research. Fire them and continue only with non-overlapping work
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 call_omo_agent IMMEDIATELY \u2014 continue only with non-overlapping work while they search
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 call_omo_agent = background research. Fire them and continue only with non-overlapping work
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 call_omo_agent IMMEDIATELY \u2014 continue only with non-overlapping work while they search
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 call_omo_agent = background research. Fire them and continue only with non-overlapping work
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 call_omo_agent IMMEDIATELY \u2014 continue only with non-overlapping work while they search
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 call_omo_agent = background research. Fire them and continue only with non-overlapping work
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.call_omo_agent = "allow";
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
- "call_omo_agent",
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
- "call_omo_agent",
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
- call_omo_agent: "deny",
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
- call_omo_agent: "deny",
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
- call_omo_agent: "deny",
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
- call_omo_agent: "deny",
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 callOmoAgent = createCallOmoAgent(ctx, managers.backgroundManager, pluginConfig.disabled_agents ?? [], pluginConfig.agents, pluginConfig.categories);
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
- call_omo_agent: callOmoAgent,
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 { CallOmoAgentArgs } from "./types";
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: CallOmoAgentArgs, toolContext: {
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,3 +1,3 @@
1
1
  export * from "./types";
2
2
  export * from "./constants";
3
- export { createCallOmoAgent } from "./tools";
3
+ export { createCallDrizzyAgent } from "./tools";
@@ -1,6 +1,6 @@
1
- import type { CallOmoAgentArgs } from "./types";
1
+ import type { CallDrizzyAgentArgs } from "./types";
2
2
  import type { PluginInput } from "@opencode-ai/plugin";
3
- export declare function createOrGetSession(args: CallOmoAgentArgs, toolContext: {
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 { CallOmoAgentArgs } from "./types";
2
+ import type { CallDrizzyAgentArgs } from "./types";
3
3
  import type { ToolContextWithMetadata } from "./tool-context-with-metadata";
4
- export declare function resolveOrCreateSessionId(ctx: PluginInput, args: CallOmoAgentArgs, toolContext: ToolContextWithMetadata): Promise<{
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 { CallOmoAgentArgs } from "./types";
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: CallOmoAgentArgs, toolContext: {
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 createCallOmoAgent(ctx: PluginInput, backgroundManager: BackgroundManager, disabledAgents?: string[], agentOverrides?: AgentOverrides, userCategories?: CategoriesConfig): ToolDefinition;
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 CallOmoAgentArgs {
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 CallOmoAgentSyncResult {
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 - call_omo_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_omo_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";
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;
@@ -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 { createCallOmoAgent } from "./call-omo-agent";
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.0",
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.0",
80
- "drizzy-agent-darwin-x64": "0.7.0",
81
- "drizzy-agent-darwin-x64-baseline": "0.7.0",
82
- "drizzy-agent-linux-arm64": "0.7.0",
83
- "drizzy-agent-linux-arm64-musl": "0.7.0",
84
- "drizzy-agent-linux-x64": "0.7.0",
85
- "drizzy-agent-linux-x64-baseline": "0.7.0",
86
- "drizzy-agent-linux-x64-musl": "0.7.0",
87
- "drizzy-agent-linux-x64-musl-baseline": "0.7.0",
88
- "drizzy-agent-windows-x64": "0.7.0",
89
- "drizzy-agent-windows-x64-baseline": "0.7.0"
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.";