Skip to content

feat: SubAgent 执行脚本时自动注入上下文环境变量(Session ID / Agent ID / 自定义变量) #4645

@yiliang114

Description

@yiliang114

背景

当 SubAgent 执行 SQL 或 Python 脚本时,脚本本身不知道自己的执行上下文在哪里。如果环境变量中包含 Session ID、Agent ID 等信息,业务脚本就能利用这些信息进行链路追踪、日志关联、审计记录等。

需求拆分

1. 自动注入系统上下文变量

SubAgent 通过 Bash tool 执行命令时,自动注入以下环境变量:

变量名 说明
QWEN_CODE_SESSION_ID 当前会话 ID
QWEN_CODE_AGENT_ID 当前执行 Agent 的 ID
QWEN_CODE_PARENT_AGENT_ID 父 Agent ID(如有)
QWEN_CODE_PROMPT_ID 当前 prompt/turn 的 ID(如有)

业务脚本即可通过 os.environ['QWEN_CODE_SESSION_ID'] 等方式获取上下文。

2. 支持自定义业务变量注入

用户应该能够声明一组自定义环境变量,这些变量会自动注入到所有工具执行的子进程中。可能的方式:

  • settings.jsonenv 字段(启动时注入)
  • /env 命令(运行时动态设置)
  • Hook 机制(SessionStart hook 写入 ENV_FILE

使用场景

  1. 链路追踪:Python 脚本执行 SQL 时,把 SESSION_ID 写入 SQL comment 或 trace header,便于在数据库侧追踪来源
  2. 审计日志:知道某条 SQL 是哪个 Session、哪个 Agent 发起的
  3. 业务关联:自定义注入 PROJECT_IDTASK_ID 等业务上下文,脚本可据此写入对应的数据表或日志通道

参考:Claude Code 的实现

Claude Code 已有类似机制(源码参考路径:src/utils/Shell.tssrc/utils/shell/bashProvider.ts):

  • CLAUDE_CODE_SESSION_ID 已在 v2.1.132 起注入 Bash tool 子进程(但曾有 USER_TYPE === 'ant' 门控)
  • settings.jsonenv 字段支持声明式环境变量
  • /env 命令支持运行时动态设置
  • CLAUDE_ENV_FILE 机制支持 hook 写入后自动 source

相关 issue:

建议实现路径

  1. 在 Shell 执行层(Shell.ts 等效位置)无条件注入 QWEN_CODE_SESSION_IDQWEN_CODE_AGENT_ID
  2. 在 bashProvider 的 getEnvironmentOverrides() 等效位置集中管理 per-command 环境变量
  3. 支持 settings.json env 字段 + /env 命令作为自定义变量入口

Metadata

Metadata

Assignees

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions