Skip to content

Commit c5edee4

Browse files
docs: 文档检查/check 20260419 (#296)
* docs: 修复文档巡检发现的 4 处错误 - daemon.md: 反映实际实现状态(supervisor/worker 已实现而非 stub) - bridge-mode.md: API 操作数量从 7 修正为 9 - web-search-tool.md: 文件路径从 src/tools/ 修正为 packages/builtin-tools/src/tools/ - remote-control-self-hosting.md: 补充缺失的 RCS_WS_IDLE_TIMEOUT 和 RCS_WS_KEEPALIVE_INTERVAL 配置项 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修正 Safety 和 Context 文档中的代码引用和类型错误 - permission-model: 修正规则来源从"五层"到八层,优先级顺序对齐代码 - permission-model: PermissionUpdate 类型改为实际的 addRules/replaceRules 等 - permission-model: 补充 acceptEdits 和 dontAsk 两种权限模式 - permission-model: DENIAL_LIMITS 字段名对齐实际代码 - plan-mode: 工具路径从 src/tools/ 改为 packages/builtin-tools/src/tools/ - compaction: 修正 COMPACTABLE_TOOLS 和 POST_COMPACT_* 的行号 - project-memory: 修正 ENTRYPOINT_NAME 常量的行号 - system-prompt: 修正 SystemPrompt 类型定义文件路径和多个行号引用 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修复 introduction 文档中的错误路径和行号引用 - why-this-whitepaper.mdx: BashTool 路径从 src/tools/ 修正为 packages/builtin-tools/src/tools/ - what-is-claude-code.mdx: 移除不存在的 Azure provider,改为实际的 7 种 provider - architecture-overview.mdx: State 类型行号从 204 修正为 207 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修复 conversation/features 文档中的错误 - streaming.mdx: queryStreamRaw → queryModelWithStreaming 函数名修正 - streaming.mdx: Azure 提供商不存在,替换为实际 7 个提供商 - debug-mode.mdx: --inspect-wait 描述错误,实际使用 BUN_INSPECT 环境变量 - buddy.mdx: 补充缺失的 companionReact.ts、CompanionCard.tsx、index.ts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修复文档巡检中的源码引用错误 - feature-flags.mdx: 修正 feature() 兜底描述,实际从 bun:bundle 导入而非 cli.tsx:3 内联 - feature-flags.mdx: 修正工具 require 路径为 @claude-code-best/builtin-tools 包路径 - ant-only-world.mdx: 修正 tools.ts 中 require 路径为包路径 - ant-only-world.mdx: 修正 INTERNAL_ONLY_COMMANDS 行号 (267-295) 和数量 (24+) - skills.mdx: 修正 COMMANDS memoize 行号 258 → 299 - mcp-protocol.mdx: 修正 fetchToolsForClient LRU 缓存上限 20 → 100 - streaming.mdx: 修正流式事件引用 - file-operations.mdx: 修正工具路径引用 - search-and-navigation.mdx: 修正搜索工具引用 - shell-execution.mdx: 修正 shell 工具引用 - buddy.mdx: 补充缺失的 frontmatter 字段 - debug-mode.mdx: 修正调试模式描述 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修正 tools/agent 文档中的文件路径和行号引用 - 修正 TodoWriteTool、AgentTool、ToolSearchTool 等工具路径 src/tools/ → packages/builtin-tools/src/tools/ - 更新 Tool.ts、tools.ts、BashTool.tsx 中过时的行号引用 - 修正 WebSearchTool/WebFetchTool/EnterWorktreeTool/ExitWorktreeTool 路径 - 修正 AgentTool.tsx 中多行行号引用 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修正 feature 文档中的文件路径和行号引用 - ultraplan.md: 更新文件行数(525/349/127) - fork-subagent.md: 路径迁移 src/tools/ → packages/builtin-tools/ - mcp-skills.md: 修正 getMcpSkillCommands 行号 547→604,client.ts 行号 117→129 - kairos.md: 修正 getBriefSection/getProactiveSection 行号 - proactive.md: 修正 getProactiveSection 行号 860→864 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修正顶层文档中的路径迁移和行号引用 - auto-updater.md: config.ts 行号 1735→1737,标注未接入启动流程的函数 - external-dependencies.md: WebSearchTool/WebFetchTool 路径迁移到 builtin-tools 包,Vertex 行号修正 - lsp-integration.md: LSPTool 路径从 src/tools/ 迁移到 packages/builtin-tools/ - stub-recovery-design-1-4.md: 修正 Windows 绝对路径链接为标准代码引用 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修正 task 文档中的文件扩展名和路径引用 - task-004: AssistantSessionChooser.ts → .tsx, assistant.ts → .tsx - task-003: cli.tsx 行号 249→272, markdownConfigLoader.ts 行号 29→35 - lan-pipes: SendMessageTool 路径迁移到 packages/builtin-tools/ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 补充 computer-use-tools-reference 缺失的 Windows 工具 添加遗漏的 open_terminal 和 activate_window 两个 Windows 专属工具, 修正工具总数 37→39,Windows 工具数 10→12。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修正 audit/bash-classifier/token-budget/tree-sitter 文档 - feature-flags-audit: ScheduleCronTool 路径迁移、DAEMON 状态更新为 COMPLETE、assistant 文件标记已补全、UDS 标记已实现 - bash-classifier: BashPermissionRequest 文件路径修正、withRetry 行号移除 - token-budget: attachments.ts 行号范围修正 - tree-sitter-bash: bashPermissions.ts 路径迁移到 packages/builtin-tools Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修正 langfuse-monitoring AgentTool 路径迁移 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修正 bridgeApi 行号和 Tool.ts 行号引用 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修正 Safety/Extensibility 文档中的工具路径迁移和行号引用 - sandbox.mdx: shouldUseSandbox.ts 和 bashPermissions.ts 路径迁移至 packages/builtin-tools - why-safety-matters.mdx: bashPermissions.ts 路径迁移(3 处) - plan-mode.mdx: EnterPlanModeTool/prompt.ts 路径迁移 - auto-mode.mdx: Auto mode 指令行号 3464→3481 - hooks.mdx: AgentTool/runAgent.ts 路径迁移 - skills.mdx: SkillTool.ts 路径迁移 - custom-agents.mdx: Agent built-in 目录和 exploreAgent.ts 路径迁移 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修正 internals 文档引用计数和路径 - ant-only-world: USER_TYPE 引用计数 465→410+,工具路径迁移到 builtin-tools - growthbook-ab-testing: growthbook.ts 行数 1156→1258 - hidden-features: 语音模式状态更新(audio-napi 已恢复) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修正工具文档中的行号引用 - sub-agents: AgentTool.call 入口行号 340→387 - shell-execution: ShellCommand onTimeout 行号 129→144 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修正 feature 文档中的状态、路径和计数 - all-features-guide: 修正 feature flag 启用范围(dev only vs dev+build) - tier3-stubs: 大量状态修正(stub→已实现),缩减过时条目 - workflow-scripts: 路径迁移到 builtin-tools,状态更新 - web-browser-tool: 工具状态缺失→已实现,路径迁移 - context-collapse: CtxInspectTool 状态缺失→已实现 - computer-use: 行号引用更新,平台分发描述修正 - computer-use-tools-reference: 工具数 39→38 - voice-mode: voiceModeEnabled 行数 55→54 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 更新 the-loop 查询循环行号引用 query.ts 代码变更后终止原因行号整体偏移约 40 行 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 补充 feature-flags-audit 完整 build 默认 feature 列表 添加 ULTRATHINK/LODESTONE/ACP/DAEMON 等 19 个缺失的 build 默认 feature, 修正 dev-only 特征标注(UDS_INBOX/LAN_PIPES/BG_SESSIONS/TEMPLATES) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修正 feature-flags-audit ConfigTool 路径迁移 ConfigTool 路径从 src/tools/ 迁移到 packages/builtin-tools/src/tools/ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修正 feature-flags-audit BashTool 路径迁移 BashTool 路径从 src/tools/ 迁移到 packages/builtin-tools/src/tools/ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 修正 feature-flags-audit SkillTool 路径迁移 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 更新 feature-flags-audit WorkflowTool 状态为已实现 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent a57ca08 commit c5edee4

61 files changed

Lines changed: 485 additions & 451 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/agent/sub-agents.mdx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ keywords: ["子 Agent", "AgentTool", "任务委派", "forkSubagent", "子进程
1313
```
1414
AI 生成 tool_use: { prompt: "修复 bug", subagent_type: "Explore" }
1515
16-
AgentTool.call() ← 入口(AgentTool.tsx:239
16+
AgentTool.call() ← 入口(AgentTool.tsx:387
1717
├── 解析 effectiveType(fork vs 命名 agent vs GP 回退)
1818
├── filterDeniedAgents() ← 仅命名 Agent 路径执行:权限过滤
1919
├── 检查 requiredMcpServers ← MCP 依赖验证(最长等 30s)
2020
├── assembleToolPool(workerPermissionContext) ← 独立组装工具池
2121
├── createAgentWorktree() ← 可选 worktree 隔离
2222
23-
runAgent() ← 核心执行(runAgent.ts:248
23+
runAgent() ← 核心执行(runAgent.ts)
2424
├── getAgentSystemPrompt() ← 构建 agent 专属 system prompt
2525
├── initializeAgentMcpServers() ← agent 级 MCP 服务器
2626
├── executeSubagentStartHooks() ← Hook 注入
@@ -54,7 +54,7 @@ Fork 实验的门控函数 `isForkSubagentEnabled()` 需要同时满足三个前
5454
Fork 路径的设计核心是 **Prompt Cache 共享**:所有 fork 子进程共享父 Agent 的完整 `assistant` 消息(所有 `tool_use` 块),用相同的占位符 `tool_result` 填充,只有最后一个 `text` 块包含各自的指令。这使得 API 请求前缀字节完全一致,最大化缓存命中。
5555

5656
```typescript
57-
// forkSubagent.ts:142 — 所有 fork 子进程的占位结果
57+
// forkSubagent.ts:93 — 所有 fork 子进程的占位结果
5858
const FORK_PLACEHOLDER_RESULT = 'Fork started — processing in background'
5959

6060
// buildForkedMessages() 构建:
@@ -63,7 +63,7 @@ const FORK_PLACEHOLDER_RESULT = 'Fork started — processing in background'
6363

6464
### Fork 递归防护
6565

66-
Fork 子进程保留 Agent 工具(为了 cache-identical tool defs),但通过两道防线防止递归 fork`AgentTool.tsx:332`
66+
Fork 子进程保留 Agent 工具(为了 cache-identical tool defs),但通过两道防线防止递归 fork:
6767

6868
1. **`querySource` 检查**(压缩安全):`context.options.querySource === 'agent:builtin:fork'`
6969
2. **消息扫描**(降级兜底):检测 `<fork-boilerplate>` 标签
@@ -88,7 +88,7 @@ Fork 子进程保留 Agent 工具(为了 cache-identical tool defs),但通
8888

8989
### 内置 Agent
9090

91-
系统预定义了几个内置 Agent(`src/tools/AgentTool/builtinAgents.ts`),各有明确的职责和模型配置:
91+
系统预定义了几个内置 Agent(`packages/builtin-tools/src/tools/AgentTool/builtInAgents.ts`),各有明确的职责和模型配置:
9292

9393
| Agent | 模型 | 权限 | 用途 |
9494
|-------|------|------|------|
@@ -119,7 +119,7 @@ const workerTools = assembleToolPool(workerPermissionContext, appState.mcp.tools
119119

120120
### 工具过滤的 resolveAgentTools
121121

122-
`runAgent.ts:500-502` 在工具组装后进一步过滤:
122+
`runAgent.ts:508` 在工具组装后进一步过滤:
123123

124124
```typescript
125125
const resolvedTools = useExactTools
@@ -142,7 +142,7 @@ const resolvedTools = useExactTools
142142

143143
## Worktree 隔离机制
144144

145-
`isolation: "worktree"` 参数让子 Agent 在独立的 git worktree 中工作(`AgentTool.tsx:590-593`):
145+
`isolation: "worktree"` 参数让子 Agent 在独立的 git worktree 中工作(`AgentTool.tsx:863`):
146146

147147
```typescript
148148
const slug = `agent-${earlyAgentId.slice(0, 8)}`
@@ -183,7 +183,7 @@ runAsyncAgentLifecycle() ← 后台执行(agentToolUtils.ts)
183183

184184
### 同步 Agent(前台运行)
185185

186-
同步 Agent 的关键特性是 **可后台化**`AgentTool.tsx:818-833`):
186+
同步 Agent 的关键特性是 **可后台化**`AgentTool.tsx:1107`):
187187

188188
```typescript
189189
const registration = registerAgentForeground({
@@ -218,7 +218,7 @@ const raceResult = await Promise.race([
218218

219219
## MCP 依赖的等待机制
220220

221-
如果 Agent 声明了 `requiredMcpServers``call()` 会等待这些服务器连接完成(`AgentTool.tsx:371-410`):
221+
如果 Agent 声明了 `requiredMcpServers``call()` 会等待这些服务器连接完成(`AgentTool.tsx:576`):
222222

223223
```typescript
224224
const MAX_WAIT_MS = 30_000 // 最长等 30 秒

docs/agent/worktree-isolation.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ Worktree 文件统一存放在仓库根目录下的 `.claude/worktrees/`:
3737

3838
## 创建流程:EnterWorktreeTool
3939

40-
`EnterWorktreeTool``src/tools/EnterWorktreeTool/EnterWorktreeTool.ts`)的执行链路:
40+
`EnterWorktreeTool``packages/builtin-tools/src/tools/EnterWorktreeTool/EnterWorktreeTool.ts`)的执行链路:
4141

