Skip to content

feat(sdk): 三个官方 SDK 支持插件函数协议 4(跨插件调用,Node/Java 0.4.0、Rust 0.3.0) - #24

Merged
xiaoyumuxi merged 4 commits into
sync/1730-merged-previewfrom
feat/sdk-functions-protocol-4
Nov 5, 2026
Merged

xiaoyumuxi merged 4 commits into
sync/1730-merged-previewfrom
feat/sdk-functions-protocol-4

Conversation

@xiaoyumuxi

Copy link
Copy Markdown
Contributor

关联 / Linked

PR 类型 / Type

  • feat(三个官方 SDK)+ docs

改动说明 / What changes

三个 SDK 都协商到函数协议 4,行为一致:

项目 行为
查询提供者 Node context.host.functions.providers(id)、Java context.host().functions().providers(id)、Rust context.host().functions().providers(id),返回原样的 {providers}
跨插件调用 functions.invoke(workspace, call),返回原样的 {value}
协议 3 及以下 两个方法在通道层本地拒绝:plugin.host.unavailable(-32601),不写帧;通用宿主请求同样拦截
参数 只发送契约列出的字段(pluginID、functionID、context、params、timeoutMilliseconds、parentOperationID),caller 等多余字段丢弃;不合法时本地失败,返回 sdk.functions.invalidCall,上下文错误仍是 sdk.host.invalidContext。超时上限由 Core 执行,SDK 不本地截断
父调用 函数处理器里发起的调用,parentOperationID 默认取正在处理的那次 lithe/function/invoke 的 operationID(1–128 字节才用);backend.host、构建、VCS、快捷键等入口不带默认值
调用方 函数处理器的 caller:协议 4 且线上 caller 恰为 {pluginID: 非空字符串} 时有值,否则为空
错误码 回退表补宿主错误码 -32022 至 -32026 和 11 个 plugin.function.*(-32027 至 -32030、-32065 至 -32071);plugin.function.failed 的 details.pluginErrorCode 可直接读取

各 SDK:

  • Java 0.4.0:Protocol、HostChannel、HostError(新增 pluginErrorCode())、CallContext(caller()、callerPluginId())、Host.functions()、Backend;4 个 pom 升版本;README 新增 “Calling other plugins (protocol 4)”。
  • Node 0.4.0:protocol.mjs、host.mjs(host.functions)、backend.mjs(context.caller)、index.d.ts 新类型;README 同步。
  • Rust 0.3.0:protocol.rs(RELAY_VERSION)、host.rs(Functions,闸门在 Host::send,with_cancellation 保留父调用)、backend.rs(Caller、Context::caller())、error.rs(HOST_ERROR_CODES 21 项,新增 RELAY_ERROR_CODES 11 项);README 新增 “Calling other plugins” 一节。

取舍:

  • caller 只认恰好 {pluginID} 的形状。以后宿主往里加字段,SDK 会当成“宿主发起”,需要随契约一起升级 SDK。
  • 每个中转调用在应答前占一个宿主请求槽(共 16 个),最长 600 秒,README 提示用 timeoutMilliseconds 限时。

文档:

  • README、API 总表、后端领域页:SDK 支持的函数协议改为 1–4,删去 API-35 的“SDK 尚无封装”。
  • 能力与版本页:对照表改为 Node 0.4.0、Java 0.4.0、Rust 0.3.0,中英发版历史各加三行。
  • 后端工作区指南第 10 节加入 Node 示例;协议更新记录注明从哪个 SDK 版本起支持。

合并与发版

  1. 先把本 PR 合入 sync/1730-merged-preview,sync: 契约同步到 preview 22c14a96b,登记 #1730、#1742、#1745、#1746、#1763 #23 的 SDK 测试随之变绿。
  2. 再把 sync: 契约同步到 preview 22c14a96b,登记 #1730、#1742、#1745、#1746、#1763 #23 合入 main。
  3. 合入 main 后推 tag sdk-node-v0.4.0、sdk-java-v0.4.0、sdk-rust-v0.3.0 发版。

验证

  • Java:mvn -B verify(Java 8 目标)通过。
  • Node:npm test 89 个通过;npm run test:types 通过。
  • Rust:cargo +1.87 test --locked 全部通过(单元 19、host_services 22、session 17、keymap 3 等);stable 下 cargo fmt --check 与 cargo clippy --all-targets -D warnings 通过。
  • node --test scripts/contract.test.mjs scripts/sdk-e2e.test.mjs:16 个通过;node scripts/contract.mjs verify:92 个文件与 22c14a96b 一致。
  • 改动页面的相对链接、锚点、表格列数和中英行数检查通过。
  • sdk-e2e 交给 CI 运行。

- 协商到函数协议 4;Host.functions() 封装 lithe/host/functions/providers 与 invoke,返回原始的 {providers} 与 {value}
- 协议 3 及以下在本地拒绝两个中转方法(plugin.host.unavailable,-32601),不写帧;参数不合法时本地失败(sdk.functions.invalidCall)
- invoke 只发送契约列出的字段;parentOperationID 默认取正在处理的函数调用的线上 operationID
- CallContext.caller():协议 4 且线上 caller 恰为 {pluginID} 时可读,其余情况为 null
- HostError 补宿主错误码 -32022 至 -32026 和 11 个 plugin.function.* 码;新增 pluginErrorCode()
- HostTest 跟上契约新 fixture:跳过 params 不是对象的用例,新宿主通知走 onHostNotification
- 协商到函数协议 4;host.functions.providers 与 invoke 返回原始的 {providers} 与 {value}
- 协议 3 及以下在本地拒绝两个中转方法(plugin.host.unavailable,-32601),通用 host.request 同样拦截,不写帧
- invoke 只发送契约列出的字段,参数不合法时本地失败(sdk.functions.invalidCall);parentOperationID 默认取正在处理的函数调用的线上 operationID
- 函数处理器的 context.caller:协议 4 且线上 caller 恰为 {pluginID} 时可读,其余情况为 null
- HOST_ERRORS 补宿主错误码 -32022 至 -32026 和 11 个 plugin.function.* 码;类型定义同步
- host.test.mjs 跟上契约新 fixture:新宿主通知走 onHostNotification
- README、API 总表、后端领域页:SDK 支持的函数协议改为 1–4,删去 API-35 的“SDK 尚无封装”
- 能力与版本页:对照表改为 Node 0.4.0、Java 0.4.0、Rust 0.3.0,中英发版历史各加三行
- 后端工作区指南第 10 节加入 Node SDK 的 functions.providers/invoke 与 context.caller 示例
- 协议更新记录:函数协议 4 一行注明从哪个 SDK 版本起支持
- 协商到函数协议 4;Host::functions() 的 providers 与 invoke 返回原始的 {providers} 与 {value}
- 协议 3 及以下在 Host::send 本地拒绝两个中转方法(plugin.host.unavailable,-32601),通用 request 同样拦截,不写帧
- invoke 只发送契约列出的字段,参数不合法时本地失败(sdk.functions.invalidCall);handler 内 parentOperationID 默认取正在处理的调用的 operationID
- Context::caller() 与 Caller 类型:协议 4 且线上 caller 恰为 {pluginID} 时有值
- HOST_ERROR_CODES 补 -32022 至 -32026(21 项),新增 RELAY_ERROR_CODES(11 个 plugin.function.*)
- host_services 测试跟上契约新 fixture:新宿主通知走 on_host_notification
@xiaoyumuxi
xiaoyumuxi marked this pull request as ready for review November 5, 2026 10:08
@xiaoyumuxi
xiaoyumuxi merged commit 4d063db into sync/1730-merged-preview Nov 5, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant