Code Reader
首页
帮助
设计文档
首页
帮助
设计文档
  • Claude Code 基础设施层深度分析

Claude Code 基础设施层深度分析

1. 基础设施层总览

Claude Code 的基础设施层由四大支柱组成:

模块路径规模职责
Utilssrc/utils/~329 文件 + 31 子目录通用工具函数库,涵盖 auth、config、git、MCP、permissions 等
Bootstrap Statesrc/bootstrap/state.ts1758 行全局状态单例,会话级可变状态的唯一来源
Native-TSsrc/native-ts/3 子目录纯 TS 重写的原生模块替代方案
Constantssrc/constants/21 文件全局常量定义(工具名、限制、密钥、产品 URL 等)

2. Utils 架构

2.1 顶层文件分类(~329 个 .ts 文件)

按领域划分为以下类别:

认证与安全 (Auth & Security) — ~10 文件

  • auth.ts — 主认证逻辑(2002 行),OAuth/API Key/AWS STS
  • authFileDescriptor.ts — 文件描述符传递 token
  • authPortable.ts — 跨平台认证(macOS keychain 抽象)
  • aws.ts, awsAuthStatusManager.ts — AWS 认证
  • caCerts.ts, caCertsConfig.ts — CA 证书管理
  • crypto.ts — crypto 封装
  • mtls.ts — mTLS 支持
  • privacyLevel.ts — 隐私级别控制

配置管理 (Config) — ~8 文件

  • config.ts — 主配置管理(1817 行),ProjectConfig/GlobalConfig
  • configConstants.ts — 配置相关常量
  • settings/ (17 文件) — 设置系统(schema、validation、cache、MDM)

Git 操作 — ~8 文件

  • git.ts — 主 git 操作(926 行),findGitRoot、diff、status
  • gitDiff.ts — diff 计算
  • gitSettings.ts — git 配置读取
  • git/ (3 文件) — gitConfigParser、gitFilesystem、gitignore
  • worktree.ts — worktree 管理
  • getWorktreePaths.ts, getWorktreePathsPortable.ts
  • detectRepository.ts

Shell 执行 — ~11 文件

  • Shell.ts, ShellCommand.ts — Shell 抽象
  • shell/ (10 文件) — bash/powershell provider、shell completion
  • bash/ (16 文件 + specs/) — Bash AST 解析、命令注册、heredoc、quoting
  • powershell/ (3 文件) — PowerShell 解析、危险 cmdlet 检测
  • which.ts — 可执行文件查找
  • findExecutable.ts

MCP (Model Context Protocol) — ~7 文件

  • mcp/ (2 文件) — dateTimeParser、elicitationValidation
  • mcpInstructionsDelta.ts — MCP 指令增量更新
  • mcpOutputStorage.ts — MCP 输出存储
  • mcpValidation.ts — MCP 验证
  • mcpWebSocketTransport.ts — WebSocket 传输层

权限系统 (Permissions) — 24 文件

  • permissions/ (24 文件) — 完整的权限引擎
    • permissions.ts — 核心权限逻辑
    • yoloClassifier.ts — 自动模式分类器
    • bashClassifier.ts — Bash 命令分类
    • dangerousPatterns.ts — 危险模式检测
    • PermissionMode.ts — 权限模式枚举
    • permissionExplainer.ts — 权限解释
    • pathValidation.ts — 路径验证
    • shellRuleMatching.ts — Shell 规则匹配
    • bypassPermissionsKillswitch.ts — 绕过权限的紧急开关

模型管理 (Model) — 16 文件

  • model/ (16 文件)
    • model.ts — 模型定义、别名解析
    • modelStrings.ts — 模型字符串管理
    • modelOptions.ts — 模型选项
    • configs.ts — 模型配置
    • providers.ts — API provider 管理
    • modelCapabilities.ts — 模型能力检测
    • bedrock.ts — AWS Bedrock 集成
    • antModels.ts — 内部模型
    • aliases.ts — 模型别名映射
    • deprecation.ts — 模型弃用管理
    • validateModel.ts — 模型验证

遥测 (Telemetry) — 9 文件

  • telemetry/ (9 文件)
    • events.ts — 事件定义
    • instrumentation.ts — OpenTelemetry 插桩
    • logger.ts — 日志
    • sessionTracing.ts — 会话追踪
    • betaSessionTracing.ts — Beta 会话追踪
    • bigqueryExporter.ts — BigQuery 导出
    • perfettoTracing.ts — Perfetto 追踪
    • pluginTelemetry.ts — 插件遥测
    • skillLoadedEvent.ts — 技能加载事件