4242
```
4343
EnterWorktreeTool.call({ name? })
@@ -83,7 +83,7 @@ EnterWorktreeTool.call({ name? })
8383

8484
## 退出流程:ExitWorktreeTool
8585

86-
`ExitWorktreeTool``src/tools/ExitWorktreeTool/ExitWorktreeTool.ts`)支持两种退出策略:
86+
`ExitWorktreeTool``packages/builtin-tools/src/tools/ExitWorktreeTool/ExitWorktreeTool.ts`)支持两种退出策略:
8787

8888
### keep:保留 worktree
8989

docs/auto-updater.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ useInterval(checkForUpdates, 30 * 60 * 1000); // 每 30 分钟
4242

4343
任何更新尝试之前,系统会依次检查:
4444

45-
1. **自动更新是否被禁用?**`getAutoUpdaterDisabledReason()``src/utils/config.ts:1735`
45+
1. **自动更新是否被禁用?**`getAutoUpdaterDisabledReason()``src/utils/config.ts:1737`
4646
- `NODE_ENV === 'development'`
4747
- 设置了 `DISABLE_AUTOUPDATER` 环境变量
4848
- 仅限必要流量模式
@@ -81,7 +81,7 @@ useInterval(checkForUpdates, 30 * 60 * 1000); // 每 30 分钟
8181

8282
`src/utils/autoUpdater.ts:70``assertMinVersion()`
8383

84-
`src/main.tsx:1775` 在启动时调用
84+
定义于 `src/utils/autoUpdater.ts:70`,设计上在启动时调用(当前未接入启动流程)
8585

8686
```typescript
8787
void assertMinVersion();
@@ -200,7 +200,7 @@ Windows 系统使用文件复制而非符号链接。
200200

