first commit

This commit is contained in:
H
2026-04-03 13:01:19 +08:00
commit 538eced414
2575 changed files with 645911 additions and 0 deletions

View File

@@ -0,0 +1,437 @@
# 多智能体协作
Claude Code 的多智能体系统允许创建和协调多个 AI 代理协同工作。本文档详细介绍 AgentTool 和相关协作机制。
## 1. AgentTool 概述
### 1.1 核心文件
**位置:** `/src/tools/AgentTool/`
**主要文件:**
- `runAgent.ts` - Agent 运行核心逻辑
- `builtInAgents.ts` - 内置 Agent 定义
- `loadAgentsDir.ts` - Agent 目录加载
- `agentMemory.ts` - Agent 内存管理
- `built-in/` - 内置 Agent 实现
### 1.2 Agent 定义结构
```typescript
export type AgentDefinition = {
agentType: string // Agent 类型标识
whenToUse?: string // 使用建议
disallowedTools?: string[] // 禁用工具列表
tools?: string[] | '*' // 允许的工具
source?: string // 来源
baseDir?: string // 基础目录
model?: string // 模型设置
permissionMode?: PermissionMode // 权限模式
maxTurns?: number // 最大轮次
getSystemPrompt?: () => string // 系统提示
hooks?: HooksSettings // 钩子设置
skills?: string[] // 预加载技能
mcpServers?: MCPServerSpec[] // MCP 服务器
omitClaudeMd?: boolean // 是否省略 CLAUDE.md
effort?: EffortValue // 努力值
callback?: () => void // 完成回调
}
```
## 2. 子智能体生成
### 2.1 runAgent 函数
**位置:** `/src/tools/AgentTool/runAgent.ts`
`runAgent` 是创建和运行子智能体的核心函数:
```typescript
export async function* runAgent({
agentDefinition, // Agent 定义
promptMessages, // 提示消息
toolUseContext, // 工具使用上下文
canUseTool, // 工具使用权限检查
isAsync, // 是否异步执行
querySource, // 查询来源
model, // 模型覆盖
maxTurns, // 最大轮次
allowedTools, // 允许的工具列表
// ...
}): AsyncGenerator<Message, void>
```
### 2.2 消息过滤
```typescript
// 过滤不完整的工具调用
export function filterIncompleteToolCalls(messages: Message[]): Message[] {
// 移除有工具调用但没有结果的助手消息
}
```
### 2.3 上下文隔离
```typescript
// 为子智能体创建隔离的上下文
const agentToolUseContext = createSubagentContext(toolUseContext, {
options: agentOptions,
agentId,
agentType: agentDefinition.agentType,
messages: initialMessages,
readFileState: agentReadFileState,
abortController: agentAbortController,
getAppState: agentGetAppState,
shareSetAppState: !isAsync, // 同步 Agent 共享状态
})
```
## 3. 智能体生命周期管理
### 3.1 生命周期阶段
1. **初始化阶段**
- 创建 Agent ID
- 设置上下文
- 初始化 MCP 服务器
- 注册 Hooks
2. **执行阶段**
- 运行查询循环
- 处理工具调用
- 管理会话
3. **清理阶段**
- 清理 MCP 服务器
- 清除会话 Hooks
- 释放内存
- 杀死后台任务
### 3.2 生命周期钩子
```typescript
// SubagentStart 钩子
for await (const hookResult of executeSubagentStartHooks(
agentId,
agentDefinition.agentType,
agentAbortController.signal,
)) {
// 收集额外上下文
}
// SubagentStop 钩子
if (agentDefinition.hooks) {
clearSessionHooks(rootSetAppState, agentId)
}
```
## 4. 内置智能体 (built-in/)
### 4.1 generalPurposeAgent
**位置:** `/src/tools/AgentTool/built-in/generalPurposeAgent.ts`
通用目的 Agent适用于复杂研究和多步骤任务执行
```typescript
export const GENERAL_PURPOSE_AGENT: BuiltInAgentDefinition = {
agentType: 'general-purpose',
whenToUse: 'General-purpose agent for researching complex questions...',
tools: ['*'], // 允许所有工具
source: 'built-in',
getSystemPrompt: getGeneralPurposeSystemPrompt,
}
```
### 4.2 planAgent
**位置:** `/src/tools/AgentTool/built-in/planAgent.ts`
软件架构师 Agent用于设计实现计划
**关键特性:**
- **只读模式**:禁止任何文件修改操作
- 严格禁用工具:`Edit`, `Write`, `NotebookEdit`, `Agent`
- 允许工具:`Read`, `Glob`, `Grep`, `Bash`(仅限只读操作)
**系统提示片段:**
```
=== CRITICAL: READ-ONLY MODE - NO FILE MODIFICATIONS ===
This is a READ-ONLY planning task. You are STRICTLY PROHIBITED from:
- Creating new files (no Write, touch, or file creation of any kind)
- Modifying existing files (no Edit operations)
- Deleting files (no rm or deletion)
...
```
### 4.3 verificationAgent
验证 Agent用于验证任务完成情况
```typescript
// 在 TaskUpdateTool 中引用
const VERIFICATION_AGENT_TYPE = 'verification'
// 当满足条件时提示验证
if (allTasks.length >= 3 && !allTasks.some(t => /verif/i.test(t.subject))) {
verificationNudgeNeeded = true
}
```
### 4.4 exploreAgent
探索 Agent用于代码库探索和搜索
**特性:**
- 只读操作
- 使用 `find`/`grep``Glob`/`Grep` 进行搜索
- 不加载 CLAUDE.md节省 token
### 4.5 statuslineSetup
状态栏设置 Agent用于配置状态行显示。
### 4.6 claudeCodeGuideAgent
Claude Code 指南 Agent帮助用户学习使用 Claude Code。
## 5. Agent 内存管理
### 5.1 Agent 内存结构
**位置:** `/src/tools/AgentTool/agentMemory.ts`
```typescript
export type AgentMemory = {
sessionId: string
agentId: string
messages: Message[]
toolUseResults: Map<string, ToolResult>
fileState: FileStateCache
}
```
### 5.2 文件状态缓存
```typescript
// 克隆文件状态缓存
const agentReadFileState = forkContextMessages !== undefined
? cloneFileStateCache(toolUseContext.readFileState)
: createFileStateCacheWithSizeLimit(READ_FILE_STATE_CACHE_SIZE)
// 清理时释放
agentToolUseContext.readFileState.clear()
```
### 5.3 转录记录
```typescript
// 记录初始消息
await recordSidechainTranscript(initialMessages, agentId)
// 记录新消息
await recordSidechainTranscript([message], agentId, lastRecordedUuid)
```
## 6. 团队协调器 (coordinator/)
### 6.1 协调器模式
**位置:** `/src/coordinator/coordinatorMode.ts`
协调器模式允许多个 Agent 在团队中协作。
### 6.2 协调器 Agent
```typescript
// 获取协调器 Agent
function getCoordinatorAgents(): AgentDefinition[]
```
## 7. 团队管理工具
### 7.1 TeamCreateTool
**位置:** `/src/tools/TeamCreateTool/TeamCreateTool.ts`
创建团队,管理团队配置。
### 7.2 TeamDeleteTool
**位置:** `/src/tools/TeamDeleteTool/TeamDeleteTool.ts`
删除团队,清理团队资源。
### 7.3 团队文件结构
**位置:** `/src/utils/swarm/teamHelpers.ts`
```typescript
export type TeamFile = {
name: string
description?: string
createdAt: number
leadAgentId: string
leadSessionId?: string
hiddenPaneIds?: string[]
teamAllowedPaths?: TeamAllowedPath[]
members: Array<{
agentId: string
name: string
agentType?: string
model?: string
prompt?: string
color?: string
planModeRequired?: boolean
joinedAt: number
tmuxPaneId: string
cwd: string
worktreePath?: string
sessionId?: string
subscriptions: string[]
backendType?: BackendType
isActive?: boolean
mode?: PermissionMode
}>
}
```
## 8. Agent 与技能的集成
### 8.1 技能预加载
Agent 可以预加载技能:
```typescript
const skillsToPreload = agentDefinition.skills ?? []
if (skillsToPreload.length > 0) {
const allSkills = await getSkillToolCommands(getProjectRoot())
// 加载并注入技能内容
}
```
### 8.2 技能名称解析
```typescript
function resolveSkillName(
skillName: string,
allSkills: Command[],
agentDefinition: AgentDefinition
): string | null {
// 1. 精确匹配
if (hasCommand(skillName, allSkills)) return skillName
// 2. 前缀匹配 (e.g., "my-skill" → "my-plugin:my-skill")
const qualifiedName = `${pluginPrefix}:${skillName}`
if (hasCommand(qualifiedName, allSkills)) return qualifiedName
// 3. 后缀匹配 (e.g., ":my-skill")
// ...
}
```
## 9. MCP 服务器集成
### 9.1 Agent 专用 MCP 服务器
Agent 可以定义自己的 MCP 服务器:
```typescript
async function initializeAgentMcpServers(
agentDefinition: AgentDefinition,
parentClients: MCPServerConnection[]
): Promise<{
clients: MCPServerConnection[]
tools: Tools
cleanup: () => Promise<void>
}>
```
### 9.2 服务器合并
```typescript
// 合并父级和 Agent 专用的 MCP 客户端
const allTools = uniqBy([...resolvedTools, ...agentMcpTools], 'name')
```
## 10. 权限与隔离
### 10.1 权限模式
```typescript
const agentPermissionMode = agentDefinition.permissionMode
if (agentPermissionMode &&
state.toolPermissionContext.mode !== 'bypassPermissions' &&
state.toolPermissionContext.mode !== 'acceptEdits') {
toolPermissionContext = {
...toolPermissionContext,
mode: agentPermissionMode
}
}
```
### 10.2 工具过滤
```typescript
const resolvedTools = resolveAgentTools(
agentDefinition,
availableTools,
isAsync
).resolvedTools
```
## 11. 性能优化
### 11.1 CLAUDE.md 省略
```typescript
const shouldOmitClaudeMd = agentDefinition.omitClaudeMd &&
!override?.userContext &&
getFeatureValue_CACHED_MAY_BE_STALE('tengu_slim_subagent_claudemd', true)
```
### 11.2 Git 状态省略
```typescript
const resolvedSystemContext =
agentDefinition.agentType === 'Explore' ||
agentDefinition.agentType === 'Plan'
? systemContextNoGit // 省略 gitStatus
: baseSystemContext
```
### 11.3 推理配置
```typescript
thinkingConfig: useExactTools
? toolUseContext.options.thinkingConfig // 继承父级
: { type: 'disabled' as const } // 禁用
```
## 12. Telemetry 与追踪
### 12.1 Perfetto 追踪
```typescript
if (isPerfettoTracingEnabled()) {
registerPerfettoAgent(agentId, agentDefinition.agentType, parentId)
}
// 清理时注销
unregisterPerfettoAgent(agentId)
```
### 12.2 转录存储
```typescript
// 边链转录
await recordSidechainTranscript(initialMessages, agentId)
// Agent 元数据
await writeAgentMetadata(agentId, {
agentType: agentDefinition.agentType,
worktreePath,
description
})
```