Skip to content

Commit b947587

Browse files
committed
docs: add utils architecture (290 files, 88K lines, 32 subdirectories)
1 parent 7919dac commit b947587

1 file changed

Lines changed: 295 additions & 0 deletions

File tree

ARCHITECTURE-UTILS.md

Lines changed: 295 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,295 @@
1+
# Utils 架构详细文档
2+
3+
> 290 个独立工具文件 + 32 个子目录,总计 ~88,500 行代码
4+
> 占项目总代码量的 ~17%,是最大的单一模块
5+
6+
---
7+
8+
## 1. 子目录概览 (32 个)
9+
10+
按文件数量排序:
11+
12+
| 目录 | 文件数 | 职责 |
13+
|------|--------|------|
14+
| `plugins/` | 44 | 插件系统:加载、安装、版本、市场、验证 |
15+
| `permissions/` | 24 | 权限引擎:模式、规则、分类器、路径验证 |
16+
| `bash/` | 23 | Bash 解析器:AST、heredoc、shell completion |
17+
| `swarm/` | 22 | 团队协作:后端、生成、权限同步、重连 |
18+
| `settings/` | 19 | 配置系统:验证、缓存、MDM、变更检测 |
19+
| `hooks/` | 17 | 钩子系统:注册、执行、事件、配置 |
20+
| `model/` | 16 | 模型管理:别名、能力、deprecation、提供商 |
21+
| `computerUse/` | 15 | 计算机使用:执行器、截图、输入、清理 |
22+
| `shell/` | 10 | Shell 抽象:Bash/PowerShell 提供者、前缀 |
23+
| `telemetry/` | 9 | 遥测:事件、追踪、性能、插件追踪 |
24+
| `claudeInChrome/` | 7 | Chrome 集成:native host、MCP server |
25+
| `secureStorage/` | 6 | 安全存储:macOS Keychain、明文 fallback |
26+
| `deepLink/` | 6 | 深度链接:解析、协议处理、终端启动 |
27+
| `task/` | 5 | 任务框架:输出格式化、磁盘持久化 |
28+
| `suggestions/` | 5 | 补全建议:命令、目录、shell 历史 |
29+
| `nativeInstaller/` | 5 | 原生安装器:下载、安装、包管理器 |
30+
| `teleport/` | 4 | 远程传送:API、环境选择、git bundle |
31+
| `processUserInput/` | 4 | 用户输入处理:bash 命令、斜杠命令、文本 |
32+
| `powershell/` | 3 | PowerShell:危险 cmdlet、解析器 |
33+
| `git/` | 3 | Git 操作:config 解析、文件系统、gitignore |
34+
| `ultraplan/` | 2 | 超级计划:CCR 会话、关键词 |
35+
| `sandbox/` | 2 | 沙箱:适配器、UI 工具 |
36+
| `messages/` | 2 | 消息映射:SDK 消息转换 |
37+
| `memory/` | 2 | 记忆:类型、版本 |
38+
| `mcp/` | 2 | MCP 工具:日期解析、验证 |
39+
| `filePersistence/` | 2 | 文件持久化:扫描器 |
40+
| `dxt/` | 2 | DXT:辅助函数、zip |
41+
| `background/` | 2 | 后台任务:远程预检查、会话 |
42+
| `todo/` | 1 | Todo 类型定义 |
43+
| `skills/` | 1 | 技能变更检测 |
44+
| `github/` | 1 | GitHub 认证状态 |
45+
46+
---
47+
48+
## 2. 核心工具文件 (根目录 290 个)
49+
50+
### 2.1 文件系统与路径 (~25 文件)
51+
52+
| 文件 | 职责 |
53+
|------|------|
54+
| `file.ts` | 文件操作辅助 |
55+
| `fileRead.ts` | 文件读取(带缓存、限制) |
56+
| `fileReadCache.ts` | 文件读取缓存 |
57+
| `fileStateCache.ts` | 文件状态缓存 (clone, merge, size limit) |
58+
| `fileHistory.ts` | 文件历史快照追踪 |
59+
| `fileOperationAnalytics.ts` | 文件操作分析 |
60+
| `filePersistence/filePersistence.ts` | 文件持久化 |
61+
| `glob.ts` | Glob 模式匹配 |
62+
| `ripgrep.ts` | ripgrep 封装(代码搜索) |
63+
| `fsOperations.ts` | 文件系统操作 |
64+
| `path.ts` | 路径工具 |
65+
| `tempfile.ts` | 临时文件生成 |
66+
| `xdg.ts` | XDG 目录标准 |
67+
| `systemDirectories.ts` | 系统目录 |
68+
| `cachePaths.ts` | 缓存路径 |
69+
| `getWorktreePaths.ts` | Worktree 路径 |
70+
| `getWorktreePathsPortable.ts` | 跨平台 worktree 路径 |
71+
| `worktree.ts` | Worktree 管理 |
72+
| `worktreeModeEnabled.ts` | Worktree 模式开关 |
73+
| `windowsPaths.ts` | Windows 路径处理 |
74+
75+
### 2.2 Git 相关 (~10 文件)
76+
77+
| 文件 | 职责 |
78+
|------|------|
79+
| `git.ts` | Git 操作:findGitRoot, getBranch, getIsGit, getWorktreeCount |
80+
| `gitDiff.ts` | Git diff 解析和格式化 |
81+
| `git/gitConfigParser.ts` | Git config 解析 |
82+
| `git/gitFilesystem.ts` | Git 文件系统抽象 |
83+
| `git/gitignore.ts` | Gitignore 处理 |
84+
| `gitSettings.ts` | Git 设置 |
85+
| `github/ghAuthStatus.ts` | GitHub 认证状态 |
86+
| `githubRepoPathMapping.ts` | GitHub 仓库路径映射 |
87+
| `ghPrStatus.ts` | PR 状态查询 |
88+
| `commitAttribution.ts` | Commit 归因 |
89+
90+
### 2.3 进程与执行 (~10 文件)
91+
92+
| 文件 | 职责 |
93+
|------|------|
94+
| `process.ts` | 进程工具:writeToStderr, peekForStdinData |
95+
| `execFileNoThrow.ts` | 安全 exec (无异常) |
96+
| `execFileNoThrowPortable.ts` | 跨平台 exec |
97+
| `execSyncWrapper.ts` | 同步 exec 包装 |
98+
| `genericProcessUtils.ts` | 通用进程工具 |
99+
| `subprocessEnv.ts` | 子进程环境变量 |
100+
| `Shell.ts` | Shell 管理:cwd、执行 |
101+
| `ShellCommand.ts` | Shell 命令构建 |
102+
| `which.ts` | 可执行文件查找 |
103+
| `findExecutable.ts` | 可执行文件发现 |
104+
| `tree-kill` | 进程树终止 |
105+
106+
### 2.4 加密与安全 (~8 文件)
107+
108+
| 文件 | 职责 |
109+
|------|------|
110+
| `crypto.ts` | 加密工具 |
111+
| `secureStorage/index.ts` | 安全存储入口 |
112+
| `secureStorage/macOsKeychainStorage.ts` | macOS Keychain |
113+
| `secureStorage/keychainPrefetch.ts` | Keychain 预取 (启动优化) |
114+
| `secureStorage/fallbackStorage.ts` | Fallback 明文存储 |
115+
| `secureStorage/plainTextStorage.ts` | 明文存储 |
116+
| `caCerts.ts` / `caCertsConfig.ts` | CA 证书 |
117+
| `mtls.ts` | mTLS 支持 |
118+
119+
### 2.5 配置与设置 (~15 文件)
120+
121+
| 文件 | 职责 |
122+
|------|------|
123+
| `config.ts` | 全局配置:读写 ~/.claude/ |
124+
| `configConstants.ts` | 配置常量 |
125+
| `env.ts` / `envDynamic.ts` / `envUtils.ts` / `envValidation.ts` | 环境变量管理 |
126+
| `managedEnv.ts` / `managedEnvConstants.ts` | 管理环境变量 |
127+
| `settings/settings.ts` | 设置加载(多源合并) |
128+
| `settings/validation.ts` | Zod schema 验证 |
129+
| `settings/settingsCache.ts` | 设置缓存 |
130+
| `settings/changeDetector.ts` | 文件变更检测 |
131+
| `settings/mdm/` | MDM 企业设置 |
132+
133+
### 2.6 认证与 API (~12 文件)
134+
135+
| 文件 | 职责 |
136+
|------|------|
137+
| `auth.ts` | 认证:OAuth token、Claude.ai 订阅 |
138+
| `authFileDescriptor.ts` | 认证文件描述符 |
139+
| `authPortable.ts` | 跨平台认证 |
140+
| `api.ts` | API 工具 |
141+
| `apiPreconnect.ts` | API 预连接 (启动优化) |
142+
| `billing.ts` | 计费 |
143+
| `user.ts` | 用户信息 |
144+
| `sessionIngressAuth.ts` | 会话入口认证 |
145+
| `jwt` 相关 | JWT 工具 |
146+
| `proxy.ts` | 代理配置 |
147+
148+
### 2.7 Diff 与比较 (~5 文件)
149+
150+
| 文件 | 职责 |
151+
|------|------|
152+
| `diff.ts` | Diff 工具 |
153+
| `treeify.ts` | 树形展示 |
154+
| `highlightMatch.tsx` | 匹配高亮 |
155+
| `contentArray.ts` | 内容数组操作 |
156+
| `truncate.ts` | 文本截断 |
157+
158+
### 2.8 UI 与渲染 (~12 文件)
159+
160+
| 文件 | 职责 |
161+
|------|------|
162+
| `ansiToPng.ts` / `ansiToSvg.ts` | ANSI 转图片/SVG |
163+
| `cliHighlight.ts` | CLI 高亮 |
164+
| `format.ts` | 格式化(token、时间、文件大小) |
165+
| `markdown.ts` | Markdown 处理 |
166+
| `renderOptions.ts` | 渲染选项 |
167+
| `staticRender.tsx` | 静态渲染 |
168+
| `fullscreen.ts` | 全屏模式 |
169+
| `hyperlink.ts` | 终端超链接 |
170+
| `ink.ts` | Ink 工具 |
171+
| `screenshotClipboard.ts` | 截图剪贴板 |
172+
| `theme.ts` / `systemTheme.ts` | 主题管理 |
173+
| `exportRenderer.tsx` | 导出渲染器 |
174+
175+
### 2.9 会话管理 (~12 文件)
176+
177+
| 文件 | 职责 |
178+
|------|------|
179+
| `sessionStart.ts` | 会话启动钩子 |
180+
| `sessionState.ts` | 会话状态 |
181+
| `sessionStorage.ts` | 会话存储(transcript 读写) |
182+
| `sessionStoragePortable.ts` | 跨平台会话存储 |
183+
| `sessionRestore.ts` | 会话恢复 |
184+
| `sessionTitle.ts` | 会话标题 |
185+
| `sessionUrl.ts` | 会话 URL |
186+
| `sessionActivity.ts` | 会话活动追踪 |
187+
| `sessionEnvVars.ts` | 会话环境变量 |
188+
| `sessionEnvironment.ts` | 会话环境 |
189+
| `concurrentSessions.ts` | 并发会话检测 |
190+
| `conversationRecovery.ts` | 对话恢复 |
191+
192+
### 2.10 其他重要文件
193+
194+
| 文件 | 职责 |
195+
|------|------|
196+
| `abortController.ts` | AbortController 工具 |
197+
| `array.ts` | 数组工具(count, uniq 等) |
198+
| `bufferedWriter.ts` | 缓冲写入 |
199+
| `circularBuffer.ts` | 环形缓冲区 |
200+
| `cleanupRegistry.ts` | 清理注册表 |
201+
| `cron.ts` / `cronScheduler.ts` / `cronTasks.ts` | Cron 定时任务 |
202+
| `debug.ts` / `debugFilter.ts` | 调试工具 |
203+
| `errors.ts` | 错误处理 |
204+
| `fpsTracker.ts` | FPS 追踪 |
205+
| `gracefulShutdown.ts` | 优雅关闭 |
206+
| `hash.ts` | 哈希工具 |
207+
| `http.ts` | HTTP 工具 |
208+
| `json.ts` / `jsonRead.ts` | JSON 解析 |
209+
| `lockfile.ts` | 文件锁 |
210+
| `log.ts` | 日志 |
211+
| `memoize.ts` | Memoize 工具 |
212+
| `modifiers.ts` | 修饰键检测 |
213+
| `platform.ts` | 平台检测 |
214+
| `queueProcessor.ts` | 队列处理器 |
215+
| `sanitization.ts` | 输入清理 |
216+
| `semver.ts` | 语义版本 |
217+
| `sequential.ts` | 顺序执行器 |
218+
| `signal.ts` | 信号处理 |
219+
| `sleep.ts` | 延迟 |
220+
| `stringUtils.ts` | 字符串工具 |
221+
| `uuid.ts` | UUID 生成/验证 |
222+
| `words.ts` | 单词工具 |
223+
| `yaml.ts` | YAML 解析 |
224+
| `xml.ts` | XML 工具 |
225+
| `zodToJsonSchema.ts` | Zod → JSON Schema 转换 |
226+
227+
---
228+
229+
## 3. 关键设计模式
230+
231+
### 3.1 启动预取
232+
233+
多个文件实现启动时并行预取:
234+
- `apiPreconnect.ts` — API 连接预热
235+
- `secureStorage/keychainPrefetch.ts` — macOS Keychain 预读
236+
- `settings/mdm/rawRead.ts` — MDM 设置预读
237+
238+
### 3.2 缓存层级
239+
240+
```
241+
内存缓存 (memoize / LRU)
242+
→ 文件缓存 (settingsCache, fileReadCache)
243+
→ 文件系统 (config.json, settings.json)
244+
```
245+
246+
### 3.3 多源配置合并
247+
248+
`settings/settings.ts` 实现多层配置合并:
249+
```
250+
远程管理 → 策略 → 用户 → 项目 → 本地 → CLI → 环境变量
251+
(优先级从低到高)
252+
```
253+
254+
### 3.4 安全沙箱
255+
256+
- `sandbox/sandbox-adapter.ts` — 沙箱适配器
257+
- `permissions/dangerousPatterns.ts` — 危险模式检测
258+
- `permissions/bashClassifier.ts` — Bash 命令分类器
259+
- `permissions/yoloClassifier.ts` — YOLO 分类器
260+
261+
### 3.5 跨平台兼容
262+
263+
多处实现平台抽象:
264+
- `shell/shellProvider.ts` — Bash/PowerShell 抽象
265+
- `secureStorage/` — macOS Keychain / 明文 fallback
266+
- `getWorktreePathsPortable.ts` — 跨平台路径
267+
- `execFileNoThrowPortable.ts` — 跨平台 exec
268+
269+
---
270+
271+
## 4. 依赖关系
272+
273+
utils/ 是最底层的模块,被所有其他模块依赖:
274+
275+
```
276+
main.tsx → utils/ (config, env, auth, platform, ...)
277+
REPL.tsx → utils/ (session, file, git, ...)
278+
QueryEngine → utils/ (model, tokens, ...)
279+
Tools → utils/ (bash, permissions, ...)
280+
Components → utils/ (format, theme, ...)
281+
Services → utils/ (http, crypto, ...)
282+
283+
utils/ ← 无外部依赖(纯工具层)
284+
```
285+
286+
---
287+
288+
## 5. 代码质量特征
289+
290+
- **88,500 行**,占项目 17%
291+
- **290 + 32×N 个文件**,高度模块化
292+
- 大量 memoize 使用(lodash-es)
293+
- Zod schema 验证贯穿配置系统
294+
- 完善的错误处理(`errors.ts` 统一错误类型)
295+
- 详细的调试日志(`debug.ts`, `log.ts`

0 commit comments

Comments
 (0)