开发与扩展Agent Core 扩展点

Agent Core 扩展点

Agent Core 当前有四类不同层次的扩展点。它们都是源码级接入点,不是可从外部目录自动安装的统一插件系统。

需求

在修改前先选择边界:

目标扩展点运行位置
接入新的模型 APILLMProviderElectron 主进程
接入新的事件来源TriggerAdapterElectron 主进程
提供不依赖 Minecraft 的工具本地工具 Schema + Pipeline handlerElectron 主进程
调整计划/执行/移交/总结提示编排 Markdown skillPrompt 注入阶段

架构

Provider

packages/agent-core/src/main/llm/types.ts 中的 LLMProvider 是统一模型接口:

interface LLMProvider {
  readonly metadata: ProviderMetadata
  chat(messages, tools?, options?): Promise<LLMResponse>
  chatStream(messages, tools?, options?): AsyncIterable<LLMChunk>
  embed?(text: string): Promise<number[]>
  healthCheck(): Promise<HealthCheckResult>
}

执行步骤:

  1. 参考 llm/providers/base-provider.ts 与现有 Provider 实现请求、流式解析和错误转换。
  2. 在 llm/bootstrap.ts 的 Provider 工厂映射中构造实例。
  3. 使用 providerRegistry.register(id, provider) 注册;重复 id 会抛错。
  4. 若工具格式与现有格式不同,还需在 prompt/tools/tool-format-adapters.ts 增加转换并接入工厂。
  5. 为配置、模型发现、健康检查和流式工具调用添加测试。

ProviderRegistry 虽公开注册方法,但当前应用启动 wiring 仍是源码内接线;仅实现接口不会被自动发现。

TriggerAdapter

TriggerAdapter 只负责把来源特定的原始事件归一为 AgentEvent:

interface TriggerAdapter {
  readonly source: TriggerSource
  start(): Promise<void>
  stop(): Promise<void>
  handle(rawEvent: unknown): AgentEvent | null
}

实现后还必须:

  1. 扩展 TriggerSource 及对应 payload 类型;
  2. 在 trigger/adapters/ 导出实现;
  3. 在 TriggerModule 的 adapters、start()、stop() 和 getAdapter() 中接线;
  4. 明确事件订阅生命周期、过滤和失败行为;
  5. 覆盖原始事件到 AgentEvent 的单元测试。

当前没有公共 registerAdapter();不要声称把文件放入目录即可加载。

本地工具

Agent Core 本地工具与 Adapter 动态工具分开保存。workspace/tool-registry.ts 的 registerLocal(workspaceId, tools) 会把本地 Schema 合入工作区,同名时本地工具覆盖 Adapter 工具。

一个可执行本地工具至少包含两部分:

  1. ToolSchema,让 LLM 看见名称、描述与参数;
  2. Pipeline 中间件或其他本地处理器,拦截该名称并产生 ToolCallResult。

只调用 registerLocal() 会暴露 Schema,但不会自动产生执行逻辑。可参考 main-agent-registry.ts 中 QQ、Wiki、搜索、记忆、任务和 update_plan 的注册与 handler wiring。

编排 Markdown skill

orchestration/skill-injector.ts 启动时扫描指定 skillsDir 下的 .md 文件,按文件名前缀映射阶段:

前缀阶段
plan*plan
execute*execute
transfer*transfer
summarize*summarize

仓库内置文件位于 packages/agent-core/src/main/orchestration/skills/。内容会作为 Markdown 注入 system prompt,并受总 skill token 预算裁剪。无法识别前缀的文件会跳过;读取失败不会阻止其他 skill。

执行

  1. 在上述四类中只选择与需求匹配的扩展点。
  2. 参考同目录最小现有实现,保持类型和错误语义一致。
  3. 在应用启动 wiring 中显式接线;除 Markdown skill 外,没有目录自动发现。
  4. 运行 Agent Core 类型检查与测试:
pnpm --filter @mcagent/agent-core typecheck
pnpm --filter @mcagent/agent-core test
  1. Provider 还需验证健康检查和流式响应;TriggerAdapter 需验证启停;本地工具需验证 Schema 与 handler 成对存在;skill 需验证阶段选择和预算裁剪。

稳定边界

这些接口是当前仓库内部扩展面,未形成独立 npm SDK 或跨版本兼容承诺。对外分发前应固定 Agent Core 版本,并把启动 wiring 和回归测试一起维护。