基于 sourcemap 原始代码的 process.env.USER_TYPE 功能与控制详细分析报告

结论摘要

基于 cc-scode/claude-code-sourcemap/restored-src/ 的原始还原代码可以确认:process.env.USER_TYPE 是 Claude Code 内部一条非常核心的运行时/构建时门控变量,用来区分至少两类用户身份:

  • ant:Anthropic 内部员工模式
  • ant:外部用户模式

从实际代码看,它并不只是一个埋点字段,而是深度参与了以下几类能力控制:

  1. Agent / 子 Agent / Teammate 能力开放范围
  2. 内部命令、内部工具、内部调试能力开放
  3. Prompt / System Prompt / Tool Prompt 差异化注入
  4. API 请求参数、Beta 能力、实验能力、GrowthBook 覆盖能力控制
  5. OAuth / Bridge / Mock / 日志 / Telemetry / 诊断能力控制
  6. 内部“undercover”安全策略与公开仓库贡献保护逻辑

因此,USER_TYPE 在 sourcemap 代码中不是边缘变量,而是一个横跨 CLI、工具系统、提示词系统、API 层和内部实验体系的总类身份门控变量


分析范围与依据

本报告仅基于以下目录中的还原源码展开:

  • cc-scode/claude-code-sourcemap/restored-src/

并重点检索:

  • process.env.USER_TYPE
  • userType
  • ant / external / internal-only / undercover / agent swarms / tools / prompt / analytics 相关的控制逻辑

检索结果显示,process.env.USER_TYPErestored-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-40
  • cc-scode/claude-code-sourcemap/restored-src/src/services/api/withRetry.ts:353-360
  • cc-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
}

而外部用户必须同时满足:

  1. 显式 opt-in:CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS--agent-teams
  2. 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-25
  • cc-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' 时进入列表:

  • ConfigTool
  • TungstenTool
  • REPLTool(条件更严格,需额外存在)

代码片段:

...(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-21
  • cc-scode/claude-code-sourcemap/restored-src/src/constants/prompts.ts:617-621

undercover.ts 中的注释尤其关键:

USER_TYPE is 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-495
  • cc-scode/claude-code-sourcemap/restored-src/src/services/PromptSuggestion/promptSuggestion.ts:517-521

这里 ant 用户的 suggestion logging 更详细,会携带:

  • suggestion
  • userInput

外部用户不会带这么多内容。

说明内部模式在建议系统上拥有更深的可观测性与调试粒度。


七、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-15
  • cc-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_TOKEN
  • CLAUDE_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-125
  • cc-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.ts
  • src/services/analytics/firstPartyEventLoggingExporter.ts
  • src/services/analytics/index.ts
  • src/services/api/logging.ts
  • src/services/internalLogging.ts
  • src/utils/telemetry/instrumentation.ts
  • src/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.tsprompts.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 层:功能是否存在

例如:

  • ConfigTool
  • TungstenTool
  • REPLTool
  • agentsPlatform
  • INTERNAL_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 相关,可以归纳为:

  1. nested Agent / subagent 能力:ant 开放,外部默认收紧

    • src/constants/tools.ts:36-42
  2. Agent Swarms / teammate 模式:ant 默认开启,外部需额外实验开关

    • src/utils/agentSwarmsEnabled.ts:15-43
  3. 部分工具能力、内部命令与调试工具:只对 ant 暴露

    • src/tools.ts:213-232
    • src/commands.ts:47-51
    • src/commands.ts:343-345
  4. Prompt / planning / tool prompt 行为:ant 与 external 采用不同文案与规则

    • src/tools/EnterPlanModeTool/prompt.ts:166-170
    • src/constants/prompts.ts:136-140
    • src/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] : [])
    • 功能:决定 ConfigToolTungstenToolREPLTool 是否进入工具列表
    • 对普通用户影响:普通用户看不到这些内部工具入口
  • 文件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 保护逻辑
    • 对普通用户影响:普通用户不存在这一层内部信息防泄漏保护机制

这组分项可以与前文的分章节分析结合阅读:前文解释“为什么”,这里更适合做“索引”和“定位入口”。