Repository navigation
feat(plugins): 插件函数契约、能力方向与 Core 协商路由 (#1351 PR 1) - #1358
Conversation
- Rust Core:initialize 在 capabilities.experimental.litheBuild 下协商 Provider 协议版本;新增 lsp.buildRequest,只把协商版本内的 lithe/build/model、lithe/build/dependencies 写给已协商的会话。 - macOS:MacBuildProviderSessions 按“插件 + 构建系统 + 工作区”各启动一个 独立 Provider 进程(JSON-RPC over stdio),用户加载模型/依赖时才启动, 切换工作区、停用或更新插件、退出应用时停止;状态写入插件构建系统状态目录。 - 共享写法只复用同一插件的语言服务器会话,跨插件时拒绝。 - BuildSystemService 把 provider 计划发给 Provider,回复作为 providerResult 交给 Core 解码;工具窗口对 provider 来源显示“加载模型”。 - 宿主声明 buildProviders: [1],gradle-provider / mix-provider 可通过安装审查。 - 更新契约 README、rust-core-api、Agent Note、提案与功能矩阵,补充测试。
- 新协议 litheFunctions v1:initialize 协商、函数引用 {pluginID, functionID}、
lithe/function/register|unregister(整体生效或整体拒绝)、invoke、progress
- lsp.functionRequest:按 lsp.startServer.pluginId 路由,固定顺序同步拒绝,
结果包成 {value},失败带稳定码与 pluginErrorCode,撤回即 revoked
- 后端请求 lithe/function/invoke、lithe/build/* 返回 recursiveCall,
lithe/host/* 在 v1 一律 plugin.host.unavailable
- 共享契约 README、Core API 文档、function-protocol.json 标准答案与校验脚本
- Agent Note 记录能力方向、声明式/函数选择规则、旧包兼容和被否方案
Lithe Review结论: ⛔ 有阻塞 Findings
Scope Check
Suggestions
Summary契约与平台适配的分工总体清晰,已有测试覆盖常规路由、失败、取消和撤回。项目窗口关闭时的进程泄漏需要在合并前修复;操作映射残留属于非阻塞建议。 Verification
|
|
@lithe review |
xiaoyumuxi
left a comment
There was a problem hiding this comment.
整体协议方向合理:插件领域能力与插件私有函数分开、按插件身份路由、禁止后端递归调用宿主领域操作,并复用 LSP 的取消/超时机制,建议保留。
此次 Review 标出 1 项 P1、2 项 P2(见行内评论)。建议合并前优先解决 initialize 初始函数注册表对宿主不可观察的问题,以及复用 operationId 后迟到进度可能被误归属的问题;另外建议加强宿主自有会话的注册边界。
CI 方面,当前提交的检查记录里 Windows CI 的 Git 路径测试失败或超时、Platform Feature Matrix 因未更新矩阵且未获豁免而失败。前者暂不能归因于本次变更,建议对照基线或重新运行;后者应更新能力矩阵或按仓库流程申请 matrix-exempt 并让门禁通过。
建议补充:initialize 直接提供函数 ID 的可观察事件测试;取消→复用同一 operationId→收到旧进度的测试;宿主自有会话尝试动态注册的测试;注册/撤回与并发调用的竞态测试。以上为静态 Code Review,未在本地执行 Rust 测试。
关联 #1351。
为插件后端提供可版本协商的函数契约和共享 Core 调用路由,并保证函数发现、操作 ID 复用及 Provider 关闭时的会话隔离。macOS 和 Windows 的原生函数调用入口、UI 与宿主能力仍待后续接入。
契约与调用路由
capabilities.experimental.litheFunctionsv1 协商、函数引用与 ID、注册/撤回、调用、进度、结果及稳定错误码;不增加插件清单字段,不提升现有 API 或能力版本。lsp.functionRequest、lsp.startServer.pluginId、functionsChanged、requestProgress以及客户端函数状态,并通过共享 fixture 固定协议行为。会话隔离与生命周期
functionsChanged,包含空列表,使宿主无需等待动态注册即可发现函数。pluginId的宿主自有会话不提供、协商、注册或广播插件函数。测试与文档
本地验证
已合入最新
preview,保留原 PR 提交历史;本次修复文件与已验证版本内容一致。