File size: 9,114 Bytes
eeeb2b6
 
96f34e3
eeeb2b6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
762b1c8
eeeb2b6
762b1c8
eeeb2b6
762b1c8
eeeb2b6
762b1c8
 
 
eeeb2b6
762b1c8
 
 
eeeb2b6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
# 后端服务

Codev 提供一系列后台服务,涵盖 MCP 集成、上下文压缩、自主记忆整合、即时通讯集成、OAuth 认证、分析监控及工具执行引擎。

---

## MCP (Model Context Protocol)

**目录**: `src/services/mcp/`

MCP 客户端实现,基于 `@modelcontextprotocol/sdk`,支持多种传输层协议和 OAuth 认证。

### 核心文件

| 文件 | 描述 |
|------|------|
| `client.ts` | MCP 客户端 — 支持 Stdio、SSE、Streamable HTTP 三种传输协议;管理工具/资源/命令的发现与调用 |
| `auth.ts` | MCP OAuth 认证 — 基于 Authorization Server Metadata 发现流程,支持 PKCE、令牌刷新、本地 HTTP 服务器捕获授权码 |
| `config.ts` | MCP Server 配置解析 |
| `types.ts` | MCP 相关类型定义 |
| `InProcessTransport.ts` | 同进程传输层实现 |
| `SdkControlTransport.ts` | SDK Control 传输层 |
| `normalization.ts` | MCP 结果规范化 |
| `envExpansion.ts` | 环境变量展开 |
| `headersHelper.ts` | HTTP 头部辅助 |
| `elicitationHandler.ts` | MCP Elicit 请求处理 |
| `mcpStringUtils.ts` | MCP 字符串工具 |
| `claudeai.ts` | Claude AI 集成 |
| `officialRegistry.ts` | 官方 MCP 注册表 |
| `useManageMCPConnections.ts` | MCP 连接管理 Hook |
| `vscodeSdkMcp.ts` | VSCode SDK 兼容层 |
| `channelAllowlist.ts` / `channelPermissions.ts` / `channelNotification.ts` | 频道权限与通知 |
| `MCPConnectionManager.tsx` | MCP 连接管理器 UI 组件 |
| `xaa.ts` / `xaaIdpLogin.ts` | XAA 身份提供方登录 |
| `oauthPort.ts` | OAuth 回调端口管理 |

### 支持的传输协议

1. **StdioClientTransport** — 子进程标准输入/输出
2. **SSEClientTransport** — Server-Sent Events
3. **StreamableHTTPClientTransport** — 可流式 HTTP

### 发现能力

工具(Tools)、资源(Resources)、提示(Prompts)的自动发现与调用。

---

## 上下文压缩

**目录**: `src/services/compact/`

上下文压缩引擎,在对话历史超出上下文窗口时自动触发压缩,将冗长的历史会话压缩为精炼的摘要。

### 核心文件

| 文件 | 大小 | 描述 |
|------|------|------|
| `compact.ts` | 61 KB | **核心压缩引擎** — 将对话历史压缩为摘要,包含完整的压缩策略与边界消息管理 |
| `autoCompact.ts` | — | **自动压缩** — 当上下文窗口使用量超过阈值时自动触发压缩,管理 maxTokens、重试逻辑、token 估算 |
| `microCompact.ts` | — | **微压缩** — 细粒度工具结果压缩,仅压缩特定工具(FileRead、FileEdit、FileWrite、Glob、Grep、WebFetch、WebSearch 等)的输出 |
| `sessionMemoryCompact.ts` | — | **会话记忆压缩** — 实验性功能,将会话记忆压缩整合到会话恢复流程中 |
| `cachedMicrocompact.ts` | — | 缓存式微压缩,提升重复压缩效率 |
| `cachedMCConfig.ts` | — | 缓存微压缩配置 |
| `snipCompact.ts` / `snipProjection.ts` | — | 截断式压缩与投影 |
| `grouping.ts` | — | 消息分组策略 |
| `reactiveCompact.ts` | — | 响应式压缩 |
| `timeBasedMCConfig.ts` | — | 基于时间的微压缩配置 |
| `postCompactCleanup.ts` | — | 压缩后清理 |
| `prompt.ts` | — | 压缩提示词模板 |
| `apiMicrocompact.ts` | — | API 微压缩接口 |
| `compactWarningHook.ts` / `compactWarningState.ts` | — | 压缩警告 UI 状态管理 |

### 压缩流程

1. `autoCompact` 监控上下文窗口使用率
2. 当超过阈值时,调用 `compactConversation()`(在 `compact.ts` 中)
3. 压缩引擎提取历史消息,调用 AI 生成摘要
4. 摘要替换原始历史消息,压缩边界消息标记范围
5. `sessionMemoryCompact` 可选地将会话记忆额外压缩
6. `microCompact` 对工具结果进行细粒度压缩以进一步节省 token
7. `postCompactCleanup` 执行压缩后清理

---

## Auto Dream (自主记忆整合)

**目录**: `src/services/autoDream/`

Auto Dream 是一个后台记忆整合系统,在对话间期自动运行,将学习到的信息整理为持久化的记忆文件。

### 核心文件

