分析日期: 2026-04-16
核心目录: src/services/ (~50+ 文件)
1. 服务清单
API 服务 (高重要性)
| 文件 |
行数 |
职责 |
公共 API |
api/client.ts |
~400 |
多提供商 API 客户端工厂 (Direct, Bedrock, Vertex, Foundry) |
createClient() |
api/claude.ts |
~3,420 |
核心 API 通信: 流式消息、重试、多提供商路由 |
createResponse(), streamMessages() |
api/withRetry.ts |
~823 |
通用重试包装器: 指数退避 + 抖动 |
withRetry() |
api/sessionIngress.ts |
- |
会话入口认证 |
getSessionIngressAuthHeaders() |
api/errorUtils.ts |
- |
API 错误格式化 |
formatAPIError() |
重试策略:
- 基础延迟 500ms, 2^attempt, 抖动 ±25%, 最大 32s
- 可配置
CLAUDE_CODE_MAX_RETRIES (默认 10)
- 529/过载: 最多 3 次连续重试后模型回退
- 持久模式: 无人值守会话最多 6 小时上限
错误分类:
- 401 -> 清除 API key 缓存 + OAuth 刷新
- 429 -> 订阅者门控重试
- 529/过载 -> 条件重试 (仅前台)
- 400 上下文溢出 -> 自动调整
max_tokens
ECONNRESET/EPIPE -> 禁用 keep-alive + 重连
MCP 服务 (高重要性)
| 文件 |
行数 |
职责 |
公共 API |
mcp/client.ts |
~3,348 |
MCP 客户端管理: 连接、发现、重连 |
useManageMCPConnections |
mcp/auth.ts |
~2,465 |
MCP OAuth 认证: PKCE、XAA、动态客户端注册 |
refreshAuthorization() |
mcp/config.ts |
~1,578 |
MCP 服务器配置解析 |
parseMcpConfig() |
mcp/types.ts |
- |
MCP 类型定义: 连接状态、传输类型 |
类型导出 |
mcp/claudeai.ts |
- |
Claude.ai MCP 代理 |
isOfficialMcpUrl() |
mcp/officialRegistry.ts |
- |
官方 MCP 注册表 |
fetchOfficialMcpRegistry() |
连接状态 (可辨识联合):
ConnectedMCPServer — 活跃连接
FailedMCPServer — 连接失败
NeedsAuthMCPServer — 需要 OAuth
PendingMCPServer — 正在重连
DisabledMCPServer — 用户禁用
传输类型: stdio, sse, sse-ide, http, ws, ws-ide, sdk, claudeai-proxy
OAuth 服务 (中重要性)
| 文件 |
职责 |
公共 API |
oauth/client.ts |
OAuth 客户端: PKCE 授权码流 |
refreshOAuthToken(), getClaudeAIOAuthTokens() |
oauth/getOauthProfile.ts |
OAuth 配置文件获取 |
getOauthProfileFromOauthToken() |
oauth/auth-code-listener.ts |
本地 HTTP 回调服务器 |
startAuthCodeListener() |
OAuth 流程:
- 授权 URL:
https://platform.claude.com/oauth/authorize
- 令牌 URL:
https://platform.claude.com/v1/oauth/token
- Client ID:
9d1c250a-e61b-44d9-88ed-5944d1962f5e
- Scopes:
user:profile, user:inference, user:sessions:claude_code, user:mcp_servers
- S256 PKCE 代码挑战
- 自动刷新: 过期前 5 分钟
LSP 服务 (中重要性)
| 文件 |
职责 |
公共 API |
lsp/manager.ts |
LSP 服务器管理器单例 |
shutdownLspServerManager() |
lsp/LSPClient.ts |
LSP 客户端 |
诊断、悬停、定义跳转 |
lsp/LSPServerInstance.ts |
LSP 服务器实例 |
懒启动、异步初始化 |
Analytics 服务 (中重要性)
| 文件 |
行数 |
职责 |
analytics/growthbook.ts |
- |
GrowthBook 特性开关: 远程评估、磁盘缓存、6h/20min 刷新 |
analytics/metadata.ts |
~973 |
1P 事件元数据 |
analytics/datadog.ts |
- |
Datadog 日志: 100 条/批, 15s 刷新, 白名单 40 事件 |
analytics/firstPartyEventLogger.ts |
- |
1P 事件日志: OTel 批处理器 |
analytics/index.ts |
- |
分析入口: logEvent() |
Compact 服务 (高重要性)
| 文件 |
职责 |
compact/autoCompact.ts |
自动紧凑: 5 级压缩级联 (Snip -> Microcompact -> Context Collapse -> Autocompact -> Reactive Compact) |
compact/microCompact.ts |
微紧凑: 缓存 MC 状态, MC 配置读取, MC 头注入 |
compact/reactiveCompact.ts |
反应式紧凑: 检测上下文使用触发紧凑 |
| 文件 |
行数 |
职责 |
tools/toolExecution.ts |
~1,745 |
工具执行主路径: checkPermissionsAndCallTool() 6 阶段管线 |
tools/StreamingToolExecutor.ts |
~531 |
流式工具执行器: 队列管理、并发控制 |
tools/toolHooks.ts |
~650 |
Pre/Post 工具 Hook 执行 |
tools/toolOrchestration.ts |
~188 |
工具编排 |
SessionMemory 服务 (中重要性)
| 文件 |
职责 |
SessionMemory/ 3 文件 |
会话记忆: 跨会话持久化、记忆提取 |
策略限制 (低重要性)
| 文件 |
职责 |
policyLimits/ |
策略限制: 企业远程设置 |
2. 服务依赖图
1
2
3
4
5
6
7
8
9
10
11
12
13
| +-- API 服务 <--+
| |
+-- OAuth 服务 -+ |
| |
| +-- MCP 服务 ----+
| | |
+-- Analytics -+ Tool 服务 -+
| | |
+-- LSP 服务 --+ Compact --+
| |
+-- SessionMemory -+
|
+-- Policy Limits
|
3. 错误处理/重试模式
| 服务 |
模式 |
重试策略 |
回退 |
| API 服务 |
withRetry 指数退避 |
500ms 基础, 2^attempt, ±25% 抖动, 最多 10 次 |
模型回退 (529/过载) |
| MCP 服务 |
SDK 内置重连 |
连接断开自动重连 |
FailedMCPServer 状态 |
| OAuth 服务 |
令牌刷新 |
401/403 触发刷新 |
重新认证流程 |
| GrowthBook |
优雅降级 |
5s 初始化超时回退到磁盘缓存 |
使用默认值 |
| Datadog |
尽力投递 |
无重试 |
静默失败 |
| LSP 服务 |
崩溃恢复 |
初始化失败清除单例 |
禁用 LSP 功能 |