关于 sessions
用于 VS Code `src/vs/sessions/**` 目录下实现、评审和设计工作的开发技能。它规定模块边界、引导查阅相关规范,并建议针对性验证。
主要功能
- 01维护 Sessions 分层边界
- 02保持共享代码与提供方无关
- 03使用 observable 建模会话状态
- 04按子系统查找规范
- 05执行针对性验证检查
适用场景
- 01实现 Sessions 功能
- 02评审提供方路由变更
- 03调整会话感知布局行为
- 04验证跨模块层级的导入
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ microsoft/ vscode --skill sessions安装后在 Claude Code 中输入/sessions确认已加载。
详细介绍
Agents 窗口开发
在 src/vs/sessions/** 下进行实现、审查或设计工作时使用此技能。
1. 遵循核心原则
- 保持分层方向:
vs/sessions可以导入vs/workbench及更底层的层;vs/workbench绝不能导入vs/sessions。 - 保持共享 Sessions 代码与提供方无关。非提供方贡献代码不得导入提供方实现。
- 使用可观测对象对可变的会话和聊天状态建模。使用事件进行通知,不要将事件用作并行状态模型或控制流。
- 在
browser/menus.ts中注册 Sessions 菜单 ID,并使用Menus.*。 - 从适当的
sessions.*.main.ts入口点导入贡献代码。 - 除非某项能力确实为共享能力,否则优先采用由 Sessions 管理的适配方案,而不是修改共享 workbench。
- 将稳定架构写入所属规范,并在测试中明确具体行为。不要将实现历程保留为开发指南。
2. 确定所属区域
从 src/vs/sessions/README.md 开始,然后只阅读与改动相关的规范:
| 区域 | 规范 |
|---|---|
| 分层、文件夹归属、跨模块导入 | src/vs/sessions/LAYERS.md |
| 会话/聊天模型、服务、提供方契约、核心数据流 | src/vs/sessions/SESSIONS.md |
| 自动化的归属、路由、迁移、持久化和运行生命周期 | src/vs/sessions/AUTOMATIONS.md |
| Workbench 部件、网格、标题栏、编辑器呈现 | src/vs/sessions/LAYOUT.md |
| 感知会话的布局状态与恢复 | src/vs/sessions/LAYOUT_CONTROLLER.md |
| 单窗格行为和预期组合 | src/vs/sessions/SINGLE_PANE_SCENARIOS.md |
| Sessions 侧边栏列表、分组、筛选和持久化 | src/vs/sessions/SESSIONS_LIST.md |
| 手机布局和移动组件 | src/vs/sessions/MOBILE.md |
| AI 自定义项 | src/vs/sessions/AI_CUSTOMIZATIONS.md |
| Copilot 自定义项 | src/vs/sessions/copilot-customizations-spec.md |
| Copilot Chat 提供方 | src/vs/sessions/contrib/providers/copilotChatSessions/COPILOT_CHAT_SESSIONS_PROVIDER.md |
| Agent Host 提供方 | src/vs/sessions/contrib/providers/agentHost/AGENT_HOST_SESSIONS_PROVIDER.md |
| 远程 Agent Host 提供方 | src/vs/sessions/contrib/providers/remoteAgentHost/REMOTE_AGENT_HOST_SESSIONS_PROVIDER.md |
默认情况下不要加载学习收件箱。先搜索其中的标题和适用范围,再阅读权威规范之后仅查阅匹配的条目。
3. 修改前先检查
- 梳理当前实现及其现有测试。
- 在新增内容之前,先搜索共享辅助工具、上下文键、菜单 ID、入口点导入和提供方抽象。
- 确认哪个层负责该行为。将提供方特有的决策保留在提供方中,将视图/布局决策保留在由 Sessions 管理的浏览器代码中。
- 对于 UI 工作,还应调用适用的无障碍、设计、CSS、布局或主题技能。
- 对于 Agent、大模型、策略、权限、遥测或托管设置方面的改动,应在实现前调用适用的专业技能。
4. 实现契约
遵循核心原则和相关规范。优先采用能够保持这些边界的小幅改动:
ISessionsManagementService负责模型编排和提供方路由。ISessionsService负责可见会话和活动会话行为。- 提供方通过
ISession和IChat暴露与提供方无关的状态。 - 会话状态应可观测;使用者应以响应式方式派生 UI 状态。
- 通过适当的
sessions.*.main.ts入口点加载贡献代码。 - Sessions 菜单使用共享的
Menus注册表。 - 共享 workbench 改动应体现共享能力,而非 Sessions 特定策略。
规范修改门槛
修复 Bug 时,如果只是恢复现有契约,则不更新规范。在修改权威规范之前,明确以下三点:
- 有意变更的现有所有权、接口、生命周期、状态机、持久化或跨组件契约;
- 受该契约变更影响的实现部分;
- 为什么回归测试和简短代码注释无法完整体现这一变更。
如果缺少任何一项,就不要修改规范。将具体行为写入有针对性的测试,把不明显的实现约束放在所属代码旁,并在问题或拉取请求中保留调查记录。
只有在组件所有权、接口或生命周期契约、状态机、持久化或跨组件不变量发生变化时,才更新规范。不要因为样式、文案、操作位置、遥测字段、设置默认值、实现算法或单个 Bug 修复而更新规范。这些细节应写在代码和有针对性的测试中。
5. 按需验证
运行能够覆盖变更的最小现有检查:
- 针对受影响行为的单元测试;
- 导入或模块所有权发生变化时,运行
npm run valid-layers-check; - TypeScript 发生变化且有必要时,进行针对性类型检查或编译;
- 对于跨进程或 UI 工作,进行相关集成、E2E 或视觉验证。
仅涉及文档的变更,应检查链接、路径和内容一致性,而不是执行完整构建。
6. 正确记录反馈
当用户明确纠正或否定某种方案时,除非用户使用字面触发词 learn!,否则调用 feedback-learning 技能。字面触发词 learn! 的请求应遵循 .github/instructions/learnings.instructions.md。持久有效的架构不变量应写入所属规范,具体行为应写入回归测试,尚未证实可复用的指导应暂时放入限定范围的学习收件箱。切勿把每条纠正都追加到此技能中。
7. 维护此技能
仅当某项原则稳定、适用于多个场景且对大多数 Agents Window 工作都有用,或路由/工作流本身发生变化时,才更新此技能。子系统契约应写入对应的专项规范,Bug 行为应写入测试。
核心原则部分最多保留十条。添加新原则前,先合并重叠内容、删除过时指导,并优先改写现有原则。切勿追加仅适用于特定事件的细节,也不要把此技能用作学习日志。