| 文件 | 描述 |
|------|------|
| `autoDream.ts` | 主模块 — 后台记忆中整合,使用 `runForkedAgent` 执行 `/dream` 提示词。使用三道门控(Gate)按成本递增顺序判断是否执行:时间(距上次整合 >= minHours)、会话数(新会话 >= minSessions)、锁(无其他进程正在整合) |
| `config.ts` | 配置 — 是否启用 Auto Dream |
| `consolidationLock.ts` | 整合锁 — 基于 PID 和 mtime 的文件锁,防止多个进程同时整合。锁文件位于记忆目录,mtime 作为 `lastConsolidatedAt` 时间戳 |
| `consolidationPrompt.ts` | 整合提示词 — 构建 `/dream` 的系统提示词,指导 AI 反思记忆文件并整理为持久化知识 |

### 门控顺序

1. **时间门控**: 距上次整合 >= 最小小时数(一个 stat 调用,最便宜)
2. **会话门控**: 新产生的会话记录数 >= 最小会话数
3. **锁门控**: 无其他进程正在进行整合(最昂贵)

### 整合内容

- 回顾记忆目录中的 `.md` 文件
- 分析近期会话记录(transcript)
- 合成新的记忆,整理现有知识
- 确保记忆文件对后续会话具有良好可读性

---

## 飞书集成

**目录**: `src/services/feishu/`

飞书(Feishu/Lark)机器人集成,基于 `@larksuite/channel` SDK 的 WebSocket 长连接机器人。

详见 [飞书集成文档](feishu.md)。

### 功能速览

- 应用注册(支持 QR 码一键创建)
- DM 私聊 / Group 群聊模式
- 访问控制(白名单 / 管理员 / 拥有者)
- 引用上下文回复
- Markdown 格式化输出
- 语音回复(Edge TTS / VoxCPM 语音克隆)
- Keepalive 自动保活

---

## Telegram 集成

**文件**: `src/services/telegram/TelegramService.ts`

Telegram 机器人服务,基于 Telegram Bot API 实现消息收发、指令处理、行内键盘等功能。

### 功能

- `getMe` — 获取机器人信息
- `sendMessage` — 发送消息(支持 Markdown / HTML 格式)
- `editMessageText` — 编辑已发送消息
- `answerCallbackQuery` — 响应回调查询
- `sendChatAction` — 发送聊天动作指示器
- `setMyCommands` — 设置机器人命令列表
- `getUpdates` — 轮询获取更新

配置管理: `telegramConfig.ts` / `telegramTypes.ts`

---

## OAuth

**目录**: `src/services/oauth/`

通用 OAuth 2.0 认证服务,支持授权码流程(Authorization Code Flow with PKCE)。

### 核心文件

| 文件 | 描述 |
|------|------|
| `index.ts` | `OAuthService` — 主类,管理完整 OAuth 流程:生成 code_verifier、启动本地 HTTP 服务器监听回调、令牌交换 |
| `auth-code-listener.ts` | 授权码监听器 — 启动本地 HTTP 服务器捕获回调中的授权码 |
| `client.ts` | OAuth 客户端 HTTP 请求封装 |
| `crypto.ts` | PKCE 加密工具 — code_verifier / code_challenge 生成 |
| `getOauthProfile.ts` | 获取 OAuth 用户档案 |
| `types.ts` | OAuth 类型定义(令牌、速率限制、订阅类型等) |

### 流程

1. 生成 PKCE code_verifier 和 code_challenge
2. 构建授权 URL 并打开浏览器
3. 本地 HTTP 服务器监听回调 / 用户手动粘贴授权码
4. 用授权码换取令牌(access_token + refresh_token)
5. 支持令牌刷新和持久化

---

## 分析 (Analytics)

**目录**: `src/services/analytics/`

### 核心组件

| 文件 | 描述 |
|------|------|
| `index.ts` | 分析日志入口 — 标准化事件日志接口 |
| `growthbook.ts` | GrowthBook 特性标记集成 — 远程配置和 A/B 测试功能开关 |
| `config.ts` | Analytics 配置 |
| `metadata.ts` | 分析元数据提取 — 工具名称脱敏、MCP 工具详情、文件扩展名 |
| `datadog.ts` | Datadog 集成 |
| `firstPartyEventLogger.ts` / `firstPartyEventLoggingExporter.ts` | 第一方事件日志与导出 |
| `sink.ts` / `sinkKillswitch.ts` | 事件接收器与终止开关 |

### 功能

- 工具使用统计与耗时追踪
- 模型调用分析
- GrowthBook 远程特性配置
- Datadog APM 集成

---

## 工具执行引擎

**目录**: `src/services/tools/`

### 核心文件

| 文件 | 大小 | 描述 |
|------|------|------|
| `toolExecution.ts` | 60 KB | **工具执行引擎** — 核心工具运行逻辑,管理工具调用生命周期、权限检查、进度报告、结果处理 |
| `toolHooks.ts` | — | **工具钩子系统** — 执行 Pre-Tool 和 Post-Tool 挂钩,支持基于规则和基于审批的权限决策 |
| `StreamingToolExecutor.ts` | — | **流式工具执行器** — 管理并发工具执行队列,支持工具状态追踪(queued / executing / completed / yielded),支持进度消息即时推流 |
| `toolOrchestration.ts` | — | **工具编排** — 高级工具调度与编排逻辑 |

### 工具执行流程

1. **Pre-Tool Hooks**: 权限检查、规则匹配、审批流程
2. **工具调用**: 查找工具定义 -> 执行 -> 收集结果
3. **Post-Tool Hooks**: 结果处理、日志记录、统计更新
4. **Streaming**: 支持并发工具执行,进度实时推送