本章总览
src/services/ 是 Claude Code 的「业务服务层」:Anthropic API 流式调用、MCP 客户端连接、上下文压缩(compact)、GrowthBook/Datadog/1P 遥测等横切能力均集中在此(148 个文件,约 53949 行)。务必区分:services/api/claude.ts(模型请求)≠ utils/api.ts(消息序列化辅助)。
总览图
学完本章你应该能
- 建立 services 四大子主题的阅读顺序
- 能在源码树中从本页跳转到子章节
- 理解 api / mcp / compact / analytics 的协作边界
建议学习步骤
- 浏览下方子章节导航表,选择入口主题
- 点击模块源码树中的高亮文件跳转到对应讲解
- 建议顺序:api-claude → mcp-client → compact → analytics
模块在架构中的位置
services 是 src/ 下的一级目录,共 148 个文件、53,949 行。一句话概括:22 个子系统:API 通信、MCP 客户端、上下文压缩、OAuth、插件、遥测、语音、记忆提取等。
模块 UML 图表
compact 服务活动图
概览
| 指标 | 数值 |
|---|---|
| 行数 | 53,949 |
| 文件 | 148 |
子章节导航
| 子章节 | 主题 | 核心路径 |
|---|---|---|
| api-claude | 流式 API、重试、usage、prompt cache | services/api/claude.ts |
| mcp-client | MCP 连接、传输层、工具调用 | services/mcp/client.ts |
| compact | 自动/手动压缩、摘要 fork | services/compact/ |
| analytics | GrowthBook、Datadog、1P 事件 | services/analytics/ |
与其他模块的边界
api/claude.ts 被 query 循环调用,产出 AssistantMessage 与 StreamEvent;mcp/client.ts 把外部 MCP 服务器工具注册进 ToolUseContext;compact/ 在 token 逼近上限时 fork 子 Agent 生成摘要并插入 SystemCompactBoundaryMessage;analytics/ 提供 logEvent 无环入口,sink 在启动时 attach。
阅读 hooks/useCanUseTool 时,MCP 工具权限与 mcp-client 章的 fetchToolsForClient 命名规则(mcp__server__tool)对照;阅读 utils/messages 时,compact 边界消息类型 isCompactBoundaryMessage 在 compact 章有完整生命周期说明。
本章小结与延伸
services 模块按数据流拆分:先懂 API 请求,再懂 MCP 工具接入,再懂上下文压缩,最后懂遥测与 feature gate。 继续学习: