feat(agents): add agent override configuration support

- Add AgentName, AgentOverrideConfig, AgentOverrides types
- Implement createBuiltinAgents with disabled_agents and overrides support
- Support oh-my-opencode.json config for:
  - disabled_agents: disable specific built-in agents
  - agents: override model, temperature, tools, permission per agent
- Tools and permission objects are shallow-merged with base config
- Export types for external consumers
- Update README with agent override documentation
This commit is contained in:
YeonGyu-Kim
2025-12-05 02:32:33 +09:00
parent 6220fcddcf
commit 22acb0def1
5 changed files with 114 additions and 6 deletions

View File

@@ -12,3 +12,6 @@ export const builtinAgents: Record<string, AgentConfig> = {
"frontend-ui-ux-engineer": frontendUiUxEngineerAgent,
"document-writer": documentWriterAgent,
}
export * from "./types"
export { createBuiltinAgents } from "./utils"

12
src/agents/types.ts Normal file
View File

@@ -0,0 +1,12 @@
import type { AgentConfig } from "@opencode-ai/sdk"
export type AgentName =
| "oracle"
| "librarian"
| "explore"
| "frontend-ui-ux-engineer"
| "document-writer"
export type AgentOverrideConfig = Partial<AgentConfig>
export type AgentOverrides = Partial<Record<AgentName, AgentOverrideConfig>>

55
src/agents/utils.ts Normal file
View File

@@ -0,0 +1,55 @@
import type { AgentConfig } from "@opencode-ai/sdk"
import type { AgentName, AgentOverrideConfig, AgentOverrides } from "./types"
import { oracleAgent } from "./oracle"
import { librarianAgent } from "./librarian"
import { exploreAgent } from "./explore"
import { frontendUiUxEngineerAgent } from "./frontend-ui-ux-engineer"
import { documentWriterAgent } from "./document-writer"
const allBuiltinAgents: Record<AgentName, AgentConfig> = {
oracle: oracleAgent,
librarian: librarianAgent,
explore: exploreAgent,
"frontend-ui-ux-engineer": frontendUiUxEngineerAgent,
"document-writer": documentWriterAgent,
}
function mergeAgentConfig(
base: AgentConfig,
override: AgentOverrideConfig
): AgentConfig {
return {
...base,
...override,
tools: override.tools !== undefined
? { ...(base.tools ?? {}), ...override.tools }
: base.tools,
permission: override.permission !== undefined
? { ...(base.permission ?? {}), ...override.permission }
: base.permission,
}
}
export function createBuiltinAgents(
disabledAgents: AgentName[] = [],
agentOverrides: AgentOverrides = {}
): Record<string, AgentConfig> {
const result: Record<string, AgentConfig> = {}
for (const [name, config] of Object.entries(allBuiltinAgents)) {
const agentName = name as AgentName
if (disabledAgents.includes(agentName)) {
continue
}
const override = agentOverrides[agentName]
if (override) {
result[name] = mergeAgentConfig(config, override)
} else {
result[name] = config
}
}
return result
}