Merge pull request #2491 from gaurav0107/fix/2477-opencode-command-agent-scope

fix(opencode): resolve command agent ids to registered opencode agents
This commit is contained in:
haelyra 2026-07-24 12:53:30 -04:00 committed by GitHub
commit 8512dc6f42
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
32 changed files with 53 additions and 34 deletions

View file

@ -184,7 +184,7 @@ Create a detailed implementation plan for: {input}
```markdown
---
description: Create implementation plan
agent: everything-claude-code:planner
agent: planner
---
Create a detailed implementation plan for: $ARGUMENTS

View file

@ -1,6 +1,6 @@
---
description: Fix build and TypeScript errors with minimal changes
agent: everything-claude-code:build-error-resolver
agent: build-error-resolver
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: Save verification state and progress checkpoint
agent: everything-claude-code:build
agent: build
---
# Checkpoint Command

View file

@ -1,6 +1,6 @@
---
description: Review code for quality, security, and maintainability
agent: everything-claude-code:code-reviewer
agent: code-reviewer
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: Generate and run E2E tests with Playwright
agent: everything-claude-code:e2e-runner
agent: e2e-runner
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: Run evaluation against acceptance criteria
agent: everything-claude-code:build
agent: build
---
# Eval Command

View file

@ -1,6 +1,6 @@
---
description: Analyze instincts and suggest or generate evolved structures
agent: everything-claude-code:build
agent: build
---
# Evolve Command

View file

@ -1,6 +1,6 @@
---
description: Fix Go build and vet errors
agent: everything-claude-code:go-build-resolver
agent: go-build-resolver
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: Go code review for idiomatic patterns
agent: everything-claude-code:go-reviewer
agent: go-reviewer
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: Go TDD workflow with table-driven tests
agent: everything-claude-code:tdd-guide
agent: tdd-guide
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: Export instincts for sharing
agent: everything-claude-code:build
agent: build
---
# Instinct Export Command

View file

@ -1,6 +1,6 @@
---
description: Import instincts from external sources
agent: everything-claude-code:build
agent: build
---
# Instinct Import Command

View file

@ -1,6 +1,6 @@
---
description: Show learned instincts (project + global) with confidence
agent: everything-claude-code:build
agent: build
---
# Instinct Status Command

View file

@ -1,6 +1,6 @@
---
description: Extract patterns and learnings from current session
agent: everything-claude-code:build
agent: build
---
# Learn Command

View file

@ -1,6 +1,6 @@
---
description: Orchestrate multiple agents for complex tasks
agent: everything-claude-code:planner
agent: planner
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: Create implementation plan with risk assessment
agent: everything-claude-code:planner
agent: planner
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: List registered projects and instinct counts
agent: everything-claude-code:build
agent: build
---
# Projects Command

View file

@ -1,6 +1,6 @@
---
description: Promote project instincts to global scope
agent: everything-claude-code:build
agent: build
---
# Promote Command

View file

@ -1,6 +1,6 @@
---
description: Remove dead code and consolidate duplicates
agent: everything-claude-code:refactor-cleaner
agent: refactor-cleaner
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: Fix Rust build errors and borrow checker issues
agent: everything-claude-code:rust-build-resolver
agent: rust-build-resolver
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: Rust code review for ownership, safety, and idiomatic patterns
agent: everything-claude-code:rust-reviewer
agent: rust-reviewer
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: Rust TDD workflow with unit and property tests
agent: everything-claude-code:tdd-guide
agent: tdd-guide
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: Run AgentShield against agent, hook, MCP, permission, and secret surfaces.
agent: everything-claude-code:security-reviewer
agent: security-reviewer
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: Run comprehensive security review
agent: everything-claude-code:security-reviewer
agent: security-reviewer
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: Configure package manager preference
agent: everything-claude-code:build
agent: build
---
# Setup Package Manager Command

View file

@ -1,6 +1,6 @@
---
description: Generate skills from git history analysis
agent: everything-claude-code:build
agent: build
---
# Skill Create Command

View file

@ -1,6 +1,6 @@
---
description: Enforce TDD workflow with 80%+ coverage
agent: everything-claude-code:tdd-guide
agent: tdd-guide
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: Analyze and improve test coverage
agent: everything-claude-code:tdd-guide
agent: tdd-guide
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: Update codemaps for codebase navigation
agent: everything-claude-code:doc-updater
agent: doc-updater
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: Update documentation for recent changes
agent: everything-claude-code:doc-updater
agent: doc-updater
subtask: true
---

View file

@ -1,6 +1,6 @@
---
description: Run verification loop to validate implementation
agent: everything-claude-code:build
agent: build
---
# Verify Command

View file

@ -77,10 +77,16 @@ if (
else failed++;
if (
test('command markdown frontmatter uses plugin-scoped agent ids', () => {
test('command markdown frontmatter agent ids resolve to a registered opencode agent', () => {
const commandsDir = path.join(opencodeDir, 'commands');
const registeredAgents = new Set(Object.keys(config.agent || {}));
assert.ok(registeredAgents.size > 0, 'Expected opencode.json to register at least one agent');
for (const entry of fs.readdirSync(commandsDir)) {
if (!entry.endsWith('.md')) {
continue;
}
const body = fs.readFileSync(path.join(commandsDir, entry), 'utf8');
const match = body.match(/^agent:\s*(.+)$/m);
@ -88,9 +94,22 @@ if (
continue;
}
const agentId = match[1].trim().replace(/^['"]|['"]$/g, '');
// Regression guard for #2477: opencode registers these agents unscoped
// in opencode.json's `agent` map, so ANY namespace-scoped id
// (`<plugin>:<agent>` — e.g. the Claude Code `everything-claude-code:`
// prefix) fails to resolve ("Agent not found") and hard-breaks subtask
// commands like /code-review on opencode. Reject the whole scoped class,
// not just the one legacy prefix.
assert.ok(
match[1].startsWith('everything-claude-code:'),
`Expected plugin-scoped agent id in ${entry}, got: ${match[1]}`
!agentId.includes(':'),
`${entry}: command agent must be an unscoped opencode agent id, got: ${agentId}`
);
assert.ok(
registeredAgents.has(agentId),
`${entry}: command agent "${agentId}" is not registered in opencode.json's agent map`
);
}
})