201201
**文件**: `src/migrations/migrateAutoUpdatesToSettings.ts`
202202

203-
一次性将旧版 `globalConfig.autoUpdates = false` 迁移为 settings 中的 `DISABLE_AUTOUPDATER=1` 环境变量。 `src/main.tsx:325` 在启动时调用
203+
一次性将旧版 `globalConfig.autoUpdates = false` 迁移为 settings 中的 `DISABLE_AUTOUPDATER=1` 环境变量。定义于 `src/migrations/migrateAutoUpdatesToSettings.ts`(当前未接入启动流程)
204204

205205
---
206206

@@ -270,7 +270,7 @@ React hook `useUpdateNotification(updatedVersion)` — 确保每次 semver 变
270270
| `src/utils/releaseNotes.ts` | Changelog 获取、缓存与展示 |
271271
| `src/utils/semver.ts` | Semver 版本比较(Bun 原生 + npm 回退) |
272272
| `src/utils/doctorDiagnostic.ts` | 安装类型检测与健康诊断 |
273-
| `src/utils/config.ts:1735` | `getAutoUpdaterDisabledReason()` — 禁用检查逻辑 |
273+
| `src/utils/config.ts:1737` | `getAutoUpdaterDisabledReason()` — 禁用检查逻辑 |
274274
| `src/migrations/migrateAutoUpdatesToSettings.ts` | 旧版配置迁移 |
275275
| `src/screens/Doctor.tsx` | Doctor 命令 UI,展示自动更新状态 |
276276

