Documentation

Step 10: 服务层深度分析

分析日期: 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 反应式紧凑: 检测上下文使用触发紧凑

Tool 服务 (高重要性)

文件 行数 职责
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 功能