用途:Chat Customizations Editor 是 Positron 里管理 AI 定制项的界面,管理 agents、skills、instructions、hooks、prompts、MCP servers 和 plugins,覆盖 workspace、user、extension、plugin 四类存储,并支持按 Local、Copilot CLI、Claude 等 harness 过滤。修改前必须先读 src/vs/sessions/AI_CUSTOMIZATIONS.md,改动后同步更新。
主要能力与结构:核心文件夹包括 src/vs/workbench/contrib/chat/common/(共享接口与过滤器)、browser/aiCustomization/(管理编辑器、prompts/MCP/plugins 列表控件、harness 服务注册)、src/vs/sessions/contrib/chat/browser/(sessions 窗口覆盖)和 contrib/sessions/browser/(树视图计数与工具栏)。关键接口有 IHarnessDescriptor(声明式驱动 UI 行为)、ISectionOverride(分区按钮定制)、IStorageSourceFilter(控制可见存储源与用户根),以及内部接口 IExternalCustomizationItem/IExternalCustomizationItemProvider。原则是控件全部从 descriptor 读取,不在控件代码写 harness 特有分支。
扩展 API:chatSessionCustomizationProvider 提案允许扩展注册定制提供者;修改字段需同步扩展 API .d.ts、IPC DTO、ExtHost 映射、MainThread 映射和内部接口五层,.d.ts 仅做加法,新增可选字段无需版本提升。
测试与截图:组件 fixture 位于 src/vs/workbench/test/browser/componentFixtures/。管理编辑器 fixture 支持 selectedSection 渲染任意标签页,Dark/Light 变体自动生成;fixture ID 形如 chat/aiCustomizations/aiCustomizationManagementEditor/AgentsTab/{Dark,Light},覆盖 Agents、Skills、Instructions、Hooks、Prompts、MCP Servers、Plugins、三种 harness 及 Sessions。测试数据需在 createMockPromptsService 里按类型提供 mock 路径,每类建议 8 项以上以触发滚动;需要包含 BUILTIN_STORAGE、mock 默认 chat 扩展 ID 并提供扩展来源,built-in 分组才会生效。管理编辑器内嵌 CodeEditorWidget,需 mock IAgentFeedbackService、ICodeReviewService、IChatEditingService、IAgentSessionsService 等服务。关键 fixture 加 blocksCi: true,由 component-fixtures.yml 在 PR 时截图并在变化时使 CI 失败;当前门控 fixture 为 LocalHarness、McpServersTab、McpServersTabNarrow、AgentsTabNarrow。截图稳定性方面,滚动条淡出约 2 秒后完成,滚动后需等待约 2400ms 再 resolve。
用法:运行单元测试 ./scripts/test.sh --grep "applyStorageSourceFilter|customizationCounts",并执行 npm run compile-check-ts-native && npm run valid-layers-check。真实产品布局调试可用 Code OSS:经 CDP 连接 @playwright/cli 并用 --user-data-dir /tmp/code-oss-debug,用 snapshot 找 Open Customizations,再用 eval 点击分区;eval 表达式会被包成 () => (...),多语句需用 IIFE,可用 document.title 作为返回通道。
限制:fixture 固定尺寸(默认 900×600)和大量 mock 数据,无法覆盖真实回流时序、窄窗口和真实数据数量;布局问题需在真实产品中调试。常见问题包括 offsetHeight 为 0 导致 layout() 提前返回、容器缺 overflow: hidden 造成裁切、fixture 与产品数据量不一致。其他平台与收费信息暂未提供。