docs/context/compaction.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ const messagesForCompact = microcompactResult.messages
4848
MicroCompact 不压缩整个对话,而是**清除旧工具输出的内容**。它维护一个白名单:
4949

5050
```typescript
51-
// src/services/compact/microCompact.ts:41-48
51+
// src/services/compact/microCompact.ts:41-50
5252
const COMPACTABLE_TOOLS = new Set([
5353
FILE_READ_TOOL_NAME, // 'Read' - 文件读取
5454
...SHELL_TOOL_NAMES, // 'Bash' - 命令输出
@@ -143,7 +143,7 @@ const stripped2 = stripReinjectedAttachments(stripped) // 移除会被重新注
143143
压缩后,系统会从摘要中**重新注入关键上下文**
144144

145145
```typescript
146-
// compact.ts:124-132
146+
// compact.ts:126-134
147147
export const POST_COMPACT_TOKEN_BUDGET = 50_000 // 总预算
148148
export const POST_COMPACT_MAX_FILES_TO_RESTORE = 5 // 最多恢复 5 个文件
149149
export const POST_COMPACT_MAX_TOKENS_PER_FILE = 5_000 // 每文件 5K token

docs/context/project-memory.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Claude Code 的记忆系统是**纯文件**的——没有数据库、没有向
3939
`MEMORY.md` 是记忆的入口索引,每次对话都完整加载到上下文中:
4040

