用途:说明 VS Code 代理主机(agent host)会话向模型暴露的定制项(插件、MCP 服务器、代理、技能、指令)的启用机制,以及在修改 src/vs/platform/agentHost 下相关文件前需了解的架构与调试经验。
主要能力与要点:
- 启用模型:启用状态是有序的作用域决策列表(Session、Workspace、Global),由 isCustomizationEnabled() 取首个匹配项;无列表视为启用。不要为插件或 MCP 服务器另加并行 enabled 布尔值。Global 归属由 childEnablement 区分,而非 clientId。
- 叠加模型:客户端值为基,主机决策叠加其上,“只存差异”须与该基比较。_setClientGlobal 只写内存基,不得触碰 _persistent;继承顺序为 host → base → 默认值。
- 身份不依赖树位置:MCP 服务器存储键由 owningPluginUri 派生,顶层或嵌套发现必须生成同一键,只用 targetForMcpServer() 与 withOwningPluginUri() 构建目标。
- pending 立即失败但必须是临时的:会话未初始化或工作目录未知时返回 pending,不得默认启用,也不得缓存该判定。
- 所有发布、emit 与 SDK 交接路径必须经过 resolveCustomizationEnablement(),不得读取存储快照。
- 执行按提供方不同:Copilot 用 SessionConfig 的 disabledMcpServers 及 rpc.mcp.enable/disable;Claude 在 materialize 时的会话选项与实时 reconcile;Codex 仅在线程启动/恢复时提供 MCP 服务器,会话中途不可变更。
使用方式与验证: 运行 npm run typecheck-client; ./scripts/test.sh --grep "customizationEnablement"; ./scripts/test-integration.sh --runGlob "/agentHost//{sessionConfig,toolApproval,codexCustomizations}.integrationTest.js"; ./scripts/test-integration.sh --run src/vs/platform/agentHost/test/node/claudeAgent.integrationTest.ts。 直接构造代理会话的测试需在服务集合中提供 IAgentHostCustomizationEnablementService,可使用 createNoopCustomizationEnablementService()。
限制与陷阱:CustomizationType 与 CustomizationEnablementKind 是 const enum,须按值导入;单元测试运行器使用预编译输出,不检测类型错误;集成测试服务器以 --quiet 启动;协议文件为自动生成,改动需回移 agent-host-protocol 仓库。调试时以已发布定制对象与主机存储决策为主信号,UI 次之,模型自述仅供参考。
分类依据:内容服务于 VS Code 代理主机内部定制项启用架构与调试,属编程与开发领域。