Claude Code 源码研究(七)服务与远程:bridge、远控、双层 feature gate

services/ 全清单、bridge/(30 文件)远程会话核心、remoteManagedSettings 每小时轮询、双层 GrowthBook gate 模式。
claude-codesource-coderesearchservicesremotebridge

这是 Claude Code 源码研究系列的第 7 篇。从这里开始进入"远程化"的世界——Claude Code 不只是本地 CLI。

services/

文件:src/services/

服务清单

子目录/文件作用
api/Anthropic API 客户端(Claude 接入)
oauth/OAuth 认证流(Claude.ai 登录)
mcp/MCP 服务器接入 + 类型定义
analytics/遥测埋点(Statsig / Datadog 双管线)
compact/上下文压缩(核心 reactiveCompact.js 在 108 缺失模块中
extractMemories/从对话抽取记忆条目
SessionMemory/会话级记忆
teamMemorySync/团队共享记忆同步
MagicDocs/自动文档生成
policyLimits/策略限制(企业管理)
claudeAiLimits.ts / claudeAiLimitsHook.tsClaude.ai 速率限制
mockRateLimits.ts / rateLimitMessages.ts / rateLimitMocking.ts速率限制 mock(调试)
remoteManagedSettings/远程托管设置(每小时轮询)
settingsSync/配置同步
voice.ts / voiceStreamSTT.ts / voiceKeyterms.ts语音模式(push-to-talk + WebSocket STT)
autoDream/后台 Dream Task 服务
AgentSummary/代理输出汇总
PromptSuggestion/提示建议 + speculation.ts(推测执行)
tips/提示卡片
notifier.ts桌面通知
lsp/Language Server Protocol 集成
tools/工具运行时辅助
toolUseSummary/工具调用聚合
internalLogging.ts内部日志
diagnosticTracking.ts诊断指标
vcr.tsAPI 录制回放(测试用)
mcpServerApproval.tsxMCP 服务器审批 UI
preventSleep.ts防止系统休眠
tokenEstimation.tsToken 数估算(无需调 API)
awaySummary.ts用户离开时的汇总
plugins/插件加载与管理

remote/ — 远程会话

文件:src/remote/

文件作用
RemoteSessionManager.ts远程会话生命周期
SessionsWebSocket.tsWebSocket 传输
remotePermissionBridge.ts权限请求跨设备转发(手机端弹窗)
sdkMessageAdapter.tsSDK 消息适配

bridge/ — 桥接基础设施

文件:src/bridge/(30 文件)

远程会话核心。Claude.ai / 移动端 / 浏览器扩展通过 bridge 接入本地 cli。

模块作用
bridgeApi.tsbridge HTTP API
bridgeConfig.ts / envLessBridgeConfig.ts / pollConfig.ts / pollConfigDefaults.ts配置轮询
bridgeMain.ts主流程
bridgeMessaging.ts消息协议
bridgePermissionCallbacks.ts权限回调跨设备
bridgePointer.tsUI 鼠标光标跨设备
bridgeStatusUtil.ts / bridgeUI.ts / bridgeDebug.ts状态/UI/调试
bridgeEnabled.tsfeature 启用判定
capacityWake.ts容量唤醒
codeSessionApi.tscode session API
createSession.ts / sessionRunner.ts / sessionIdCompat.ts会话创建/运行
flushGate.ts刷新门控
inboundAttachments.ts / inboundMessages.ts入站消息处理
initReplBridge.ts / replBridge.ts / replBridgeHandle.ts / replBridgeTransport.tsREPL 桥接
remoteBridgeCore.ts远程核心
jwtUtils.tsJWT 验签
trustedDevice.ts受信任设备
workSecret.ts工作密钥
debugUtils.ts调试工具
types.ts类型

server/ — Direct Connect

文件:src/server/

文件作用
createDirectConnectSession.ts直连会话创建
directConnectManager.ts直连管理器
types.ts类型

upstreamproxy/ — 上游代理

文件:src/upstreamproxy/

文件作用
upstreamproxy.ts代理实现
relay.ts中继转发

远程托管设置(远控的核心)

client cli  ──(每小时 GET)──→  /api/claude_code/settings
                                   ↓
                          1. 设置变更
                             ├─ 静默写入(多数)
                             └─ 危险变更弹阻塞对话框
                                ├─ 用户接受 → 应用
                                └─ 用户拒绝 → 进程退出
                          2. 6+ killswitch
                             ├─ 绕过权限模式
                             ├─ 快速模式 (Fast)
                             ├─ 语音模式
                             ├─ 分析 sink
                             └─ ...
                          3. GrowthBook 特性 flag
                             └─ 无需用户同意即可改变任何行为

代码位置:src/services/remoteManagedSettings/

「拒绝远程下发的配置变更 → 进程退出」这一条是值得读源码确认的。它意味着 Anthropic 可以远程禁用任意本地实例——本质是个 killswitch 网络。

GrowthBook 特性分发

src/services/analytics/growthbook.js(缺失,被 gate)暴露 getFeatureValue_CACHED_MAY_BE_STALE(flagName, default),几乎所有 feature gate 都依赖:

// 例: src/utils/thinking.ts:23
export function isUltrathinkEnabled(): boolean {
  if (!feature('ULTRATHINK')) return false  // 编译期 gate
  return getFeatureValue_CACHED_MAY_BE_STALE('tengu_turtle_carbon', true)
  // ↑ 运行期 GrowthBook gate(无需用户同意可灰度)
}

双层 gate 模式

  • feature() 决定代码是否被打包(编译期)
  • getFeatureValue_CACHED_MAY_BE_STALE() 决定代码是否被启用(运行期)

这个双层结构让 Anthropic 既能在源码层删除「不想发布」的特性,又能对「已发布」特性做无感灰度——你今天看到的 Claude Code 和明天的可能行为不同,但二进制完全一样。

Skill 与插件分发

  • src/skills/bundledSkills.ts + loadSkillsDir.ts + mcpSkillBuilders.ts
  • src/plugins/builtinPlugins.ts + bundled/
  • 远程技能:skillSearch/ 模块在 108 缺失里(EXPERIMENTAL_SKILL_SEARCH

双层遥测管线

事件 → ┬─→ 1P 内部分析(Anthropic)
       └─→ Datadog APM
            ↑
            环境指纹、进程指标、会话/用户 ID 随每事件
            没有面向用户的退出开关
            OTEL_LOG_TOOL_DETAILS=1 可记录完整工具输入

下一篇

下一篇钻到模型层:推理逻辑、Plan Mode、AgentTool 派生——Claude Code 本身不"推理",它是个调度器。