4141
```typescript
42-
// memdir.ts:35-38
42+
// memdir.ts:34-38
4343
export const ENTRYPOINT_NAME = 'MEMORY.md'
4444
export const MAX_ENTRYPOINT_LINES = 200
4545
export const MAX_ENTRYPOINT_BYTES = 25_000

docs/context/system-prompt.mdx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ buildSystemPromptBlocks() → TextBlockParam[] (分块 + cache_control 标
2020

2121
1. **`getSystemPrompt()`**`src/constants/prompts.ts:444`)—— 收集静态段 + 动态段,插入 `SYSTEM_PROMPT_DYNAMIC_BOUNDARY` 分界标记
2222
2. **`buildEffectiveSystemPrompt()`**`src/utils/systemPrompt.ts:41`)—— 按 Override > Coordinator > Agent > Custom > Default 优先级选择
23-
3. **`buildSystemPromptBlocks()`**`src/services/api/claude.ts:3214`)—— 调用 `splitSysPromptPrefix()` 分块,为每个块附加 `cache_control`
23+
3. **`buildSystemPromptBlocks()`**`src/services/api/claude.ts:3279`)—— 调用 `splitSysPromptPrefix()` 分块,为每个块附加 `cache_control`
2424

2525
## SystemPrompt 品牌类型
2626

2727
```typescript
28-
// src/utils/systemPromptType.ts:8
28+
// packages/@ant/model-provider/src/types/systemPrompt.ts:4
2929
export type SystemPrompt = readonly string[] & {
3030
readonly __brand: 'SystemPrompt'
3131
}
@@ -185,7 +185,7 @@ export function shouldUseGlobalCacheScope(): boolean {
185185

186186
### `getCacheControl()`:TTL 决策
187187

188-
`src/services/api/claude.ts:359` 生成的 `cache_control` 对象:
188+
`src/services/api/claude.ts:348` 生成的 `cache_control` 对象:
189189

190190
```typescript
191191
{
@@ -195,14 +195,14 @@ export function shouldUseGlobalCacheScope(): boolean {
195195
}
196196
```
197197

198-
1 小时 TTL 的判定逻辑(`should1hCacheTTL()`,第 394 行):
198+
1 小时 TTL 的判定逻辑(`should1hCacheTTL()`,第 383 行):
199199
- **Bedrock 用户**:通过环境变量 `ENABLE_PROMPT_CACHING_1H_BEDROCK` 启用
200200
- **1P 用户**:通过 GrowthBook 配置的 `allowlist` 数组匹配 `querySource`,支持前缀通配符(如 `"repl_main_thread*"`
201201
- **会话级锁定**:资格判定结果在 bootstrap state 中缓存,防止 GrowthBook 配置中途变化导致同一会话内 TTL 不一致
202202

203203
### 缓存破坏:Session-Specific Guidance 的放置
204204

205-
`getSessionSpecificGuidanceSection()``src/constants/prompts.ts:352`)的内容必须放在 `SYSTEM_PROMPT_DYNAMIC_BOUNDARY` **之后**。因为它包含:
205+
`getSessionSpecificGuidanceSection()``src/constants/prompts.ts:354`)的内容必须放在 `SYSTEM_PROMPT_DYNAMIC_BOUNDARY` **之后**。因为它包含:
206206
- 当前会话的 enabledTools 集合
207207
- `isForkSubagentEnabled()` 的运行时判定
208208
- `getIsNonInteractiveSession()` 的结果