插件系统 (Plugins) — 44 文件

  • plugins/ (44 文件) — 最大的 utils 子目录
    • 核心:pluginLoader.ts, managedPlugins.ts
    • 市场:marketplaceManager.ts, officialMarketplace.ts
    • 安装:pluginInstallationHelpers.ts, headlessPluginInstall.ts
    • 生命周期:pluginAutoupdate.ts, pluginVersioning.ts
    • 加载:loadPluginAgents.ts, loadPluginCommands.ts, loadPluginHooks.ts
    • 策略:pluginPolicy.ts, pluginBlocklist.ts
    • LSP:lspPluginIntegration.ts, lspRecommendation.ts

Swarm/Agent 团队 — 14 文件

  • swarm/ (14 文件) — 多代理协作
    • teammateInit.ts, teammateModel.ts — 队友初始化/模型
    • teamHelpers.ts — 团队辅助
    • inProcessRunner.ts — 进程内运行器
    • permissionSync.ts, leaderPermissionBridge.ts — 权限同步
    • reconnection.ts — 重连逻辑
    • backends/ — 后端实现

Hooks 系统 — 17 文件

  • hooks/ (17 文件)
    • AsyncHookRegistry.ts — 异步 hook 注册表
    • hookEvents.ts — hook 事件定义
    • hooksConfigManager.ts — hook 配置管理
    • execAgentHook.ts, execHttpHook.ts, execPromptHook.ts — hook 执行器
    • fileChangedWatcher.ts — 文件变更监控
    • postSamplingHooks.ts — 采样后 hook
    • registerSkillHooks.ts — 技能 hook 注册
    • ssrfGuard.ts — SSRF 防护

Computer Use — 15 文件

  • computerUse/ (15 文件) — 桌面自动化
    • executor.ts — 执行器
    • hostAdapter.ts — 宿主适配
    • setup.ts — 设置
    • mcpServer.ts — MCP 服务器
    • escHotkey.ts — 快捷键处理

会话管理 (Session) — ~15 文件

  • sessionState.ts, sessionStart.ts, sessionRestore.ts
  • sessionStorage.ts, sessionStoragePortable.ts
  • sessionTitle.ts, sessionUrl.ts
  • sessionActivity.ts, sessionEnvironment.ts
  • sessionEnvVars.ts, sessionFileAccessHooks.ts
  • sessionIngressAuth.ts
  • concurrentSessions.ts — 并发会话

其他重要领域

领域文件说明
CLIcliArgs.ts, cliHighlight.tsCLI 参数和语法高亮
日志log.ts (362 行)日志系统核心
文件操作file.ts, fileRead.ts, fsOperations.ts, fileHistory.ts文件读写、操作分析
格式化format.ts, formatBriefTimestamp.ts, truncate.ts, treeify.ts输出格式化
网络http.ts, proxy.ts, api.ts, apiPreconnect.tsHTTP/API 层
Diffdiff.ts — diff 算法;native-ts/color-diff/ — 彩色 diff
任务task/ (5 文件) — 任务框架;tasks.ts — 任务管理
存储secureStorage/ (6 文件) — 安全存储(macOS keychain、fallback)
IDE 集成ide.ts, idePathConversion.ts, jetbrains.tsIDE 集成
浏览器browser.ts — 浏览器控制
PDFpdf.ts, pdfUtils.ts — PDF 处理
图像imagePaste.ts, imageResizer.ts, imageStore.ts, imageValidation.ts图像处理管线
缓存cachePaths.ts, fileReadCache.ts, fileStateCache.ts, completionCache.ts多层缓存
Sandboxsandbox/ (2 文件)沙箱适配
Deep LinkdeepLink/ (6 文件)深度链接协议
Claude in ChromeclaudeInChrome/ (7 文件)Chrome 扩展集成
DXTdxt/ (2 文件)DXT 扩展包处理
Teleportteleport/ (4 文件)远程会话
Ultralanultraplan/ (2 文件)CCR 会话
Skillsskills/skillChangeDetector.ts技能变更检测
Suggestionssuggestions/ (5 文件)命令/目录/历史补全
Native InstallernativeInstaller/ (5 文件)原生模块安装

2.2 Utils 设计模式

模式 1: Lazy Loading + Memoization

