Files
ycode/docs/MCP技能与输入区接入-2026-10-20.md

43 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MCP、技能与统一输入区接入
日期:2026-10-20。执行来源:会话 `01a158f5-eea4-7e43-893c-21217cb00ed5` 最后确认计划。
## Dev 反馈补漏:管理页面
用户在 Dev 中发现技能/连接器页面仍显示维护:上一轮只接通了后端及输入区,没有恢复管理页,这是实施遗漏。现从本仓库已有版本恢复 SkillsPage / ConnectorsPage 的组件、图标和样式,不重新采集或绕过 REA;技能页补传 cwd、使用/创建/查找回调,ChatPane 恢复对应事件接收及返回能力管理页后的目录刷新。Dev 的 Vite HMR 日志已确认页面更新;专家页面不在本次开放范围内。
技能隔离 Electron 回归 `node scripts/test-skills-ui.mjs` 37 项通过,使用真实生产 skills 模块、隔离文件存储及受控文件选择器,覆盖导入/覆盖冲突、启停、详情、导出、卸载、回调与无效包。报告 `.tmp/skills-ui-3FPN3y/report.json`;已检查已安装技能截图。远程技能市场仍明确未连接,不伪造目录数据。
连接器页面隔离 Electron 回归 `node scripts/test-connectors-page.mjs` 26 项通过(最终报告 `.tmp/connectors-page-5zSU8J/report.json`):真实页面/样式,受控 MCP 宿主,覆盖列表、详情、管理弹窗、批准/启用、工具开关、重连、配置编辑入口、搜索、删除取消及弹窗内错误显示;不是外部 MCP 服务连接验收。主线程已检查卡片与弹窗错误截图;隐藏窗口截图已增加预绘制以避免捕获旧帧。类型检查、会话组件回归和最新完整构建通过;构建日志 `.tmp/capability-management-build.log`。
## 实现
- 继续使用 Claude Agent SDK / Claude Code,不切换内核。YCode 自有配置目录、模型、凭据和会话管理保留;停止发现项目 `.claude/skills`,保留受启停和校验约束的 `.agents/skills`。这不是 OS 文件系统隔离。
- 技能管理和 MCP 管理 IPC 恢复真实实现。MCP 宿主维护唯一连接,Claude 通过四个小型桥接工具按需发现、调用 MCP、加载技能正文及相对资源;执行前重新校验启用、批准哈希、工具开关和连接身份。技能脚本仍需原生执行工具及权限流程。
- 加号与斜杠共用能力目录、搜索和选择状态,消息级技能/MCP/压缩标签贯通草稿、排队、正式历史和重发。选择标签不代表能力已经运行。
- 统一输入区决定交互、错误提示、队列与普通输入的优先级;接管时隐藏而不删除队列或草稿。权限位置为加号之后;Esc 不停止生成,明确停止按钮保留。
- 生成中有效输入进入会话持久队列(最多 19 条);排序、删除、编辑取回、恢复与状态推送已接通。编辑取回保留磁盘暂存记录,直到实际提交确认,不先删除唯一副本。崩溃恢复或交付不明会暂停,不自动重试 unknown。
- 立即发送走同一原生输入流,不取消重发。按 UUID 识别后续组,宿主提交历史后才从队列移除;允许 A/B 合并原生组,历史保留两条输入。首个结果不结算后续消息。当前运行配置冻结,普通队列实际派发时读取后续设置。
- 模型/思考设置串行保存,生成期间只允许改下一请求设置,不能改工作区、模式或权限;首次建会话期间的选择也保留。当前消息的模型和上下文窗口不跟随下次选择改变。
- 原生 `/compact` 专用路径必须得到压缩边界和成功结果,不用总结请求代替;禁止忙碌、队列未处理、无历史或混合附件/能力/正文时执行。保留可见历史。
- 上下文采用真实流式用量及已有内核 summary 分类估计,不按输出字符计算,不把跨多请求的 result 聚合用量当作当前上下文。查询单会话单在途,结果绑定运行、模型和输入组。
## 已验证
- `npm run typecheck` 和完整 `npm run build`(最终日志 `.tmp/composer-final-build.log`)。
- `npm run test:composer-capabilities`:队列常规/并发/故障恢复、输入区组合、能力选择器 30 项、请求设置 5 组、上下文、能力桥接 36 项(含根运行取消传播);对抗队列 16 组。
- `npm run test:chat`、`npm run test:conversation`、`npm run test:sessions`、`npm run test:tool-approvals`、`npm run test:workbench-escape`、`npm run test:references`、`npm run test:persistence`。
- 真实 SDK/CLI 回环协议和生产内核集成:无打断双追加、身份合并/归属、交接回调、取消后续聊、空闲追加拒绝、真实原生压缩边界和压缩后请求。`CLAUDE_PROTOCOL_PROBE=1` 输出 PASS(16 requests / 43 events / 9 turns)。环境和探针细节见 [Claude 追加与压缩协议验证](Claude追加与压缩协议验证-2026-10-20.md)。
- `npm run test:claude-append:app`:加载真实生产 main/preload/renderer,隔离用户数据及配置,回环 SSE 挂起首响应,通过界面发送两条队列消息并连续点击立即发送,确认两项保持 delivering 直到原生身份交付;首请求未中断、A/B 合并后续原生组、两条稳定身份写入历史、正确分段 assistant、最后队列清空。26 项通过,0 renderer 错误,报告 `.tmp/claude-append-app-DFYbsq/report.json`;主线程已查看 `append-queue.png` 与 `append-final.png`,该次为浅色桌面截图。
- 最终扩展回归:`.tmp/claude-append-app-s0u84t/report.json`,39 项通过、0 renderer 错误。在首个请求仍挂起时通过真实 IPC 选择 B 再 C,请求端点顺序为 A / A / C,助手元数据也分别为 A / A / C;下一独立请求完成后才截最终图。主线程已查看深色、720px 窄窗截图;窄窗发现长模型标签遮住权限入口,修为权限图标紧跟加号、模型名称截断,并加入权限按钮可见且中心命中不被遮挡的 DOM 检查。该响应式修正是 YCode 可用性处理,未宣称是原版同尺寸实测规则。
## 证据与未验证边界
- 原版静态依据:WorkBuddy 5.8.2 JS Evidence `ev_717fa5e846e64d67ac19c8925d121bff632c0d3aefb3603b10858559cabb2dcb`;CSS Evidence `ev_377c8790468b3c67dad8577aabb327f98d3140659f0fffdbabfcff5a40cc9e94`。队列最大高度 224px、顶部圆角及向下重叠沿用静态依据,不新增数量标题或折叠卡片。
- REA 对 `http://127.0.0.1:9223` 返回 endpoint_unreachable / provider_unavailable,未绕过 REA 获取原版页面。实际激活调用链、图标精确差异、浮层尺寸和动态截图仍待原版可达后补证。
- 任务组合策略已有独立测试,但当前 Claude 内核没有完整团队成员/后台任务事件来源,未伪造数据接线;这部分不能宣称完整任务功能或 1:1。
- 自动能力桥接通过宿主注入测试;真实外部 MCP 服务故障/真实供应商长上下文/真实压缩质量/多平台进程崩溃与独立安全审查未完成。
- 全部回环测试使用隔离配置及 dummy key,不证明真实模型效果。UI fixture 不等于真实后端,真实 Electron 后端回环也不等于供应商线上验收。
- 能力选择器的键盘/IME 等通过组件回归,尚未完成全矩阵真实 Electron 键盘交互;图片/工具密集引导、实际上游断连与取消不在本次 Electron 文本回环范围内。原生 UUID 帧直接断言在内核协议测试中,Electron 测试通过请求合并、持久身份、分段历史与队列移除交叉确认。
- 本轮不提交 Git、不发布、不安装、不重启用户安装版;保留工作区已有升级模块等修改。