docs/conversation/streaming.mdx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ message_stop ← 消息结束
3232

3333
### 事件处理状态机
3434

35-
`src/services/api/claude.ts``queryStreamRaw()` 函数的事件处理循环实现了一个基于 `switch(part.type)` 的状态机:
35+
`src/services/api/claude.ts``queryModelWithStreaming()` 函数的事件处理循环实现了一个基于 `switch(part.type)` 的状态机:
3636

3737
| 事件类型 | 处理逻辑 | 状态变更 |
3838
|----------|----------|----------|
@@ -167,10 +167,13 @@ UI 层通过 `useToolCallProgress` hook 实时展示命令输出,而不是等
167167

168168
| Provider | 流式协议 | 特殊处理 |
169169
|----------|----------|----------|
170-
| **Anthropic Direct** | 原生 SSE | 延迟最低,TTFT 最快 |
170+
| **firstParty** (Anthropic Direct) | 原生 SSE | 延迟最低,TTFT 最快 |
171171
| **AWS Bedrock** | AWS SDK 流式接口 | 需要额外的 beta header 和认证 |
172172
| **Google Vertex** | gRPC → 事件流 | 通过 `getMergedBetas()` 适配 |
173-
| **Azure** | Anthropic 兼容 API | 自定义 base URL |
173+
| **foundry** | Anthropic 兼容 API | 内部部署 |
174+
| **openai** | OpenAI 流式适配器 | 转换为 Anthropic 内部格式 |
175+
| **gemini** | Gemini 流式适配器 | 转换为 Anthropic 内部格式 |
176+
| **grok** (xAI) | Grok 流式适配器 | 转换为 Anthropic 内部格式 |
174177

175178
所有 Provider 通过统一的 `Stream<BetaRawMessageStreamEvent>` 抽象层屏蔽差异。上层代码(QueryEngine、REPL)不需要关心底层用的是哪个 Provider。
176179

docs/conversation/the-loop.mdx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -74,17 +74,17 @@ const toolUpdates = streamingToolExecutor
7474

7575
| 终止原因 | 触发位置 | 机制 |
7676
|----------|---------|------|
77-
| **blocking_limit** |646| Token 计数超过硬限制(非 autocompact 模式)→ 生成 PTL 错误消息 → 返回 |
78-
| **image_error** |980| `ImageSizeError` / `ImageResizeError` 异常 → 直接返回 |
79-
| **model_error** |999| `callModel()` 抛出不可恢复异常 → 生成错误消息 → 返回 |
80-
| **aborted_streaming** |1054| `abortController.signal.aborted`(流式阶段)→ 为未完成的 tool_use 生成合成 tool_result → 返回 |
81-
| **prompt_too_long** |1178/1185| 413 错误且 reactive compact 无法恢复 → 暂扣的错误消息被释放 → 返回 |
82-
| **completed** |1267| API 错误(限流、认证失败等)导致无法继续 → 返回 |
83-
| **stop_hook_prevented** |1282| Stop hook 返回 `preventContinuation: true` → 返回 |
84-
| **completed** |1360| 正常完成:AI 未发出 tool_use → `needsFollowUp = false` → 经过 stop hooks → 返回 |
85-
| **aborted_tools** |1518| `abortController.signal.aborted`(工具执行阶段)→ 返回 |
86-
| **hook_stopped** |1523| 工具执行期间 hook 返回 `shouldPreventContinuation` → 返回 |
87-
| **max_turns** |1714| 轮次计数超过 `maxTurns` 限制 → 返回 |
77+
| **blocking_limit** |686| Token 计数超过硬限制(非 autocompact 模式)→ 生成 PTL 错误消息 → 返回 |
78+
| **image_error** |1021| `ImageSizeError` / `ImageResizeError` 异常 → 直接返回 |
79+
| **model_error** |1040| `callModel()` 抛出不可恢复异常 → 生成错误消息 → 返回 |
80+
| **aborted_streaming** |1095| `abortController.signal.aborted`(流式阶段)→ 为未完成的 tool_use 生成合成 tool_result → 返回 |
81+
| **prompt_too_long** |1219/1226| 413 错误且 reactive compact 无法恢复 → 暂扣的错误消息被释放 → 返回 |
82+
| **completed** |1308| API 错误(限流、认证失败等)导致无法继续 → 返回 |
83+
| **stop_hook_prevented** |1323| Stop hook 返回 `preventContinuation: true` → 返回 |
84+
| **completed** |1401| 正常完成:AI 未发出 tool_use → `needsFollowUp = false` → 经过 stop hooks → 返回 |
85+
| **aborted_tools** |1559| `abortController.signal.aborted`(工具执行阶段)→ 返回 |
86+
| **hook_stopped** |1564| 工具执行期间 hook 返回 `shouldPreventContinuation` → 返回 |
87+
| **max_turns** |1755| 轮次计数超过 `maxTurns` 限制 → 返回 |
8888

