@mbws/plugin-sdk 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +95 -14
- package/package.json +1 -6
package/README.md
CHANGED
|
@@ -1,28 +1,109 @@
|
|
|
1
1
|
# @mbws/plugin-sdk
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
MBWS 数据加工插件协议 SDK——为插件面板提供 `createMbws()` 与宿主完成握手,返回带
|
|
4
|
+
`data` / `runtime` / `storage` / `ui` / `panel` / `contract` 命名空间的客户端对象。
|
|
5
|
+
通常你不需要手动安装本包:用 `pnpm create @mbws/plugin` 脚手架生成的工程已自带依赖;
|
|
6
|
+
手动集成时再 `pnpm add @mbws/plugin-sdk`。
|
|
7
|
+
|
|
8
|
+
## 安装
|
|
4
9
|
|
|
5
10
|
```bash
|
|
6
11
|
pnpm add @mbws/plugin-sdk
|
|
7
12
|
```
|
|
8
13
|
|
|
9
|
-
|
|
14
|
+
要求 Node ≥18(或现代浏览器环境);包内零运行时依赖(类型与运行时均为自带实现)。
|
|
10
15
|
|
|
11
|
-
|
|
12
|
-
共用同一套类型源
|
|
13
|
-
- **运行时**:宿主端口注入适配(桌面/网页宿主零感知),dev 环境自动降级 mock
|
|
14
|
-
(`data.read` 读 `samples/*.json`,本地 `pnpm dev` 即可跑通面板)
|
|
15
|
-
- **校验**:`validateManifest`(构建期与装载期单一权威校验源)
|
|
16
|
+
## 最小面板示例
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
```ts
|
|
19
|
+
import { createMbws } from "@mbws/plugin-sdk";
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
const mbws = await createMbws();
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
// 读输入数据(key 见关联任务的契约 inputs)
|
|
24
|
+
const value = await mbws.data.read("input");
|
|
25
|
+
|
|
26
|
+
// 面板内容变化后按内容自适应高度,宿主会同步调整 iframe 高度
|
|
27
|
+
mbws.panel.resize(document.body.scrollHeight);
|
|
28
|
+
|
|
29
|
+
// 计算完成,写回输出(outputs 的 key 集须与契约 outputs 对齐,越界会被拒)
|
|
30
|
+
await mbws.data.apply({ result: transform(value) });
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
注意 `createMbws()` 全局只能调用一次(与 VS Code `acquireVsCodeApi` 同心智),二次调用
|
|
34
|
+
会抛 `MbwsInvokeError`(`E_PROTOCOL_VIOLATION`)。
|
|
35
|
+
|
|
36
|
+
## API 速查
|
|
37
|
+
|
|
38
|
+
握手成功后返回 `MbwsClient`。除 `panel` / `contract` 恒存在外,其余命名空间按
|
|
39
|
+
manifest 权限授予情况存在——未声明/未授予的命名空间在对象上为 `undefined`,使用前
|
|
40
|
+
建议判空。
|
|
41
|
+
|
|
42
|
+
| 命名空间.方法 | 签名 | 用途 |
|
|
43
|
+
| --- | --- | --- |
|
|
44
|
+
| `data.read` | `read(key: string): Promise<unknown>` | 读当前任务 slot 的输入值 |
|
|
45
|
+
| `data.blob` | `blob(key: string): Promise<{ url: string; mime?: string }>` | 拿文件类输入的签名访问 URL |
|
|
46
|
+
| `data.apply` | `apply(outputs: Record<string, unknown>): Promise<void>` | 写回输出(经宿主 write gate 校验) |
|
|
47
|
+
| `runtime.progress` | `progress(ratio?: number, message?: string): Promise<void>` | 上报进度(0~1)与状态文案 |
|
|
48
|
+
| `runtime.log` | `log(...args: unknown[]): Promise<void>` | 写运行日志(宿主侧可查看) |
|
|
49
|
+
| `runtime.signal` | `signal(): AbortSignal` | 取消信号——用户取消任务时 abort |
|
|
50
|
+
| `storage.get` | `get(key: string): Promise<unknown>` | 读插件专属配额 KV |
|
|
51
|
+
| `storage.set` | `set(key: string, value: unknown): Promise<void>` | 写插件专属配额 KV(配额超限抛错) |
|
|
52
|
+
| `ui.confirm` | `confirm(opts: { title?: string; message: string }): Promise<boolean>` | 宿主渲染的确认弹窗 |
|
|
53
|
+
| `ui.toast` | `toast(message: string, opts?: { type?: "info" \| "success" \| "error" }): Promise<void>` | 宿主渲染的轻提示 |
|
|
54
|
+
| `panel.resize` | `resize(height: number): void` | 上报面板期望高度 |
|
|
55
|
+
| `panel.onBeforeClose` | `onBeforeClose(cb: () => void): void` | 注册关闭前询问回调 |
|
|
56
|
+
| `panel.replyBeforeClose` | `replyBeforeClose(dirty: boolean): void` | 应答关闭询问(dirty=true 宿主先弹确认) |
|
|
57
|
+
| `contract.get` | `get(opts?: FetchContractOptions): Promise<PluginContract>` | 拉关联任务的最新数据契约 |
|
|
58
|
+
|
|
59
|
+
`contract.get` 不经宿主端口,直接走 HTTP 按插件编号拉取:返回的
|
|
60
|
+
`PluginContract` 含 `inputs` / `outputs`(key → JSON Schema,`data.read` / `data.apply`
|
|
61
|
+
的对齐基准)、`title`、`status`、`updatedAt` 等。`FetchContractOptions` 可传
|
|
62
|
+
`pluginCode`(缺省从工程 `manifest.json` 读)、`baseUrl`、`devKey`、`signal`。
|
|
63
|
+
|
|
64
|
+
## 运行形态
|
|
65
|
+
|
|
66
|
+
插件代码零环境分支——`createMbws()` 内部自动分辨:
|
|
67
|
+
|
|
68
|
+
- **生产(宿主 sandbox iframe 内)**:等待宿主经 `window.postMessage` 递来的
|
|
69
|
+
`MessagePort`,完成 init 握手后按授权构造命名空间。此后所有调用都走端口消息。
|
|
70
|
+
- **开发(本地 `pnpm dev` / 顶窗口 / 端口等待超时)**:自动降级为 dev mock——
|
|
71
|
+
`data.read` 读工程内 `samples/<key>.json` 夹具数据;`data.apply` 只在控制台打印不入库;
|
|
72
|
+
其余命名空间基本 no-op。`contract.get` 仍真实走 HTTP 拉线上契约。
|
|
73
|
+
|
|
74
|
+
握手等待端口默认 3000ms(`createMbws({ timeoutMs })` 可调),单次调用默认 30s 超时
|
|
75
|
+
(`invokeTimeoutMs` 可调)。
|
|
76
|
+
|
|
77
|
+
## 错误处理
|
|
78
|
+
|
|
79
|
+
调用被拒时抛 `MbwsInvokeError`(`Error` 子类),`error.code` 为以下九个错误码之一:
|
|
80
|
+
|
|
81
|
+
| 错误码 | 含义 |
|
|
82
|
+
| --- | --- |
|
|
83
|
+
| `E_INVALID_ARGS` | 调用参数不符合方法签名 |
|
|
84
|
+
| `E_UNKNOWN_METHOD` | 调用了命名空间下不存在的方法 |
|
|
85
|
+
| `E_PERMISSION_DENIED` | manifest 未声明该权限,或宿主未授予 |
|
|
86
|
+
| `E_QUOTA_EXCEEDED` | 配额超限(AI 次数/费用、指令预算、wall-clock 超时等) |
|
|
87
|
+
| `E_WRITE_GATE_REJECTED` | `apply` 写回被拒(key 越界 / outputSchema 校验失败) |
|
|
88
|
+
| `E_CAPABILITY_UNAVAILABLE` | 依赖的能力包未安装或版本不满足 |
|
|
89
|
+
| `E_TIMEOUT` | 调用超时 |
|
|
90
|
+
| `E_CANCELLED` | 任务被取消后的在途调用收尾 |
|
|
91
|
+
| `E_PROTOCOL_VIOLATION` | 消息违反协议(含 `createMbws()` 二次调用) |
|
|
92
|
+
|
|
93
|
+
```ts
|
|
94
|
+
import { createMbws, MbwsInvokeError } from "@mbws/plugin-sdk";
|
|
95
|
+
|
|
96
|
+
const mbws = await createMbws();
|
|
97
|
+
try {
|
|
98
|
+
await mbws.data.apply({ result: 1 });
|
|
99
|
+
} catch (error) {
|
|
100
|
+
if (error instanceof MbwsInvokeError && error.code === "E_WRITE_GATE_REJECTED") {
|
|
101
|
+
// outputs key 集与契约不对齐,按 error.data 提示修正
|
|
102
|
+
}
|
|
103
|
+
}
|
|
23
104
|
```
|
|
24
105
|
|
|
25
|
-
##
|
|
106
|
+
## 另请参阅
|
|
26
107
|
|
|
27
|
-
|
|
28
|
-
|
|
108
|
+
- 工程脚手架:[`@mbws/create-plugin`](https://www.npmjs.com/package/@mbws/create-plugin)
|
|
109
|
+
(`pnpm create @mbws/plugin <目录>` 一条命令生成带本 SDK 的完整插件工程)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mbws/plugin-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Moye 插件开发 SDK——panel/viewer 与宿主的类型定义与运行时端口适配",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -15,11 +15,6 @@
|
|
|
15
15
|
"publishConfig": {
|
|
16
16
|
"access": "public"
|
|
17
17
|
},
|
|
18
|
-
"repository": {
|
|
19
|
-
"type": "git",
|
|
20
|
-
"url": "git+https://github.com/mobiwusi-dev/Union.git",
|
|
21
|
-
"directory": "packages/plugin-sdk"
|
|
22
|
-
},
|
|
23
18
|
"files": [
|
|
24
19
|
"dist"
|
|
25
20
|
],
|