// src/utils/color-diff/index.ts:34-43
let cachedHljs: HLJSApi | null = null
function hljs(): HLJSApi {
  if (cachedHljs) return cachedHljs
  const mod = require('highlight.js')
  cachedHljs = 'default' in mod && mod.default ? mod.default : mod
  return cachedHljs!
}

模式 2: LRU 缓存封装

// src/utils/memoize.ts — memoizeWithLRU / memoizeWithTTLAsync
// src/utils/git.ts:27 — findGitRootImpl = memoizeWithLRU(...)

模式 3: 平台抽象(Portable 变体)

sessionStorage.ts ↔ sessionStoragePortable.ts
getWorktreePaths.ts ↔ getWorktreePathsPortable.ts
execFileNoThrow.ts ↔ execFileNoThrowPortable.ts
auth.ts + authPortable.ts

许多模块提供标准版和 Portable 版,前者依赖 Node.js 原生模块,后者用纯 JS 实现以支持 Bun/browser-sdk 构建。

模式 4: Factory + Registry

// src/utils/hooks/AsyncHookRegistry.ts
// src/utils/bash/registry.ts — 命令注册表
// src/utils/toolPool.ts — 工具池

模式 5: Signal/Event 系统

// src/bootstrap/state.ts:481
const sessionSwitched = createSignal<[id: SessionId]>()
export const onSessionSwitch = sessionSwitched.subscribe

3. Bootstrap State 设计

3.1 架构概要

src/bootstrap/state.ts 是 Claude Code 的全局状态单例,1758 行。文件顶部有醒目的注释:

// DO NOT ADD MORE STATE HERE - BE JUDICIOUS WITH GLOBAL STATE
// ALSO HERE - THINK THRICE BEFORE MODIFYING
// AND ESPECIALLY HERE  (const STATE: State = getInitialState())

核心模式:私有 STATE 对象 + 公开 getter/setter 函数(不导出 STATE 本身)。

3.2 State 类型定义(全部字段)

会话标识 (Session Identity)

字段类型用途
sessionIdSessionId当前会话 UUID,每次 regenerateSessionId() 更新
parentSessionIdSessionId | undefined父会话 ID(plan mode → implementation 追踪)
sessionProjectDirstring | null会话 .jsonl 所在目录;null = 从 originalCwd 推导

路径状态 (Paths)

字段类型用途
originalCwdstring启动时的工作目录(NFC 规范化)
projectRootstring稳定的项目根目录,不随 EnterWorktreeTool 变化
cwdstring当前工作目录
additionalDirectoriesForClaudeMdstring[]--add-dir 标志的额外目录

成本与性能 (Cost & Performance)

字段类型用途
totalCostUSDnumber累计费用
totalAPIDurationnumber累计 API 调用时长
totalAPIDurationWithoutRetriesnumber不含重试的 API 时长
totalToolDurationnumber累计工具执行时长
startTimenumber会话开始时间
lastInteractionTimenumber最后交互时间(Ink render 时 flush)
totalLinesAddednumber累计添加行数
totalLinesRemovednumber累计删除行数
hasUnknownModelCostboolean模型费用未知标志

Turn 级统计

字段类型用途
turnHookDurationMsnumber当前 turn 的 hook 耗时
turnToolDurationMsnumber当前 turn 的工具耗时
turnClassifierDurationMsnumber当前 turn 的分类器耗时
turnToolCountnumber当前 turn 的工具调用次数
turnHookCountnumber当前 turn 的 hook 调用次数
turnClassifierCountnumber当前 turn 的分类器调用次数

模型状态 (Model)

字段类型用途
modelUsage{ [modelName: string]: ModelUsage }每个模型的 token 使用量
mainLoopModelOverrideModelSetting | undefined--model CLI 标志或用户模型更新
initialMainLoopModelModelSetting初始模型
modelStringsModelStrings | null模型字符串缓存

遥测 (Telemetry)

字段类型用途
meterMeter | nullOpenTelemetry Meter
sessionCounterAttributedCounter | null会话计数器
locCounterAttributedCounter | null代码行计数器
prCounterAttributedCounter | nullPR 计数器
commitCounterAttributedCounter | nullCommit 计数器
costCounterAttributedCounter | null费用计数器
tokenCounterAttributedCounter | nullToken 计数器
codeEditToolDecisionCounterAttributedCounter | null代码编辑决策计数器
activeTimeCounterAttributedCounter | null活跃时间计数器
statsStore{ observe(name, value) } | null统计存储
loggerProviderLoggerProvider | nullOTel Logger
eventLoggerLogger | null事件日志
meterProviderMeterProvider | nullOTel Meter Provider
tracerProviderBasicTracerProvider | nullOTel Tracer Provider

