df03300211
- Split 25+ index.ts files into hook.ts + extracted modules - Rename all catch-all utils.ts/helpers.ts to domain-specific names - Split src/tools/lsp/ into ~15 focused modules - Split src/tools/delegate-task/ into ~18 focused modules - Separate shared types from implementation - 155 files changed, 60+ new files created - All typecheck clean, 61 tests pass
53 lines
1.9 KiB
TypeScript
53 lines
1.9 KiB
TypeScript
import type { AgentConfig } from "@opencode-ai/sdk"
|
|
import type { AgentFactory } from "./types"
|
|
import type { CategoriesConfig, CategoryConfig, GitMasterConfig } from "../config/schema"
|
|
import type { BrowserAutomationProvider } from "../config/schema"
|
|
import { DEFAULT_CATEGORIES } from "../tools/delegate-task/constants"
|
|
import { resolveMultipleSkills } from "../features/opencode-skill-loader/skill-content"
|
|
|
|
export type AgentSource = AgentFactory | AgentConfig
|
|
|
|
export function isFactory(source: AgentSource): source is AgentFactory {
|
|
return typeof source === "function"
|
|
}
|
|
|
|
export function buildAgent(
|
|
source: AgentSource,
|
|
model: string,
|
|
categories?: CategoriesConfig,
|
|
gitMasterConfig?: GitMasterConfig,
|
|
browserProvider?: BrowserAutomationProvider,
|
|
disabledSkills?: Set<string>
|
|
): AgentConfig {
|
|
const base = isFactory(source) ? source(model) : source
|
|
const categoryConfigs: Record<string, CategoryConfig> = categories
|
|
? { ...DEFAULT_CATEGORIES, ...categories }
|
|
: DEFAULT_CATEGORIES
|
|
|
|
const agentWithCategory = base as AgentConfig & { category?: string; skills?: string[]; variant?: string }
|
|
if (agentWithCategory.category) {
|
|
const categoryConfig = categoryConfigs[agentWithCategory.category]
|
|
if (categoryConfig) {
|
|
if (!base.model) {
|
|
base.model = categoryConfig.model
|
|
}
|
|
if (base.temperature === undefined && categoryConfig.temperature !== undefined) {
|
|
base.temperature = categoryConfig.temperature
|
|
}
|
|
if (base.variant === undefined && categoryConfig.variant !== undefined) {
|
|
base.variant = categoryConfig.variant
|
|
}
|
|
}
|
|
}
|
|
|
|
if (agentWithCategory.skills?.length) {
|
|
const { resolved } = resolveMultipleSkills(agentWithCategory.skills, { gitMasterConfig, browserProvider, disabledSkills })
|
|
if (resolved.size > 0) {
|
|
const skillContent = Array.from(resolved.values()).join("\n\n")
|
|
base.prompt = skillContent + (base.prompt ? "\n\n" + base.prompt : "")
|
|
}
|
|
}
|
|
|
|
return base
|
|
}
|