|
| 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