基于 sourcemap 原始代码的 process.env.USER_TYPE 功能与控制详细分析报告
结论摘要
基于 cc-scode/claude-code-sourcemap/restored-src/ 的原始还原代码可以确认:process.env.USER_TYPE 是 Claude Code 内部一条非常核心的运行时/构建时门控变量,用来区分至少两类用户身份:
ant:Anthropic 内部员工模式- 非
ant:外部用户模式
从实际代码看,它并不只是一个埋点字段,而是深度参与了以下几类能力控制:
- Agent / 子 Agent / Teammate 能力开放范围
- 内部命令、内部工具、内部调试能力开放
- Prompt / System Prompt / Tool Prompt 差异化注入
- API 请求参数、Beta 能力、实验能力、GrowthBook 覆盖能力控制
- OAuth / Bridge / Mock / 日志 / Telemetry / 诊断能力控制
- 内部“undercover”安全策略与公开仓库贡献保护逻辑
因此,USER_TYPE 在 sourcemap 代码中不是边缘变量,而是一个横跨 CLI、工具系统、提示词系统、API 层和内部实验体系的总类身份门控变量。
分析范围与依据
本报告仅基于以下目录中的还原源码展开:
cc-scode/claude-code-sourcemap/restored-src/
并重点检索:
process.env.USER_TYPEuserType- 与
ant/external/ internal-only / undercover / agent swarms / tools / prompt / analytics 相关的控制逻辑
检索结果显示,process.env.USER_TYPE 在 restored-src/src/ 下出现非常广泛,覆盖命令、工具、服务、提示词、分析埋点、API 与安全策略等多个子系统。
一、USER_TYPE 的基本语义
从代码现象看,USER_TYPE 至少存在以下语义:
process.env.USER_TYPE === 'ant':内部员工模式process.env.USER_TYPE !== 'ant':非内部模式- 少数代码还直接检查
process.env.USER_TYPE === 'external'
典型证据:
cc-scode/claude-code-sourcemap/restored-src/src/query/config.ts:29-40cc-scode/claude-code-sourcemap/restored-src/src/services/api/withRetry.ts:353-360cc-scode/claude-code-sourcemap/restored-src/src/services/analytics/metadata.ts:707-710
其中 query/config.ts 会把 isAnt: process.env.USER_TYPE === 'ant' 显式放入查询配置:
isAnt: process.env.USER_TYPE === 'ant'
这说明很多下游逻辑并不是临时拼接判断,而是把“是否内部员工”视为正式运行时 gate。
二、对 Agent / 子 Agent 能力的直接控制
这是与用户问题最相关的一部分。
1. 内部员工允许 Agent tool 继续嵌套调用
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/constants/tools.ts:36-42
代码:
export const ALL_AGENT_DISALLOWED_TOOLS = new Set([
TASK_OUTPUT_TOOL_NAME,
EXIT_PLAN_MODE_V2_TOOL_NAME,
ENTER_PLAN_MODE_TOOL_NAME,
// Allow Agent tool for agents when user is ant (enables nested agents)
...(process.env.USER_TYPE === 'ant' ? [] : [AGENT_TOOL_NAME]),
ASK_USER_QUESTION_TOOL_NAME,
TASK_STOP_TOOL_NAME,
])
这里的含义非常明确:
- 对普通外部用户:
AGENT_TOOL_NAME被加入 agent 禁用列表 - 对
ant:不禁用AGENT_TOOL_NAME
也就是:
- 外部用户的 agent 不能继续调 agent
- 内部员工模式允许 nested agent / subagent 递归能力
这是 USER_TYPE 对 agent 功能最直接、最核心的差异控制之一。
2. Agent Swarms / teammate 能力对 ant 默认开放
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/utils/agentSwarmsEnabled.ts:15-43
代码逻辑:
if (process.env.USER_TYPE === 'ant') {
return true
}
而外部用户必须同时满足:
- 显式 opt-in:
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS或--agent-teams - GrowthBook gate
tengu_amber_flint开启
这表示:
- 内部员工模式:agent swarms / teammate 功能默认开启
- 外部用户模式:必须额外满足实验开关与 killswitch 条件
这进一步说明 USER_TYPE 不只是“是否显示某个小按钮”,而是在协调多 Agent 体系的能力基线。
3. Query 层也显式记录 isAnt gate
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/query/config.ts:18-25cc-scode/claude-code-sourcemap/restored-src/src/query/config.ts:29-40
这里把 isAnt 作为 query 配置的一部分,说明后续 turn 编排、工具执行或 prompt 生成链路都可能依赖这一身份区分。
三、工具系统中的内部功能开放
1. ant-only 工具直接进入工具列表
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/tools.ts:213-232
代码显示这些工具仅在 USER_TYPE === 'ant' 时进入列表:
ConfigToolTungstenToolREPLTool(条件更严格,需额外存在)
代码片段:
...(process.env.USER_TYPE === 'ant' ? [ConfigTool] : []),
...(process.env.USER_TYPE === 'ant' ? [TungstenTool] : []),
...(process.env.USER_TYPE === 'ant' && REPLTool ? [REPLTool] : []),
这意味着内部员工模式拥有一批外部用户根本不会看到的工具入口。
2. EnterPlanMode 的提示词存在 ant / external 双版本
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/tools/EnterPlanModeTool/prompt.ts:166-170
代码:
export function getEnterPlanModeToolPrompt(): string {
return process.env.USER_TYPE === 'ant'
? getEnterPlanModeToolPromptAnt()
: getEnterPlanModeToolPromptExternal()
}
这说明:
- 不是只有功能层不同
- 连工具 prompt 文案和行为引导都存在内部版与外部版差异
3. ToolSearch deferred tool 提示在 ant 默认开启更激进策略
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/tools/ToolSearchTool/prompt.ts:35-41
代码:
const deltaEnabled =
process.env.USER_TYPE === 'ant' ||
getFeatureValue_CACHED_MAY_BE_STALE('tengu_glacier_2xr', false)
说明:
- ant 用户直接走更先进/更新的 deferred tool 提示模式
- 外部用户则依赖 GrowthBook gate
四、命令系统中的内部命令与内部平台入口
1. agentsPlatform 只对 ant 用户加载
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/commands.ts:47-51
代码:
const agentsPlatform =
process.env.USER_TYPE === 'ant'
? require('./commands/agents-platform/index.js').default
: null
这说明内部存在一套专门的 agents-platform 命令入口,外部用户默认不可见。
2. INTERNAL_ONLY_COMMANDS 只在 ant 且非 demo 时注入
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/commands.ts:343-345
代码:
...(process.env.USER_TYPE === 'ant' && !process.env.IS_DEMO
? INTERNAL_ONLY_COMMANDS
: []),
这意味着命令层明确划分出:
- 外部用户命令集
- 内部员工命令集
- Demo 模式下还会额外收缩内部命令
因此 USER_TYPE 在 CLI 命令表层面就是权限门槛。
五、Prompt / System Prompt / 行为规范的内部差异
1. ant 用户拥有额外 system prompt suffix
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/constants/prompts.ts:136-140
代码:
function getAntModelOverrideSection(): string | null {
if (process.env.USER_TYPE !== 'ant') return null
if (isUndercover()) return null
return getAntModelOverrideConfig()?.defaultSystemPromptSuffix || null
}
这表明:
- ant 用户可能拿到额外的默认 system prompt suffix
- 但在 undercover 模式下又会禁用
2. 对 ant 与 external 的“行为规范提示”本身不同
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/constants/prompts.ts:205-245
这里对 ant 用户额外注入了多条内部版行为要求,例如:
- 默认尽量少写注释
- 完成任务前必须验证是否真的工作
- 发现用户误解或相邻 bug 时主动指出
- 必须如实报告测试结果
- Claude Code 本身出问题时建议
/issue或/share
这说明 USER_TYPE 不仅控制功能,还控制模型被如何约束和调教。
3. 注释明确说明 USER_TYPE === 'ant' 是 build-time define
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/utils/undercover.ts:18-21cc-scode/claude-code-sourcemap/restored-src/src/constants/prompts.ts:617-621
undercover.ts 中的注释尤其关键:
USER_TYPEis a build-time --define, the bundler constant-folds these checks and dead-code-eliminates the ant-only branches from external builds.
这说明:
- 对外部构建而言,很多 ant-only 分支理论上会被 bundler 常量折叠并裁剪
- 因此
USER_TYPE同时具有运行时身份门控与构建期代码消除边界的双重属性
这个结论很重要:它解释了为什么源码里会有很多 if (process.env.USER_TYPE === 'ant'),因为它们不仅是普通 if,还承担 tree-shaking / DCE 职责。
六、Speculation 与建议生成链路的 ant-only 控制
1. speculation 反馈消息仅对 ant 显示
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/services/PromptSuggestion/speculation.ts:273-307
代码:
if (process.env.USER_TYPE !== 'ant') return null
并返回:
`[ANT-ONLY] ${parts.join(' · ')} · ${savedText}${sessionSuffix}`
说明 speculation 反馈 UI/文案本身就是 ant-only。
2. speculation 功能启用也要求 ant
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/services/PromptSuggestion/speculation.ts:337-342
代码:
const enabled =
process.env.USER_TYPE === 'ant' &&
(getGlobalConfig().speculationEnabled ?? true)
所以这不是“显示差异”,而是功能 gate。
3. ant 用户会额外记录 suggestion / userInput 明文
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/services/PromptSuggestion/promptSuggestion.ts:490-495cc-scode/claude-code-sourcemap/restored-src/src/services/PromptSuggestion/promptSuggestion.ts:517-521
这里 ant 用户的 suggestion logging 更详细,会携带:
suggestionuserInput
外部用户不会带这么多内容。
说明内部模式在建议系统上拥有更深的可观测性与调试粒度。
七、API 层与实验能力的差异化控制
1. ant 用户可直接获得 prompt cache 1h eligibility
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/services/api/claude.ts:403-413
代码:
userEligible =
process.env.USER_TYPE === 'ant' ||
(isClaudeAISubscriber() && !currentLimits.isUsingOverage)
说明内部员工在 prompt cache 资格上直接被豁免/优待,不必满足普通订阅者条件。
2. ant-only 数值型 effort override 通过 anthropic_internal 下发
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/services/api/claude.ts:437-465
代码:
} else if (process.env.USER_TYPE === 'ant') {
// Numeric effort override - ant-only (uses anthropic_internal)
const existingInternal =
(extraBodyParams.anthropic_internal as Record<string, unknown>) || {}
extraBodyParams.anthropic_internal = {
...existingInternal,
effort_override: effortValue,
}
}
这说明:
- 外部用户只能用字符串 effort level
- 内部员工额外拥有数值型 override 通道
- 且该通道通过
anthropic_internal字段发往后端
这个很像内部实验/调参能力。
3. Retry 逻辑中还存在对 external 的专门分支
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/services/api/withRetry.ts:353-360
代码:
if (
process.env.USER_TYPE === 'external' &&
!process.env.IS_SANDBOX &&
!isPersistentRetryEnabled()
) {
...
}
这表明源码里不仅有 ant / 非 ant 二分,还在个别路径中直接把 external 当作显式身份值处理。
八、OAuth / Bridge / Mock / 环境连接能力的内部专属控制
1. ant 用户才能切换 local / staging OAuth
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/constants/oauth.ts:6-15cc-scode/claude-code-sourcemap/restored-src/src/constants/oauth.ts:116-140
逻辑:
- 普通情况下默认
prod - 只有
USER_TYPE === 'ant'时,USE_LOCAL_OAUTH/USE_STAGING_OAUTH才生效 - staging OAuth 配置块本身也被
USER_TYPE === 'ant'包裹
这说明外部用户不会走内部 staging/local OAuth 配置。
2. ant-only bridge token / base URL override
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/bridge/bridgeConfig.ts:17-29
逻辑:
CLAUDE_BRIDGE_OAUTH_TOKENCLAUDE_BRIDGE_BASE_URL
都要求 USER_TYPE === 'ant' 才能读取 override。
说明 bridge 联调能力对内部员工开放。
3. mock rate limit 操作只允许 ant
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/services/mockRateLimits.ts:99-125cc-scode/claude-code-sourcemap/restored-src/src/services/mockRateLimits.ts:711-717
代码明确写了:
if (process.env.USER_TYPE !== 'ant') {
return
}
以及注释:
This is for Ant employees testing with mocks
可见这是内部测试能力,不面向外部用户。
九、GrowthBook、实验门控与内部配置覆盖能力
1. ant 用户可通过 /config Gates 本地覆盖 GrowthBook 配置
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/services/analytics/growthbook.ts:204-290
这里多处以 process.env.USER_TYPE !== 'ant' 直接拦截:
- 读取本地 config overrides
- 设置单个 GrowthBook override
- 清空 overrides
注释也直接说明:
Local config overrides set via /config Gates tab (ant-only)
这说明内部员工拥有一套实验门控覆写面板,外部用户没有。
2. 很多实验/评估/曝光逻辑都对 ant 有特殊路径
从 growthbook.ts 检索结果看,大量逻辑都分 ant / 非 ant:
- ant 用户缺少 email 时的处理
- ant 用户 exposure/refresh 流程
- ant 用户附加属性与 metadata
说明内部员工被视作实验平台的核心观测人群。
十、Telemetry / Analytics / Logging 的内部差异
1. userType 被显式写入事件元数据
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/services/analytics/metadata.ts:707-710
代码:
userType: process.env.USER_TYPE || ''
说明 USER_TYPE 既是控制变量,也是事件分层维度。
2. ant 用户日志更细、更深
从检索结果可见,以下模块大量出现 ant-only 分支:
src/services/analytics/firstPartyEventLogger.tssrc/services/analytics/firstPartyEventLoggingExporter.tssrc/services/analytics/index.tssrc/services/api/logging.tssrc/services/internalLogging.tssrc/utils/telemetry/instrumentation.tssrc/utils/telemetry/sessionTracing.ts
这些点共同说明:
- 内部用户模式不仅能力更多
- 其行为也被记录得更细,用于实验、调试、质量评估、问题归因
十一、Undercover 模式:内部员工向公开仓库贡献时的保护层
这是 sourcemap 中非常有辨识度的一组能力。
关键文件:
cc-scode/claude-code-sourcemap/restored-src/src/utils/undercover.ts:1-89
其说明非常清楚:
- 这是给 Anthropic 内部员工在公开/开源仓库操作时用的安全机制
- 避免提交信息、PR 文案、描述中泄漏内部模型代号、内部项目名、内部工具信息
- 所有相关路径都 gated on
process.env.USER_TYPE === 'ant'
这意味着:
USER_TYPE不只是功能级开关- 还是“内部员工身份风险防护系统”的启动条件
换言之,代码明确假设:内部员工会在外部公开仓库里使用 Claude Code,因此需要额外防泄漏保护。
十二、USER_TYPE 的技术性质:不仅是运行时变量,还是构建裁剪边界
从 undercover.ts 和 prompts.ts 的注释可以得出非常关键的技术判断:
1. USER_TYPE 很可能在打包阶段通过 --define 注入
这意味着:
- 代码里看起来像运行时判断
- 但在某些构建产物里,bundler 可以把它视作常量
2. ant-only 分支可被 dead-code elimination 移除
对 external build:
- ant-only 分支可能直接被 tree-shake 掉
- 因此最终对外版本可能并不只是“运行时不执行”,而是“构建后根本不存在”
3. sourcemap 还原代码之所以能看到这些分支,说明当前恢复的是较完整的源码视图
也就是说,这份 sourcemap 代码很适合拿来研究 Claude Code 的内部/外部双轨设计。
十三、从源码可归纳出的 USER_TYPE 控制层次
综合来看,USER_TYPE 在源码中的控制可以分为五层:
第 1 层:功能是否存在
例如:
ConfigToolTungstenToolREPLToolagentsPlatformINTERNAL_ONLY_COMMANDS
第 2 层:功能是否默认启用
例如:
- agent swarms/team features
- deferred tool delta mode
- prompt cache eligibility
第 3 层:功能是否允许高级 override / debug / staging
例如:
- numeric effort override
- local/staging OAuth
- bridge token/base URL override
- mock rate limit 控制
- GrowthBook config overrides
第 4 层:模型提示词与行为规范是否不同
例如:
- ant-only system prompt suffix
- ant-only output style / truthfulness / issue reporting / verification guidance
- EnterPlanMode ant/external prompt 双版本
第 5 层:内部身份保护与观测增强
例如:
- undercover mode
- 更细 suggestion logging
- analytics / event logging / first-party logging 特殊路径
十四、回答原问题:USER_TYPE 是否用于区分普通用户与 Anthropic 内部员工,并控制 agent 功能?
答案是:明确是。
而且从 sourcemap 原始代码看,控制范围比“agent 功能”本身更大。
如果只聚焦 agent 相关,可以归纳为:
nested Agent / subagent 能力:ant 开放,外部默认收紧
src/constants/tools.ts:36-42
Agent Swarms / teammate 模式:ant 默认开启,外部需额外实验开关
src/utils/agentSwarmsEnabled.ts:15-43
部分工具能力、内部命令与调试工具:只对 ant 暴露
src/tools.ts:213-232src/commands.ts:47-51src/commands.ts:343-345
Prompt / planning / tool prompt 行为:ant 与 external 采用不同文案与规则
src/tools/EnterPlanModeTool/prompt.ts:166-170src/constants/prompts.ts:136-140src/constants/prompts.ts:205-245
因此,如果把 Claude Code 看作一个“普通用户版本 + Anthropic 内部增强版本”的双轨系统,那么 process.env.USER_TYPE 正是这套双轨设计的关键分界之一。
十五、补充判断
基于当前 sourcemap 代码,还可以进一步提出两个判断:
1. 内部员工模式不是单一 feature flag,而是一整套 profile
也就是:
- 更多命令
- 更多工具
- 更多实验能力
- 更多 override 能力
- 更多埋点细节
- 更多安全约束
2. 外部模式并非完全没有这些能力的代码痕迹,但会被多重 gate 限制
常见限制方式有:
USER_TYPE !== 'ant'直接返回- 必须满足 GrowthBook gate
- 必须显式 env opt-in
- 甚至在 external build 中被 DCE 移除
最终结论
基于 cc-scode/claude-code-sourcemap/restored-src/ 的原始 sourcemap 还原代码,可以明确确认:
process.env.USER_TYPE是 Claude Code 中区分普通用户与 Anthropic 内部员工模式的关键身份变量- 其内部员工标记值明确为
ant - 该变量直接控制 agent 相关功能,包括 nested agent / teammate / tool availability / internal commands / planning prompt 差异
- 同时还扩展控制到了 OAuth、Bridge、Mock、API 参数、实验系统、Telemetry、Prompt 策略和 Undercover 安全保护
- 从注释可知,它还承担构建期 dead-code elimination 的边界作用,因此是一个兼具权限语义与构建语义的核心变量
简言之:
USER_TYPE 不是普通埋点,而是 Claude Code 内外部双轨能力模型的重要总门控。
十六、关键门控点汇总表
下面不再使用表格,而改为按主题分组的条目列表,避免网页端横向超出边界。
16.1 Agent / Tool 能力门控
文件:
src/constants/tools.ts- 条件:
process.env.USER_TYPE === 'ant' ? [] : [AGENT_TOOL_NAME] - 功能:控制 agent 内是否允许继续调用 AgentTool,决定是否支持 nested agent / subagent
- 对普通用户影响:普通用户的 agent 默认不能再调 agent,递归 agent 能力被收紧
- 条件:
文件:
src/utils/agentSwarmsEnabled.ts- 条件:
if (process.env.USER_TYPE === 'ant') return true - 功能:控制 agent swarms / teammate 模式是否默认开启
- 对普通用户影响:普通用户不能默认使用 teammate;还需显式 opt-in 和 GrowthBook gate
- 条件:
文件:
src/tools.ts- 条件:
...(process.env.USER_TYPE === 'ant' ? [ConfigTool] : [])等 - 功能:决定
ConfigTool、TungstenTool、REPLTool是否进入工具列表 - 对普通用户影响:普通用户看不到这些内部工具入口
- 条件:
文件:
src/tools/EnterPlanModeTool/prompt.ts- 条件:
process.env.USER_TYPE === 'ant' ? getEnterPlanModeToolPromptAnt() : ... - 功能:为 EnterPlanMode 提供 ant / external 两套提示词
- 对普通用户影响:普通用户拿到的是外部版 planning 引导,不会使用内部版 prompt 约束
- 条件:
文件:
src/tools/ToolSearchTool/prompt.ts- 条件:
process.env.USER_TYPE === 'ant' || getFeatureValue_CACHED_MAY_BE_STALE(...) - 功能:控制 deferred tool 的提示方式是否走更新版 delta 模式
- 对普通用户影响:普通用户默认不走 ant 的新提示模式,通常还要依赖实验 gate
- 条件:
16.2 命令与 Query 链路门控
文件:
src/commands.ts- 条件:
process.env.USER_TYPE === 'ant' ? require('./commands/agents-platform/...') : null - 功能:加载内部
agents-platform命令 - 对普通用户影响:普通用户默认没有该命令入口
- 条件:
文件:
src/commands.ts- 条件:
process.env.USER_TYPE === 'ant' && !process.env.IS_DEMO - 功能:注入
INTERNAL_ONLY_COMMANDS - 对普通用户影响:普通用户不会看到内部命令集;demo 场景下内部命令也会收缩
- 条件:
文件:
src/query/config.ts- 条件:
isAnt: process.env.USER_TYPE === 'ant' - 功能:在 query 配置层显式记录内部员工身份
- 对普通用户影响:普通用户后续 query / tool / prompt 链路不会走
isAnt分支
- 条件:
16.3 PromptSuggestion / Prompt 相关门控
文件:
src/services/PromptSuggestion/speculation.ts- 条件:
if (process.env.USER_TYPE !== 'ant') return null - 功能:控制 ANT-ONLY speculation 反馈消息
- 对普通用户影响:普通用户不会看到
[ANT-ONLY]speculation 反馈
- 条件:
文件:
src/services/PromptSuggestion/speculation.ts- 条件:
process.env.USER_TYPE === 'ant' && (getGlobalConfig().speculationEnabled ?? true) - 功能:控制 speculation 功能是否启用
- 对普通用户影响:普通用户默认不启用这套 speculation 能力
- 条件:
文件:
src/services/PromptSuggestion/promptSuggestion.ts- 条件:
...(process.env.USER_TYPE === 'ant' && { suggestion, userInput }) - 功能:在 suggestion 相关埋点中额外记录完整 suggestion 与 userInput
- 对普通用户影响:普通用户的建议系统埋点更少、可观测性更弱
- 条件:
文件:
src/constants/prompts.ts- 条件:
if (process.env.USER_TYPE !== 'ant') return null - 功能:注入 ant-only model/system prompt suffix
- 对普通用户影响:普通用户不会拿到内部附加 system prompt 片段
- 条件:
文件:
src/constants/prompts.ts- 条件:多处
...(process.env.USER_TYPE === 'ant' ? [...] : []) - 功能:注入更严格/更内部化的行为规范,如验证、真实报告、issue 反馈等
- 对普通用户影响:普通用户不会收到这些内部版行为指令
- 条件:多处
16.4 OAuth / Bridge / Mock / API 行为门控
文件:
src/constants/oauth.ts- 条件:
if (process.env.USER_TYPE === 'ant') { ... USE_LOCAL_OAUTH / USE_STAGING_OAUTH ... } - 功能:控制 local / staging OAuth 配置切换
- 对普通用户影响:普通用户只能走 prod OAuth 路径,无法直接使用内部 staging/local 配置
- 条件:
文件:
src/bridge/bridgeConfig.ts- 条件:
process.env.USER_TYPE === 'ant' && process.env.CLAUDE_BRIDGE_* - 功能:允许 bridge token / base URL 的开发覆盖
- 对普通用户影响:普通用户无法直接使用这些 bridge 联调 override
- 条件:
文件:
src/services/mockRateLimits.ts- 条件:
if (process.env.USER_TYPE !== 'ant') return false/return - 功能:控制 mock rate limits 与 headerless 429 测试能力
- 对普通用户影响:普通用户不能使用这套内部 mock 限流测试能力
- 条件:
文件:
src/services/api/claude.ts- 条件:
process.env.USER_TYPE === 'ant' || (isClaudeAISubscriber() && !currentLimits.isUsingOverage) - 功能:决定 prompt cache 1h eligibility
- 对普通用户影响:普通用户必须满足订阅和 overage 条件,不能像内部员工一样直接获得资格
- 条件:
文件:
src/services/api/claude.ts- 条件:
} else if (process.env.USER_TYPE === 'ant') { ... anthropic_internal.effort_override ... } - 功能:允许数值型 effort override 经
anthropic_internal下发 - 对普通用户影响:普通用户不能使用内部数值化 effort 调参通道
- 条件:
文件:
src/services/api/withRetry.ts- 条件:
process.env.USER_TYPE === 'external' && ... - 功能:针对 external 用户走专门的 529/retry 处理路径
- 对普通用户影响:普通用户在部分容量错误场景下会走更保守/不同的重试策略
- 条件:
16.5 实验、埋点与防泄漏相关门控
文件:
src/services/analytics/growthbook.ts- 条件:
if (process.env.USER_TYPE !== 'ant') return undefined/return - 功能:控制
/config Gates相关的 GrowthBook 本地 override 能力 - 对普通用户影响:普通用户不能本地覆写实验 gate,只能被动接受远端/默认配置
- 条件:
文件:
src/services/analytics/metadata.ts- 条件:
userType: process.env.USER_TYPE || '' - 功能:把用户类型写入统一事件元数据
- 对普通用户影响:普通用户会被明确标记为非 ant 身份,用于后续分层统计
- 条件:
文件:
src/utils/undercover.ts- 条件:
if (process.env.USER_TYPE === 'ant') { ... } - 功能:启用公开仓库贡献时的 undercover 保护逻辑
- 对普通用户影响:普通用户不存在这一层内部信息防泄漏保护机制
- 条件:
这组分项可以与前文的分章节分析结合阅读:前文解释“为什么”,这里更适合做“索引”和“定位入口”。