UI/交互状态

字段类型用途
isInteractiveboolean是否交互模式
clientTypestring客户端类型('cli'、'claude-vscode'等)
questionPreviewFormat'markdown' | 'html' | undefined问题预览格式
agentColorMapMap<string, AgentColorName>Agent 颜色映射
agentColorIndexnumberAgent 颜色索引

API 请求追踪

字段类型用途
lastAPIRequestOmit<BetaMessageStreamParams, 'messages'> | null最后 API 请求(bug report 用)
lastAPIRequestMessagesBetaMessageStreamParams['messages'] | null最后 API 请求消息
lastClassifierRequestsunknown[] | null最后分类器请求
cachedClaudeMdContentstring | nullCLAUDE.md 内容缓存
lastMainRequestIdstring | undefined主对话链的最后 requestId
lastApiCompletionTimestampnumber | null最后 API 完成时间戳
pendingPostCompactionboolean压缩后的首 API 调用标记

插件与扩展

字段类型用途
inlinePluginsstring[]--plugin-dir 的会话插件
useCoworkPluginsboolean是否使用 cowork_plugins 目录
allowedChannelsChannelEntry[]--channels 标志的服务器白名单
hasDevChannelsboolean是否有开发通道
registeredHooksPartial<Record<HookEvent, RegisteredHookMatcher[]>> | null注册的 hooks

会话模式标志

字段类型用途
isRemoteModeboolean远程模式
sessionBypassPermissionsModeboolean会话级绕过权限
scheduledTasksEnabledboolean定时任务开关
sessionTrustAcceptedboolean会话级信任标志
sessionPersistenceDisabledboolean禁用会话持久化
hasExitedPlanModeboolean是否已退出 plan mode
needsPlanModeExitAttachmentbooleanplan mode 退出附件标志
needsAutoModeExitAttachmentbooleanauto mode 退出附件标志
kairosActivebooleanKairos 激活状态
strictToolResultPairingboolean严格工具结果配对(HFI 用)
userMsgOptInboolean用户消息许可
sdkAgentProgressSummariesEnabledbooleanSDK agent 进度摘要

Beta 功能 Latch

字段类型用途
afkModeHeaderLatchedboolean | nullAuto mode beta header 锁存
fastModeHeaderLatchedboolean | nullFast mode beta header 锁存
cacheEditingHeaderLatchedboolean | nullCache editing header 锁存
thinkingClearLatchedboolean | nullThinking 清除锁存

这些是 sticky-on 锁存器:一旦激活就保持发送对应的 beta header,避免 Shift+Tab 切换导致 prompt cache 失效。

其他状态

字段类型用途
inMemoryErrorLogArray<{error, timestamp}>内存错误日志(最多 100 条)
sessionCronTasksSessionCronTask[]会话级定时任务(不持久化)
sessionCreatedTeamsSet<string>会话创建的团队(清理用)
planSlugCacheMap<string, string>plan slug 缓存
teleportedSessionInfoobject | null远程传送会话信息
invokedSkillsMap<string, InvokedSkillInfo>已调用技能(压缩保留)
slowOperationsArray<{operation, durationMs, timestamp}>慢操作追踪
sdkBetasstring[] | undefinedSDK 提供的 beta 功能
mainThreadAgentTypestring | undefined主线程 agent 类型
promptCache1hAllowliststring[] | null1 小时缓存白名单
promptCache1hEligibleboolean | null1 小时缓存资格
systemPromptSectionCacheMap<string, string | null>System prompt 段缓存
lastEmittedDatestring | null最后发送给模型的日期
promptIdstring | null当前 prompt ID(OTel 关联)
flagSettingsPathstring | undefined--settings 路径
flagSettingsInlineRecord<string, unknown> | null--settings 行内值
allowedSettingSourcesSettingSource[]允许的设置源
sessionIngressTokenstring | null | undefined会话入口 token
oauthTokenFromFdstring | null | undefined文件描述符 OAuth token
apiKeyFromFdstring | null | undefined文件描述符 API key
sessionSourcestring | undefined会话来源
chromeFlagOverrideboolean | undefinedChrome 标志覆盖
initJsonSchemaRecord<string, unknown> | nullSDK init JSON schema
directConnectServerUrlstring | undefined直连服务器 URL
lspRecommendationShownThisSessionbooleanLSP 推荐是否已显示

