跳转至

10 - 待办与后续计划

记录当前已知的待办事项。条目按需实现后,请同步更新对应文档并删除本条。

MCP:Streamable HTTP 环境适配后需要做的修改

现状(src/tool/mcp.ts):MCP 客户端只实现了 Streamable HTTP(单 POST JSON-RPC), 受 SealDice goja 沙箱限制,存在以下能力缺口。当运行环境具备对应能力 (AbortController/流式读取、可拉起子进程,或通过 aiplugin4-backends 代理中转)后, 按下表逐项落地:

缺口 现状 环境适配后的修改
请求超时 goja 无 AbortController,fetch 无法设置超时,服务器挂起会一直阻塞工具调用 mcpRequest 增加超时控制(建议默认 10s、可配置),超时返回可读错误;底层请求无法取消时丢弃等待结果并提示
SSE 传输 仅支持 Streamable HTTP POST;type=sse 的服务器在配置解析时跳过 实现 SSE 传输:GET 打开事件流、按 endpoint 事件取得 POST 地址、携带 Mcp-Session-Id、处理断线重连;或在后端代理中做 SSE→Streamable HTTP 转换
stdio 服务器 command 服务器需要拉起子进程,配置解析时跳过 通过配套后端(aiplugin4-backends)代理拉起进程:stdin/stdout 走 JSON-RPC 换行协议,管理进程生命周期与异常重启;插件侧只暴露 Streamable HTTP 地址
OAuth 鉴权 仅支持静态 Bearer/自定义 headers 实现 MCP OAuth 发现与授权流程(protected-resource well-known + 授权码/PKCE),或文档化手动换取 token 后填入 headers 的配置方式
协议版本协商 initialize 硬编码 protocolVersion: 2025-11-25 根据服务器返回的 protocolVersion 做能力协商与降级,支持服务器偏好版本
流式工具结果 tools/call 只解析非流式 JSON / 单帧 SSE 解析流式 SSE 返回的多个 content 块(文本/资源/图片),按顺序拼接;处理 progress 通知
会话管理 每个服务器内存缓存一个 sessionId,失效时重初始化一次 支持无状态模式(服务器声明 stateless 时不再发送/依赖会话头)、session TTL 清理、插件重载后的会话回收
工具列表同步 tools/list 结果缓存 60s,只注册新增、不清理已下线 刷新时对比新旧工具列表,移除已下线的工具注册;服务器重启后自动重新同步
Resources/Prompts 只注册 tools/list 返回的工具 按需暴露 resources/list、prompts/list,注册为只读工具或注入上下文

未接线的配置(已注册但无消费点)

配置 现状 待办
心智模型定时刷新间隔 已在配置面板注册,src/config/configs/memory.ts:42 也读进了 MEMORY_MM_TICK_INTERVAL,但该常量在 src/ 内没有任何消费点(全仓仅此一处出现)——设了不生效 接线:按该间隔定时触发心智模型重建/刷新(仅当有新记忆时实际刷新);或若确定不做,从配置面板注销以免误导用户

排查方法:grep -rn "MEMORY_MM_TICK_INTERVAL" src/ —— 只在 src/config/configs/memory.ts 出现(注册 + 赋值)即说明未接线。

联网搜索:未实现 / 非目标(原 18 方案清理后保留)

事项 说明
结果缓存/去重/二次 LLM 总结 本期不做;重复查询会重复计费
WebUI 管理页 / .ai web 命令 本期不做;可先用 .ai tool call web_search 手工验证
min_interval QPS 限速 未实现;DeepSeek 搜索是账号级 5 QPS,网关侧限速需自行处理
自建抓取的安全加固 web_fetch 通用抓取暂未做 robots.txt / 拒绝私网 IP(SSRF) 加固;接入自建抓取方言前需补
厂商托管搜索(server-side) 属模型请求参数、不进联网 providers;与 web_search 同开有重复计费风险,应二选一

配置生成器(独立仓库 aiplugin4-config)的单一数据源问题

vendor 表 / 各用途请求 body / 模型命名分类白名单在插件与生成器之间仍是两处手抄,靠跨仓库联测的「超集不变量」守卫生效。彻底解法是把 schema/预设抽成共享数据包;在此之前,改插件侧预设或分类白名单时务必同步生成器并联测。

上下文成本治理:已否决 / 明确不做(避免重复讨论)

  • 学习式门禁(感知机/逻辑回归):用户明确不要,不排期。
  • 余温预热缓存:实现时判定无收益,不做。
  • reply() 每工具轮延迟写盘(B4):放弃——回复是关键路径,延迟写会丢 assistant 记录;且窗口移出已让 session_<id> 体积有上界。
  • 原文库只对「归档/窗口移出」写分片,不做「每条消息一个 key」的全量原文库。