8989
## 继续条件(恢复路径)
9090

@@ -158,7 +158,7 @@ type State = {
158158
- **每一步都产生真实信息**:`runTools()` 返回的 `toolResults` 是 API 不可能预知的——命令输出、文件内容、错误信息
159159
- **动态上下文管理**:每轮迭代前都重新评估压缩需求(autocompact → microcompact → snip),基于最新的 token 计数
160160
- **错误即时恢复**:工具失败不需要推倒重来——stop hook 可以注入阻塞错误让 AI 修正策略
161-
- **用户可控**:`abortController.signal` 在循环的多个检查点被检测(第 1018、1048、1488 行),用户按 ESC 可以优雅中断
161+
- **用户可控**:`abortController.signal` 在循环的多个检查点被检测(第 1059、1095、1529 行),用户按 ESC 可以优雅中断
162162
- **成本控制**:Token Budget 在每轮终止前检查,防止 AI 无效循环
163163
164164
## 一个完整的迭代示例

docs/extensibility/custom-agents.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Claude Code 的 Agent 不仅仅来自用户自定义——系统有三类来源
1212

1313
| 来源 | 位置 | 优先级 |
1414
|------|------|--------|
15-
| **Built-in** | `src/tools/AgentTool/built-in/` 硬编码 | 最低(可被覆盖) |
15+
| **Built-in** | `packages/builtin-tools/src/tools/AgentTool/built-in/` 硬编码 | 最低(可被覆盖) |
1616
| **Plugin** | 通过插件系统注册 ||
1717
| **User/Project/Policy** | `.claude/agents/*.md` 或 settings.json | 最高 |
1818

@@ -127,7 +127,7 @@ color: "blue" # 终端中的 Agent 颜色标识
127127
以内置 Explore Agent 为例:
128128

129129
```typescript
130-
// src/tools/AgentTool/built-in/exploreAgent.ts
130+
// packages/builtin-tools/src/tools/AgentTool/built-in/exploreAgent.ts
131131
disallowedTools: [
132132
'Agent', // 不能嵌套调用 Agent
133133
'ExitPlanMode', // 不需要 plan mode

docs/extensibility/hooks.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ SDK 非交互模式下信任是隐式的(`getIsNonInteractiveSession()` 为 tr
240240

241241
## Session Hook 的生命周期
242242

243-
Agent 和 Skill 的前置 Hook 通过 `registerFrontmatterHooks()` 注册(调用位置:`src/tools/AgentTool/runAgent.ts`;定义位置:`src/utils/hooks/registerFrontmatterHooks.ts`),绑定到 agent 的 session ID。Agent 结束时通过 `clearSessionHooks()`(定义位置:`src/utils/hooks/sessionHooks.ts`)清理。
243+
Agent 和 Skill 的前置 Hook 通过 `registerFrontmatterHooks()` 注册(调用位置:`packages/builtin-tools/src/tools/AgentTool/runAgent.ts`;定义位置:`src/utils/hooks/registerFrontmatterHooks.ts`),绑定到 agent 的 session ID。Agent 结束时通过 `clearSessionHooks()`(定义位置:`src/utils/hooks/sessionHooks.ts`)清理。
244244

245245
```typescript
246246
// runAgent.ts — 注册 agent 的前置 Hook

0 commit comments

Comments
 (0)