Appearance
Agent 系统快速参考
快速入门
1. 核心概念速查
| 概念 | 说明 | 源码位置 |
|---|---|---|
Agent.Info | Agent 配置结构体 | src/agent/agent.ts:23 |
Agent.get(name) | 获取指定 Agent | src/agent/agent.ts:251 |
Agent.list() | 列出所有 Agent | src/agent/agent.ts:255 |
Agent.defaultAgent() | 获取默认主 Agent | src/agent/agent.ts:264 |
SessionPrompt.prompt() | 发起一次对话 | src/session/prompt.ts:195 |
SessionPrompt.loop() | 主处理循环 | src/session/prompt.ts:305 |
TaskTool | 子 Agent 调用工具 | src/tool/task.ts:23 |
PermissionNext | 权限系统 | src/permission/next.ts:13 |
2. Agent 模式速查
typescript
// Agent 有三种模式
mode: "primary" // 主 Agent - 处理用户主对话
mode: "subagent" // 子 Agent - 被 TaskTool 调用
mode: "all" // 通用 - 两者皆可
// 内置 Agent
Agent.build // 默认主 Agent
Agent.plan // 计划模式
Agent.explore // 代码探索子 Agent
Agent.general // 通用任务子 Agent
Agent.compaction // 上下文压缩(隐藏)
Agent.title // 标题生成(隐藏)
Agent.summary // 摘要生成(隐藏)3. 权限 Action
typescript
action: "allow" // 直接执行
action: "ask" // 询问用户
action: "deny" // 拒绝执行常见操作
创建自定义 Agent(opencode.json)
jsonc
{
"agent": {
"my-agent": {
"description": "我的自定义 Agent",
"mode": "primary",
"model": "anthropic/claude-3-5-sonnet",
"temperature": 0.7,
"steps": 30,
"permission": {
"*": "allow",
"bash": "ask",
"external_directory": "deny"
}
}
}
}创建子 Agent
jsonc
{
"agent": {
"reviewer": {
"description": "代码审查专家",
"mode": "subagent",
"permission": {
"read": "allow",
"grep": "allow",
"*": "deny"
}
}
}
}调用子 Agent(TaskTool)
@reviewer 请帮我审查 src/auth/login.ts 文件或通过命令:
typescript
// 内部会创建 SubtaskPart,触发 TaskTool
parts: [{
type: "subtask",
agent: "reviewer",
prompt: "请帮我审查...",
description: "代码审查"
}]源码速查
Agent 定义模板
typescript
// src/agent/agent.ts
export namespace Agent {
const state = Instance.state(async () => {
const result: Record<string, Info> = {
myAgent: {
name: "myAgent",
description: "描述",
mode: "primary" | "subagent" | "all",
native: true,
permission: PermissionNext.merge(
defaults,
PermissionNext.fromConfig({ /* 权限配置 */ }),
user
),
options: {},
}
}
return result
})
}TaskTool 调用子 Agent
typescript
// src/tool/task.ts
const result = await SessionPrompt.prompt({
sessionID: session.id, // 子会话 ID
agent: agent.name, // 子 Agent 名称
model: { /* 模型配置 */ },
tools: { task: false }, // 禁用递归
parts: promptParts,
})权限检查
typescript
// src/permission/next.ts
const action = PermissionNext.evaluate(
"bash", // 权限名称
"/tmp/test.sh", // 模式
agent.permission,
session.permission
)
if (action === "deny") throw new DeniedError(...)
if (action === "ask") await ctx.ask({ ... })
// action === "allow" 直接执行会话循环
typescript
// src/session/prompt.ts
export const loop = fn(Identifier.schema("session"), async (sessionID) => {
while (true) {
// 1. 加载消息
const msgs = await MessageV2.filterCompact(MessageV2.stream(sessionID))
// 2. 处理 subtask
const task = tasks.pop()
if (task?.type === "subtask") {
await executeSubtask(task)
continue
}
// 3. 正常处理
const result = await processor.process({ ... })
if (result === "stop") break
}
})调试技巧
查看当前 Agent
typescript
const agent = await Agent.get(session.agent)
console.log(agent.name, agent.mode, agent.permission)查看可用工具
typescript
const tools = await ToolRegistry.tools({ modelID, providerID }, agent)
console.log(tools.map(t => t.id))模拟权限检查
typescript
const action = PermissionNext.evaluate("bash", "/tmp/test", agent.permission)
console.log(`bash 权限: ${action}`)错误处理
| 错误类型 | 说明 | 处理 |
|---|---|---|
DeniedError | 权限被拒绝 | 规则配置问题 |
RejectedError | 用户拒绝 | 正常流程 |
CorrectedError | 用户拒绝但有建议 | 采纳建议 |
Session.BusyError | 会话忙碌中 | 等待或取消 |
关键文件速查
src/agent/agent.ts # Agent 定义
src/session/prompt.ts # 会话循环
src/session/processor.ts # LLM 响应处理
src/tool/task.ts # 子 Agent 调用
src/permission/next.ts # 权限系统
src/config/config.ts # 配置加载
src/session/message-v2.ts # 消息结构
src/tool/registry.ts # 工具注册快速参考版本: 1.0 更新时间: 2026-03-28