@heybox/hb-sdk 0.8.0-alpha → 0.8.0-alpha.2
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/CHANGELOG.md +36 -1
- package/README.md +67 -14
- package/THIRD_PARTY_NOTICES.md +1755 -0
- package/dist/cli-chunks/{build-DJWFSM1B.cjs → build-CCLWgXyA.cjs} +2 -2
- package/dist/cli-chunks/{context-DV2UK1Nz.cjs → context-Brh56h56.cjs} +1 -26
- package/dist/cli-chunks/{create-2HfoB48V.cjs → create-BZ-hi2s1.cjs} +1 -1
- package/dist/cli-chunks/{dev-Dgt2zS9k.cjs → dev-CoSXtEYa.cjs} +335 -516
- package/dist/cli-chunks/{doctor-C95gIao_.cjs → doctor-EsCYJGhV.cjs} +1 -1
- package/dist/cli-chunks/{index-D62ANeBv.cjs → index-BL5eEPap.cjs} +14 -14
- package/dist/cli-chunks/{index-BjoSXl8C.cjs → index-CS6Q0o5C.cjs} +1 -1
- package/dist/cli-chunks/{index.esm-CigcxJ2B.cjs → index.esm-BoBHPfpq.cjs} +5 -5
- package/dist/cli-chunks/{login-Cumknwdx.cjs → login-CILLxGuf.cjs} +2 -2
- package/dist/cli-chunks/{project-vite-CcE-HMmd.cjs → project-vite-Qu6Xe9Dn.cjs} +1 -1
- package/dist/cli-chunks/{remote-DDdP3xcE.cjs → remote-DRuTQ51u.cjs} +4 -4
- package/dist/cli-chunks/{session-BDi_AZSv.cjs → session-D-_N3WVL.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-uq-Wac6k.js +97 -0
- package/dist/devtools/browser-dev-host/assets/heybox-logo-CogNENsk.svg +6 -0
- package/dist/devtools/browser-dev-host/assets/index-CeP6SLB3.js +567 -0
- package/dist/devtools/browser-dev-host/assets/index-KD2f3Jdz.css +1 -0
- package/dist/devtools/browser-dev-host/assets/workbench-state-D-1U0JRq.js +5 -0
- package/dist/devtools/browser-dev-host/index.html +6 -435
- package/dist/index.cjs.js +924 -28
- package/dist/index.esm.js +924 -29
- package/dist/protocol.cjs.js +208 -6
- package/dist/protocol.esm.js +182 -7
- package/dist/vite.cjs.js +1 -1
- package/dist/vite.esm.js +1 -1
- package/package.json +23 -9
- package/skill/SKILL.md +9 -5
- package/skill/references/api-protocol.md +99 -3
- package/skill/references/api-root.md +141 -14
- package/skill/references/cli.md +21 -17
- package/skill/references/examples.md +29 -0
- package/skill/references/recipes.md +105 -1
- package/skill/references/safety-boundaries.md +11 -0
- package/skill/scripts/sync-references.mjs +34 -2
- package/skill/skill.json +4 -4
- package/types/core/client.d.ts +17 -1
- package/types/core/sdk.d.ts +3 -0
- package/types/core/singleton.d.ts +3 -0
- package/types/index.d.ts +4 -2
- package/types/modules/files/index.d.ts +5 -0
- package/types/modules/files/registry.d.ts +35 -0
- package/types/modules/files/types.d.ts +159 -0
- package/types/modules/network/index.d.ts +50 -3
- package/types/protocol/capabilities.d.ts +2 -2
- package/types/protocol/constants.d.ts +1 -1
- package/types/protocol/guards.d.ts +1 -1
- package/types/protocol/types.d.ts +1 -1
- package/types/protocol.d.ts +4 -3
- package/dist/devtools/browser-dev-host/main.js +0 -12263
package/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,42 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.8.0-alpha
|
|
3
|
+
## 0.8.0-alpha.2
|
|
4
|
+
|
|
5
|
+
### SDK
|
|
6
|
+
|
|
7
|
+
- 新增公开 `files` 模块,定义私有 sandbox、外部 File/Directory picker、UTF-8/Uint8Array 读写、stat 和有界目录列表。
|
|
8
|
+
- `FileHandle` / `DirectoryHandle` 新增 sandbox-only 删除能力;外部 picker/saveFile 及派生授权不允许删除,目录递归删除必须显式开启。
|
|
9
|
+
- 新增 `network.download()`,将 GET 响应流式写入受控 File/Directory target,并提供 AbortSignal 与 request-scoped progress。
|
|
10
|
+
|
|
11
|
+
### Runtime / Host
|
|
12
|
+
|
|
13
|
+
- 扩展零依赖 protocol wire、Host filesystem/picker/transfer contract 和稳定文件/下载错误码;当前 Host 均对 files/download fail closed。
|
|
14
|
+
- Host 文件错误统一重建为 canonical code/message,不向 iframe 透传原始 data;每个 Runtime session 的外部 direct handle 上限为 1024,批量超限原子失败。
|
|
15
|
+
- 下载 transfer 以 `writeResource()` resolve 为不可逆提交点并返回 `committedBytes`;取消只在提交前获胜,未消费 resource 的异步清理不阻塞既定终态。
|
|
16
|
+
- 移除原计划面向旧版小黑盒 PC 的 files/download HostBridge 适配;文件/下载体系保持不变,后续直接按新版 PC Host 架构接入。
|
|
17
|
+
- Runtime request/transport 贯通 `withCredentials`、`redirectPolicy` 与 `maxResponseBytes` 的显式覆盖;Mobile Host buffered request 固定 32 MiB 上限并统一 no-follow,凭据选项不改变平台请求路由。
|
|
18
|
+
|
|
19
|
+
### Docs / Agent Skill
|
|
20
|
+
|
|
21
|
+
- 将 files/download 的 6 个 canonical callable 纳入 API Reference、兼容性矩阵、LLM 文本与 Agent Skill。
|
|
22
|
+
|
|
23
|
+
## 0.8.0-alpha.1
|
|
4
24
|
|
|
5
25
|
### Breaking Changes
|
|
6
26
|
|
|
7
27
|
- `miniappManifest({ platforms })` 要求新构建的本地小程序产物显式声明目标平台;通过 `--from-version` 复用的历史产物允许缺失并保持“平台声明未分类”。
|
|
8
28
|
|
|
29
|
+
### CLI / Browser Dev Host
|
|
30
|
+
|
|
31
|
+
- Browser Dev Host 硬切为 Vue 3 小程序调试台,复用小黑盒主题与组件;集中展示调用日志、当前小程序 Storage 快照和问题,并提供匹配手机外框的 iPhone、Pixel 屏幕预设与单一真机二维码入口。
|
|
32
|
+
- 浏览器调试不再被 CLI 登录、项目绑定或远端 Dev Context 阻断;移除调试页权限修改和 Mac 启动入口,依赖账号或远端配置的能力改为按当前上下文明确返回结果或失败。
|
|
33
|
+
- 授权、操作弹窗、Toast、Loading 与振动反馈统一限制在设备预览内;`navigation.reload` 在响应投递后只重建预览 iframe,保留整个调试台会话和诊断状态。
|
|
34
|
+
|
|
35
|
+
### Runtime
|
|
36
|
+
|
|
37
|
+
- Host 可显式订阅脱敏 capability 完成记录,并通过只读 diagnostics 获取 canonical 小程序作用域的 Storage 快照;不向 iframe 暴露诊断能力或其他小程序数据。
|
|
38
|
+
- 新增 response 成功投递后的脱敏 `bridge_response` trace,供 Host 确定性编排刷新等后续行为,不暴露 request id、payload 或 result。
|
|
39
|
+
|
|
9
40
|
### SDK
|
|
10
41
|
|
|
11
42
|
- 公开运行时 API 使用严格 TSDoc 记录加入版本、支持平台、最低客户端版本、稳定性和废弃信息。
|
|
@@ -16,6 +47,10 @@
|
|
|
16
47
|
- 新项目模板显式预填 `android`、`ios`、`ohos` 三个平台;该初始值不是 Runtime fallback 或真机验收证明。
|
|
17
48
|
- canonical Docs 增加独立阻断 CI 门禁,校验 TSDoc、Manifest、API 图、生成物 freshness、链接和桌面/移动端阅读体验。
|
|
18
49
|
|
|
50
|
+
### Tooling
|
|
51
|
+
|
|
52
|
+
- 补齐 Browser Dev Host Vue 类型检查、资源完整性与第三方声明校验。
|
|
53
|
+
|
|
19
54
|
## 0.7.6-alpha.0
|
|
20
55
|
|
|
21
56
|
### Runtime
|
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ npm install
|
|
|
17
17
|
npm run dev
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
脚手架已包含 SDK、Vite
|
|
20
|
+
脚手架已包含 SDK、Vite 配置和常用开发命令。浏览器调试通过后,再从调试台的二维码入口使用手机小黑盒 APP 验收。
|
|
21
21
|
|
|
22
22
|
### 接入已有项目
|
|
23
23
|
|
|
@@ -84,6 +84,45 @@ export default defineConfig({
|
|
|
84
84
|
|
|
85
85
|
完整接入步骤见[快速开始](https://docs.xiaoheihe.cn/hb_sdk/guide/quick-start)。
|
|
86
86
|
|
|
87
|
+
## 文件与下载
|
|
88
|
+
|
|
89
|
+
`files` 提供当前小程序私有 sandbox 和由用户选择授予的外部 File/Directory;
|
|
90
|
+
`network.download()` 将 GET 响应直接流式写入受控目标,下载字节不经过 iframe bridge。
|
|
91
|
+
|
|
92
|
+
```ts
|
|
93
|
+
const exportDirectory = hbSDK.files.sandbox.directory('exports');
|
|
94
|
+
await exportDirectory.create({ recursive: true });
|
|
95
|
+
|
|
96
|
+
const staleFile = exportDirectory.file('stale.json');
|
|
97
|
+
if (await staleFile.exists()) await staleFile.remove();
|
|
98
|
+
|
|
99
|
+
const controller = new AbortController();
|
|
100
|
+
const downloaded = await hbSDK.network.download({
|
|
101
|
+
url: 'https://cdn.example.com/report.json',
|
|
102
|
+
to: exportDirectory,
|
|
103
|
+
suggestedName: 'report.json',
|
|
104
|
+
overwrite: true,
|
|
105
|
+
maxBytes: 8 * 1024 * 1024,
|
|
106
|
+
signal: controller.signal,
|
|
107
|
+
onProgress(progress) {
|
|
108
|
+
console.log(progress.loaded, progress.total, progress.lengthComputable);
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
console.log(await downloaded.readText());
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
本次保留 `files`、`network.download()`、协议 wire 和 Runtime Host Port 体系,但暂不在现有 Host
|
|
116
|
+
开放。此前的实现用于适配旧版小黑盒 PC;由于新版 PC 即将启用,这套旧版适配不再发布,后续会
|
|
117
|
+
直接按照新版 PC 的 Host 架构接入。当前 Host 调用这些 method 时返回 `METHOD_FORBIDDEN`;旧
|
|
118
|
+
Runtime 不认识新 method 时返回 `METHOD_NOT_FOUND`,且不提供 Blob 或内存假实现。
|
|
119
|
+
|
|
120
|
+
外部 picker 必须从可信用户操作触发。`files.saveFile({ suggestedName })` 会打开系统保存对话框并返回
|
|
121
|
+
精确 File 授权,不会额外保留 Directory 授权;V1 不接受 `accept`。只有 `pickFiles()` 支持扩展名过滤。完整路径、创建、存在性和
|
|
122
|
+
下载语义见[快速开始](https://docs.xiaoheihe.cn/hb_sdk/guide/quick-start#文件与下载)。
|
|
123
|
+
|
|
124
|
+
`remove()` 只允许删除 sandbox 对象;外部 picker、`saveFile()` 及其派生项即使是 `readwrite` 也返回 `FILE_ACCESS_DENIED`。单个 Runtime session 最多保留 1024 个外部 direct handle,超限返回 `FILE_QUOTA_EXCEEDED`。Host 文件错误只向 SDK 暴露稳定 code 与 canonical 安全文案,业务不要依赖平台原始 message 或附加 data。
|
|
125
|
+
|
|
87
126
|
## 错误处理
|
|
88
127
|
|
|
89
128
|
握手失败会保留在持久状态中,可在订阅回放时直接处理原始错误:
|
|
@@ -106,18 +145,19 @@ window.addEventListener('unload', stopHandshakeState, { once: true });
|
|
|
106
145
|
|
|
107
146
|
SDK 还提供 `getHandshakeState()` / `onHandshakeStateChange()` 管理持久握手状态,并通过 `on()` / `off()` 处理前后台、登录态等生命周期事件。
|
|
108
147
|
|
|
109
|
-
| 模块 | 用途
|
|
110
|
-
| ------------ |
|
|
111
|
-
| `auth` | 获取交给开发者服务端交换的短期授权码
|
|
112
|
-
| `user` | 读取 Host 当前用户资料、隔离身份或撤销授权
|
|
113
|
-
| `share` | 打开分享、复制链接或截图分享流程
|
|
114
|
-
| `ui` | 展示 Toast 和 Loading
|
|
115
|
-
| `device` | 调用振动和剪贴板能力
|
|
116
|
-
| `navigation` | 关闭、刷新页面或打开小黑盒页面
|
|
117
|
-
| `viewport` | 读取窗口信息和设置导航栏样式
|
|
118
|
-
| `storage` | 读写当前小程序的隔离存储
|
|
119
|
-
| `
|
|
120
|
-
| `
|
|
148
|
+
| 模块 | 用途 |
|
|
149
|
+
| ------------ | ----------------------------------------------- |
|
|
150
|
+
| `auth` | 获取交给开发者服务端交换的短期授权码 |
|
|
151
|
+
| `user` | 读取 Host 当前用户资料、隔离身份或撤销授权 |
|
|
152
|
+
| `share` | 打开分享、复制链接或截图分享流程 |
|
|
153
|
+
| `ui` | 展示 Toast 和 Loading |
|
|
154
|
+
| `device` | 调用振动和剪贴板能力 |
|
|
155
|
+
| `navigation` | 关闭、刷新页面或打开小黑盒页面 |
|
|
156
|
+
| `viewport` | 读取窗口信息和设置导航栏样式 |
|
|
157
|
+
| `storage` | 读写当前小程序的隔离存储 |
|
|
158
|
+
| `files` | 声明受控 sandbox 与用户选择授权的文件、目录操作 |
|
|
159
|
+
| `cloud` | 使用小程序云端排行榜 |
|
|
160
|
+
| `network` | 发起经过平台授权的网络请求,并声明受控流式下载 |
|
|
121
161
|
|
|
122
162
|
具体方法、参数和返回值以 [API Reference](https://docs.xiaoheihe.cn/hb_sdk/reference/) 为准,常见组合写法见 [Recipes](https://docs.xiaoheihe.cn/hb_sdk/recipes/)。
|
|
123
163
|
|
|
@@ -134,8 +174,19 @@ SDK 还提供 `getHandshakeState()` / `onHandshakeStateChange()` 管理持久握
|
|
|
134
174
|
- `user.revokeAuthorization()` 在两种网络模式下都要求可信用户手势;成功后必须停止使用并清理业务缓存的旧身份、资料和服务端会话。
|
|
135
175
|
- `on()` 返回取消监听函数,组件卸载或页面销毁时需要调用。
|
|
136
176
|
- 业务网络请求使用 `network.request()`,不要依赖浏览器原生网络出口。
|
|
177
|
+
- 公开 `network.request()` 与 `network.download()` 均使用 no-follow redirect policy;3xx 不会在 Host 内静默跳转。
|
|
137
178
|
- `network.request()` 不能访问平台保留的 runtime auth 与 OpenAPI 内部路径;页面不得持有或交换服务端应用凭据。
|
|
138
179
|
- `network.request` 不支持 `multipart/form-data`;App Host 仅支持 form(`application/x-www-form-urlencoded`)与 JSON。表单请用 `URLSearchParams#toString()` 作为 `data`,文件上传请走专用上传能力。
|
|
180
|
+
- 当前 Host(包括旧版 PC、Mobile、Web 与 Browser Dev Host)均未开放 `files` / `network.download()`;新版 PC 将按同一公开合同重新接入,期间不提供内存或 Blob 假实现。
|
|
181
|
+
- picker 必须来自可信用户手势;取消选择返回 `FILE_PICKER_CANCELLED`。`saveFile()` 只接受 `suggestedName`,不接受 `accept`。
|
|
182
|
+
- `pickFiles()` / `pickDirectory()` 默认只读;`pickFiles()` 仅在显式传入 `multiple: true` 时允许 Host 返回多个文件。要写入或作为下载目标时显式请求 `mode: 'readwrite'`。
|
|
183
|
+
- `file()` / `directory()` 只接受以 `/` 分隔的规范相对路径;拒绝绝对路径、空 segment、`.`、`..`、反斜杠、尾分隔符和控制字符。
|
|
184
|
+
- `create()` 的 `recursive` / `exclusive` 默认都是 `false`;`exists()` 仅把缺失祖先、缺失目标或 kind mismatch 归一为 `false`,不会吞授权和 I/O 错误。
|
|
185
|
+
- `remove()` 只允许删除 sandbox 对象;外部 picker/saveFile 授权返回 `FILE_ACCESS_DENIED`。非空目录默认返回 `DIRECTORY_NOT_EMPTY`,需显式调用 `remove({ recursive: true })`。
|
|
186
|
+
- `directory.list()` 默认最多返回 1000 项,`limit` 也不能超过 1000;超限返回 `DIRECTORY_LIST_LIMIT_EXCEEDED`。
|
|
187
|
+
- 单个 Runtime session 最多保留 1024 个 picker/saveFile direct handle;整批授权超限时返回 `FILE_QUOTA_EXCEEDED`,不会保留部分结果。
|
|
188
|
+
- Host 文件错误只保留稳定 code 与 canonical 安全文案;原始 message、data、native path 和 credential 不会进入小程序。
|
|
189
|
+
- `FileStat.size` 是非负 safe integer;`modifiedAt` / `createdAt` 若存在,单位为 Unix epoch milliseconds。
|
|
139
190
|
- 仅当远端已启用 `network.request` 时,`hb-sdk dev` 与 `hb-sdk remote deploy` 构建才会跳过平台 CSP;其他构建继续注入平台 CSP。`useOfficialDomain` 不参与 CSP 跳过判定。
|
|
140
191
|
- 构建必须启用 `miniappManifest({ platforms })` 并显式声明实际承诺适配的平台,推荐统一使用 `hb-sdk build`。新项目模板中的 `['android', 'ios', 'ohos']` 只是初始配置,不代表已经完成真机验收。
|
|
141
192
|
|
|
@@ -199,7 +250,9 @@ hb-sdk remote deploy --release-note "本次更新说明"
|
|
|
199
250
|
| `hb-sdk build` | 执行生产构建与产物校验,不包含类型检查 |
|
|
200
251
|
| `hb-sdk remote deploy` | 构建、上传并提交当前版本审核 |
|
|
201
252
|
|
|
202
|
-
`hb-sdk dev`
|
|
253
|
+
`hb-sdk dev` 会启动 Vue 3 Browser Dev Host。左侧诊断面板集中展示调用日志、当前小程序作用域内的 Storage 快照和问题,右侧设备预览可在 iPhone 16 Pro Max(`440 x 956`)与 Pixel 9 Pro(`410 x 914`)间切换。切换预设只改变设备外框和 viewport,不会重新加载 iframe 或重启 Runtime;授权与操作弹窗、Toast、Loading 和振动反馈都限制在预览框内。
|
|
254
|
+
|
|
255
|
+
浏览器调试入口不要求 CLI 登录或项目绑定;需要账号或远端配置的能力会按当前可用上下文返回结果或明确失败。调试台不提供权限修改入口,远端权限快照始终是 Runtime 的规范输入。手机验收统一从右上角二维码入口进入,选择手机可达的局域网网卡后扫码;二维码使用 `open_inapp` 与 `heybox://` `openWindow` 包装的短链。完整操作见 [CLI 指南](https://docs.xiaoheihe.cn/hb_sdk/guide/cli),实现与安全边界由 [Runtime Host 迁移](./docs/runtime-host-migration.md) 维护。
|
|
203
256
|
|
|
204
257
|
远端提交前需要完成 CLI 登录和小程序绑定。完整的登录、绑定、预览、版本与发布流程见 [CLI 指南](https://docs.xiaoheihe.cn/hb_sdk/guide/cli)。
|
|
205
258
|
|