diff --git a/packages/core/src/agent/registry.ts b/packages/core/src/agent/registry.ts index 3ed5488..51090d6 100644 --- a/packages/core/src/agent/registry.ts +++ b/packages/core/src/agent/registry.ts @@ -13,23 +13,33 @@ export class AgentRegistry { private userConfig: AgentConfigFile | null = null; private initialized = false; + constructor() { + // 同步初始化预设 Agent(无需等待 init()) + this.initPresetAgents(); + } + /** - * 初始化 - 加载预设和用户配置 + * 同步初始化预设 Agent + */ + private initPresetAgents(): void { + for (const [name, agentConfig] of Object.entries(presetAgents)) { + this.agents.set(name, { ...agentConfig, name }); + } + } + + /** + * 完整初始化 - 加载用户配置 + * 用户配置可以覆盖预设 Agent 的设置 */ async init(workdir: string): Promise { if (this.initialized) return; - // 1. 注册预设 Agent - for (const [name, agentConfig] of Object.entries(presetAgents)) { - this.agents.set(name, { ...agentConfig, name }); - } - - // 2. 加载用户配置 + // 加载用户配置 this.userConfig = await loadAgentConfig(workdir); if (this.userConfig) { this.globalConfig = this.userConfig.defaults ?? null; - // 注册用户自定义 Agent + // 注册用户自定义 Agent(可以覆盖预设) if (this.userConfig.agents) { for (const [name, config] of Object.entries(this.userConfig.agents)) { this.agents.set(name, { ...config, name }); @@ -40,6 +50,13 @@ export class AgentRegistry { this.initialized = true; } + /** + * 检查是否已完整初始化(包括用户配置) + */ + isInitialized(): boolean { + return this.initialized; + } + /** * 获取 Agent(应用权限合并) */ diff --git a/packages/server/src/agent/adapter.ts b/packages/server/src/agent/adapter.ts index dd4c1ed..a4ca713 100644 --- a/packages/server/src/agent/adapter.ts +++ b/packages/server/src/agent/adapter.ts @@ -76,6 +76,22 @@ interface PermissionManager { setAskCallback(callback: (ctx: unknown) => Promise<{ allow: boolean; remember?: boolean }>): void; } +/** + * Provider Registry 接口 + */ +interface ProviderRegistryInterface { + init(workdir?: string): Promise; + isInitialized(): boolean; +} + +/** + * Agent Registry 接口 + */ +interface AgentRegistryInterface { + init(workdir: string): Promise; + isInitialized(): boolean; +} + /** * Core 模块接口 */ @@ -85,6 +101,8 @@ interface CoreModule { loadConfig: () => unknown; saveConfig: (config: Record) => void; getPermissionManager: (projectRoot?: string) => PermissionManager; + getProviderRegistry: () => ProviderRegistryInterface; + agentRegistry: AgentRegistryInterface; } // ============================================================================ @@ -120,6 +138,20 @@ export async function initCore(): Promise { return false; } + // 初始化 ProviderRegistry(加载用户配置) + const providerRegistry = core.getProviderRegistry(); + if (!providerRegistry.isInitialized()) { + await providerRegistry.init(); + console.log('[Agent] ProviderRegistry initialized'); + } + + // 初始化 AgentRegistry(加载用户自定义 Agent 配置) + const agentRegistry = core.agentRegistry; + if (!agentRegistry.isInitialized()) { + await agentRegistry.init(process.cwd()); + console.log('[Agent] AgentRegistry initialized'); + } + coreModule = core; console.log('[Agent] Core module loaded'); return true;