3.3 初始化模式

// src/bootstrap/state.ts:260-426
function getInitialState(): State {
  // 解析 symlink,NFC 规范化
  let resolvedCwd = realpathSync(rawCwd).normalize('NFC')
  
  const state: State = {
    originalCwd: resolvedCwd,
    projectRoot: resolvedCwd,
    // ... 所有字段的默认值
    startTime: Date.now(),
    sessionId: randomUUID() as SessionId,
    clientType: 'cli',
    allowedSettingSources: ['userSettings', 'projectSettings', ...],
  }
  return state
}

const STATE: State = getInitialState()

3.4 消费模式

  1. 纯 getter/setter: getCwdState() / setCwdState() — 最常见模式
  2. 累加器: addToTotalCostState() / addToTotalDurationState() — 费用/时长累积
  3. 脏标记刷新: updateLastInteractionTime() → flushInteractionTime() — 避免每次按键调用 Date.now()
  4. 一次性消费: consumePostCompaction() — 读取后自动重置
  5. 信号: onSessionSwitch — 订阅 sessionId 变化
  6. 仅测试: resetStateForTests() / resetTotalDurationStateAndCost_FOR_TESTS_ONLY() — 测试环境重置

4. Native-TS 重实现

4.1 设计动机

三个子模块都是对 vendor/ 目录下 Rust/C++ 原生 NAPI 模块的纯 TypeScript 重写。目的是:

  1. 跨平台可移植性 — 不依赖平台特定的 native addon 编译
  2. Bun/browser-sdk 兼容 — 避免 NAPI 绑定的兼容性问题
  3. 简化构建流程 — 去除 node-gyp/napi-rs 编译步骤

4.2 color-diff(999 行)

原模块: vendor/color-diff-src(Rust NAPI,使用 syntect + bat)

重写: src/native-ts/color-diff/index.ts

特性原生版TS 版
语法高亮syntect (Rust)highlight.js (JS)
Word diffsimilar cratediff npm 包 diffArrays
颜色精度精确匹配 syntect Monokai/GitHub测量对齐原版色值
BAT_THEME完整支持stub(忽略)

核心类:

  • ColorDiff — 渲染带语法高亮的 diff hunk
  • ColorFile — 渲染完整文件(带行号)
  • getSyntaxTheme() — 返回主题信息

4.3 file-index(370 行)

原模块: vendor/file-index-src(Rust NAPI,使用 nucleo 模糊搜索)

重写: src/native-ts/file-index/index.ts

关键特性:

  • Nucleo 风格评分: SCORE_MATCH, BONUS_BOUNDARY, BONUS_CAMEL, BONUS_CONSECUTIVE
  • Bitmap 快速拒绝: O(1) 检查路径是否包含所有 needle 字母
  • 异步构建: loadFromFileListAsync() — 每 ~4ms 让出事件循环,避免阻塞主线程
  • Smart Case: 小写 query = 忽略大小写;任何大写 = 区分大小写
  • Top-K 优化: 维护排序的 top-k 数组,避免全量排序
  • 测试文件惩罚: 包含 "test" 的路径得分 ×1.05(上限 1.0)

4.4 yoga-layout(~3000+ 行)

原模块: Meta 的 yoga(C++ flexbox 引擎)

重写: src/native-ts/yoga-layout/index.ts + enums.ts

这是一个精简的单遍 flexbox 实现,覆盖 Ink 实际使用的子集:

功能支持
flex-direction (row/column + reverse)✅
flex-grow / flex-shrink / flex-basis✅
align-items / align-self✅
justify-content (全部 6 值)✅
margin / padding / border / gap✅
width / height / min / max✅
position: relative / absolute✅
display: flex / none / contents✅
measure functions (文本节点)✅
flex-wrap (multi-line)✅
align-content✅
baseline alignment✅
margin: auto✅
aspect-ratio❌
RTL❌

性能优化亮点:

  • resolveEdges4Into(): 单次遍历解析 4 条边,避免 4× 调用
  • 脏标记缓存: _hasL / _hasM 单槽 + 多槽 (_cIn/_cOut, 4 slots) 双层缓存
  • Generation stamping: _fbGen / _cGen 避免跨代缓存污染
  • Fast-path flags: _hasAutoMargin, _hasPosition, _hasPadding, _hasBorder, _hasMargin 跳过常见无操作
  • 基准测试: 1000 节点布局 ~微秒级,500 消息 scrollbox 重排 ~550µs

5. Constants 组织

src/constants/ 包含 21 个文件,全部是纯常量或简单函数定义:

文件内容
apiLimits.tsAPI 速率限制常量
betas.tsBeta 功能标识
common.ts日期工具函数(getLocalISODate, getSessionStartDate)
cyberRiskInstruction.ts安全风险指令
errorIds.ts错误 ID 追踪(下一个 ID: 346)
figures.tsUnicode 字符常量
files.ts文件类型常量(二进制检测等)
github-app.tsGitHub App 配置
keys.tsGrowthBook client key
messages.ts消息模板常量
oauth.tsOAuth 配置常量
outputStyles.ts输出样式配置
product.ts产品 URL(claude.ai、staging)
prompts.tsSystem prompt 生成(914 行,最大的常量文件)
spinnerVerbs.tsSpinner 动词
system.ts系统级常量
systemPromptSections.tsSystem prompt 段落
toolLimits.ts工具结果大小限制(50K 字符 / 100K tokens)
tools.ts工具名称集合(agent 允许/禁止列表)
turnCompletionVerbs.tsTurn 完成动词
xml.tsXML 标签常量

6. Config Schema 模式

6.1 hooks.ts schema

src/schemas/hooks.ts (222 行) 使用 Zod v4 定义 hook 配置的 schema:

// 基础 if 条件 schema — 权限规则语法
const IfConditionSchema = lazySchema(() =>
  z.string().optional().describe('Permission rule syntax...')
)

// 三种 hook 类型的判别联合
const BashCommandHookSchema = z.object({
  type: z.literal('command'),
  command: z.string(),
  if: IfConditionSchema(),
  shell: z.enum(SHELL_TYPES).optional(),
  timeout: z.number().positive().optional(),
  once: z.boolean().optional(),
  async: z.boolean().optional(),
  asyncRewake: z.boolean().optional(), // async + 醒模型
})

const PromptHookSchema = z.object({
  type: z.literal('prompt'),
  prompt: z.string(),
  model: z.string().optional(),
  // ...
})

const HttpHookSchema = z.object({
  type: z.literal('http'),
  url: z.string().url(),
  // ...
})

设计特点:

  • lazySchema() — 延迟加载避免循环依赖
  • 判别联合 — type 字段区分 hook 类型
  • 条件过滤 — if 字段用权限规则语法过滤 hook 触发
  • async + asyncRewake — 后台 hook 可以在退出码 2 时唤醒模型
  • once — 一次性 hook 执行后自动移除

7. 关键设计模式总结

7.1 Bootstrap 隔离规则

state.ts 作为 DAG 叶子节点,只导入 src/utils/crypto.js 和 src/utils/signal.js(通过路径别名绕过 bootstrap 隔离检查)。这保证了无循环依赖。

7.2 平台抽象(Portable 模式)

许多模块提供标准版和 Portable 版,通过 package.json 的 "browser" 字段在构建时切换:

  • crypto.ts ↔ crypto.browser.ts
  • sessionStorage.ts ↔ sessionStoragePortable.ts
  • getWorktreePaths.ts ↔ getWorktreePathsPortable.ts

7.3 Lazy + Memoize 复合模式

几乎每个重量级依赖(highlight.js、axios、keytar)都通过 memoize() + 延迟 require() 包装:

const getFoo = memoize(() => require('./foo'))

7.4 Feature Gate 模式

使用 bun:bundle 的 feature() 函数进行编译时特性标记:

const teamMemPaths = feature('TEAMMEM') ? require(...) : null

7.5 状态管理的函数式访问

全局状态通过纯函数访问,不暴露对象引用:

export function getCwdState(): string { return STATE.cwd }
export function setCwdState(cwd: string): void { STATE.cwd = cwd.normalize('NFC') }

防止外部直接修改导致规范化遗漏或 NFD/NFC 不一致。

7.6 Native-TS 的性能工程

yoga-layout 和 file-index 都展示了极致的 JS 性能优化:

  • TypedArray (Int32Array, Float64Array, Uint16Array) 替代对象数组
  • Bitmap 位运算快速拒绝
  • Generation stamping 而非逐个 dirty 清除
  • 时间分片(CHUNK_MS = 4)避免阻塞事件循环