@agentunion/fastaun-browser 0.5.10 → 0.5.12

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.
Files changed (44) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/_packed_docs/CHANGELOG.md +62 -0
  3. package/_packed_docs/INDEX.md +3 -3
  4. package/_packed_docs/KITE_DOCS_GUIDE.md +1 -1
  5. package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +21 -3
  6. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +59 -0
  7. package/_packed_docs/sdk/09-group-rpc-manual.md +29 -2
  8. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +3 -2
  9. package/_packed_docs/sdk/INDEX.md +2 -1
  10. package/dist/bundle.js +1145 -381
  11. package/dist/client/delivery.d.ts +12 -4
  12. package/dist/client/delivery.d.ts.map +1 -1
  13. package/dist/client/delivery.js +341 -273
  14. package/dist/client/delivery.js.map +1 -1
  15. package/dist/client/group-state.d.ts.map +1 -1
  16. package/dist/client/group-state.js +1 -0
  17. package/dist/client/group-state.js.map +1 -1
  18. package/dist/client/rpc-pipeline.d.ts.map +1 -1
  19. package/dist/client/rpc-pipeline.js +38 -13
  20. package/dist/client/rpc-pipeline.js.map +1 -1
  21. package/dist/client/v2-e2ee.d.ts +3 -1
  22. package/dist/client/v2-e2ee.d.ts.map +1 -1
  23. package/dist/client/v2-e2ee.js +211 -75
  24. package/dist/client/v2-e2ee.js.map +1 -1
  25. package/dist/client.d.ts +15 -0
  26. package/dist/client.d.ts.map +1 -1
  27. package/dist/client.js +402 -20
  28. package/dist/client.js.map +1 -1
  29. package/dist/facades.d.ts +7 -0
  30. package/dist/facades.d.ts.map +1 -1
  31. package/dist/facades.js +44 -0
  32. package/dist/facades.js.map +1 -1
  33. package/dist/seq-tracker.d.ts +2 -2
  34. package/dist/seq-tracker.d.ts.map +1 -1
  35. package/dist/seq-tracker.js +11 -7
  36. package/dist/seq-tracker.js.map +1 -1
  37. package/dist/tools/cross-sdk-agent.js +50 -12
  38. package/dist/tools/cross-sdk-agent.js.map +1 -1
  39. package/dist/transport.d.ts.map +1 -1
  40. package/dist/transport.js +162 -15
  41. package/dist/transport.js.map +1 -1
  42. package/dist/version.d.ts +1 -1
  43. package/dist/version.js +1 -1
  44. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -6,6 +6,68 @@
6
6
 
7
7
  ---
8
8
 
9
+ ## 0.5.12 — 2026-09-05
10
+
11
+ ### 新功能
12
+
13
+ #### 定向群邀请
14
+ - `GroupFacade` 新增 `inviteMember`、`listMyInvites`、`acceptInvite`、`rejectInvite` 和 `revokeInvite`,统一规范化群 ID、邀请 ID/AID 别名并接入签名 RPC。
15
+ - `create({ members })` 在群创建完成后逐一发出定向邀请,支持 `member_type`,跳过自身和重复 AID;浏览器 cross-SDK agent 和群管理 E2E 覆盖邀请流程。
16
+ - 邀请按群和目标 AID 聚合并持久化,在线重复、分页恢复和连接恢复只发布一次 `group.invite_received`;终态清理,部分撤回保留剩余 pending 邀请。
17
+
18
+ ### 修复
19
+
20
+ #### Forward Pull、ACK 与游标
21
+ - Forward 页完成后忽略页内空洞,按页最大序号和服务端 `contiguous_seq` 证明推进 seq-tracker,并在提交成功后 ACK;已观察到的 Push 上界未追平时继续翻页,即使 `has_more=false`。
22
+ - 空页不直接用高位服务端 cursor 覆盖本地连续游标,待恢复 cursor 在下一次成功 Forward 时应用;持久化失败回滚 tracker 并禁止 ACK。
23
+ - inline push 只有在包含非空 inline payload 时才推进连续游标并 ACK;非 inline push 只更新 `maxSeen` 并触发 Forward,不直接推进 A/T/H 或 ACK。Tail 仅维护窗口,History 不推进实时游标。
24
+
25
+ #### Push、V2 与浏览器生命周期
26
+ - P2P、群消息和群事件的 plain/V2 路径统一上述边界;缺少 sender IK/SPK 时保留阻塞页,不错误推进、ACK 或续页,密钥恢复后按 `pending_retry` 投递。
27
+ - 当前设备自发消息在 Pull 中只标记序号,不重复发布;重复/迟到 inline ACK 保留 pending。群 changed、dissolved、自入群等非 inline Push 只记录上界并交由 Forward 处理。
28
+ - 浏览器 Worker/原生 transport 事件映射补齐邀请创建、接收和终态,连接恢复不阻塞邀请状态重建。
29
+
30
+ ### 改进
31
+
32
+ - SDK、锁文件、运行时 `VERSION`、V2 E2EE envelope `sdk_version`、conformance 及相关测试期望统一更新为 `0.5.12`。
33
+
34
+ ### 测试
35
+
36
+ - 新增定向邀请 facade、聚合持久化、分页/重连恢复、部分终态和浏览器群管理 E2E 测试。
37
+ - 扩展 Forward 空洞、服务端 contiguous 证明、空页 cursor、持久化回滚、inline/non-inline Push、Tail/History 不推进、self-sync 去重及缺 IK/SPK 阻塞边界测试;跨域 runner 使用 `agentid.cn`/`agentid.pub`。
38
+
39
+ ## 0.5.11 — 2026-09-03
40
+
41
+ ### 新功能
42
+
43
+ #### 消息来源与同步生命周期
44
+ - P2P 消息、群消息、群事件、撤回和不可解密事件的应用 payload 新增 `source`,统一标识 `push`、`pull`、`inline_push` 或 `pending_retry`;`delivery.changed` 同步增加规范化 `source`。
45
+ - 新增 `sync.started`、`sync.progress`、`sync.stopped` 生命周期事件。首次进入 Pull 时启动同步,每个 P2P/群 Pull page 完成后报告 namespace、页数、原始/已投递条数、`has_more`、`remaining`/估算剩余量,全部 Pull work 排空或中止时结束。
46
+ - 同步事件继续经应用异步 FIFO 分发;并发 namespace 归入同一 run,Pull 失败、断线、关闭或身份代次重置以 `reason: "aborted"` 收口,不再把失败同步报告为正常排空。
47
+
48
+ #### 连接后身份准入自愈
49
+ - 每次 Gateway 连接成功后异步执行一次身份准入检查:普通 AID 缺少远端 agent.md 时复用本地内容或生成默认内容并补传。
50
+ - 对当前 AID 作为群主的群逐个检查 group AID;缺少本地群证书/私钥时触发绑定并沿用绑定流程上传 group agent.md,已有群身份但远端缺少 group agent.md 时补传。检查失败只记录告警,不阻塞已建立的连接。
51
+
52
+ ### 修复
53
+
54
+ #### 浏览器 Worker 与 CSP 兼容
55
+ - Worker WebSocket 代理增加 `ready`/`open` 两阶段启动确认和超时;`worker-src 'none'` 等 CSP 导致的异步 `error`、启动无响应、open 前关闭均会销毁 Worker、撤销 Blob URL,并自动回退原生 WebSocket。
56
+ - Worker 已连接后异常也可切换到原生 WebSocket,待发送请求会明确完成或失败;无 Worker 环境直接使用原生 WebSocket,应用事件仍由异步 dispatcher 隔离,避免 handler 阻塞网络处理。
57
+
58
+ #### V2 消息兼容与来源保持
59
+ - Tail/Forward/History 能识别 V1 wrapper 内的 `e2ee.p2p_encrypted` / `e2ee.group_encrypted` V2 envelope,并进入 V2 解密路径;群撤回在旧格式行中仍优先归一化为撤回事件。
60
+ - ordered queue、sender IK 延迟恢复、inline realtime 和不可解密事件保持原始来源,避免补洞消息被误标为 push;群 Tail 同步进度仅由当前实例拥有的 cursor 产生。
61
+
62
+ ### 改进
63
+
64
+ - SDK 包、锁文件、运行时 `VERSION`、V2 E2EE envelope `sdk_version`、conformance 及相关测试期望统一更新为 `0.5.11`。
65
+
66
+ ### 测试
67
+
68
+ - 新增 Worker 正常可用、CSP 禁止 Blob Worker、无 Worker、异步启动失败、open 超时及运行中崩溃的单元与 Playwright 浏览器测试。
69
+ - 扩展 `source`、`sync.*` 状态机、Pull 中止、分页进度、V1 wrapper 内 V2 envelope、连接后普通/群 agent.md 自愈及版本 conformance 测试。
70
+
9
71
  ## 0.5.10 — 2026-09-02
10
72
 
11
73
  ### 新功能
@@ -6,6 +6,68 @@
6
6
 
7
7
  ---
8
8
 
9
+ ## 0.5.12 — 2026-09-05
10
+
11
+ ### 新功能
12
+
13
+ #### 定向群邀请
14
+ - `GroupFacade` 新增 `inviteMember`、`listMyInvites`、`acceptInvite`、`rejectInvite` 和 `revokeInvite`,统一规范化群 ID、邀请 ID/AID 别名并接入签名 RPC。
15
+ - `create({ members })` 在群创建完成后逐一发出定向邀请,支持 `member_type`,跳过自身和重复 AID;浏览器 cross-SDK agent 和群管理 E2E 覆盖邀请流程。
16
+ - 邀请按群和目标 AID 聚合并持久化,在线重复、分页恢复和连接恢复只发布一次 `group.invite_received`;终态清理,部分撤回保留剩余 pending 邀请。
17
+
18
+ ### 修复
19
+
20
+ #### Forward Pull、ACK 与游标
21
+ - Forward 页完成后忽略页内空洞,按页最大序号和服务端 `contiguous_seq` 证明推进 seq-tracker,并在提交成功后 ACK;已观察到的 Push 上界未追平时继续翻页,即使 `has_more=false`。
22
+ - 空页不直接用高位服务端 cursor 覆盖本地连续游标,待恢复 cursor 在下一次成功 Forward 时应用;持久化失败回滚 tracker 并禁止 ACK。
23
+ - inline push 只有在包含非空 inline payload 时才推进连续游标并 ACK;非 inline push 只更新 `maxSeen` 并触发 Forward,不直接推进 A/T/H 或 ACK。Tail 仅维护窗口,History 不推进实时游标。
24
+
25
+ #### Push、V2 与浏览器生命周期
26
+ - P2P、群消息和群事件的 plain/V2 路径统一上述边界;缺少 sender IK/SPK 时保留阻塞页,不错误推进、ACK 或续页,密钥恢复后按 `pending_retry` 投递。
27
+ - 当前设备自发消息在 Pull 中只标记序号,不重复发布;重复/迟到 inline ACK 保留 pending。群 changed、dissolved、自入群等非 inline Push 只记录上界并交由 Forward 处理。
28
+ - 浏览器 Worker/原生 transport 事件映射补齐邀请创建、接收和终态,连接恢复不阻塞邀请状态重建。
29
+
30
+ ### 改进
31
+
32
+ - SDK、锁文件、运行时 `VERSION`、V2 E2EE envelope `sdk_version`、conformance 及相关测试期望统一更新为 `0.5.12`。
33
+
34
+ ### 测试
35
+
36
+ - 新增定向邀请 facade、聚合持久化、分页/重连恢复、部分终态和浏览器群管理 E2E 测试。
37
+ - 扩展 Forward 空洞、服务端 contiguous 证明、空页 cursor、持久化回滚、inline/non-inline Push、Tail/History 不推进、self-sync 去重及缺 IK/SPK 阻塞边界测试;跨域 runner 使用 `agentid.cn`/`agentid.pub`。
38
+
39
+ ## 0.5.11 — 2026-09-03
40
+
41
+ ### 新功能
42
+
43
+ #### 消息来源与同步生命周期
44
+ - P2P 消息、群消息、群事件、撤回和不可解密事件的应用 payload 新增 `source`,统一标识 `push`、`pull`、`inline_push` 或 `pending_retry`;`delivery.changed` 同步增加规范化 `source`。
45
+ - 新增 `sync.started`、`sync.progress`、`sync.stopped` 生命周期事件。首次进入 Pull 时启动同步,每个 P2P/群 Pull page 完成后报告 namespace、页数、原始/已投递条数、`has_more`、`remaining`/估算剩余量,全部 Pull work 排空或中止时结束。
46
+ - 同步事件继续经应用异步 FIFO 分发;并发 namespace 归入同一 run,Pull 失败、断线、关闭或身份代次重置以 `reason: "aborted"` 收口,不再把失败同步报告为正常排空。
47
+
48
+ #### 连接后身份准入自愈
49
+ - 每次 Gateway 连接成功后异步执行一次身份准入检查:普通 AID 缺少远端 agent.md 时复用本地内容或生成默认内容并补传。
50
+ - 对当前 AID 作为群主的群逐个检查 group AID;缺少本地群证书/私钥时触发绑定并沿用绑定流程上传 group agent.md,已有群身份但远端缺少 group agent.md 时补传。检查失败只记录告警,不阻塞已建立的连接。
51
+
52
+ ### 修复
53
+
54
+ #### 浏览器 Worker 与 CSP 兼容
55
+ - Worker WebSocket 代理增加 `ready`/`open` 两阶段启动确认和超时;`worker-src 'none'` 等 CSP 导致的异步 `error`、启动无响应、open 前关闭均会销毁 Worker、撤销 Blob URL,并自动回退原生 WebSocket。
56
+ - Worker 已连接后异常也可切换到原生 WebSocket,待发送请求会明确完成或失败;无 Worker 环境直接使用原生 WebSocket,应用事件仍由异步 dispatcher 隔离,避免 handler 阻塞网络处理。
57
+
58
+ #### V2 消息兼容与来源保持
59
+ - Tail/Forward/History 能识别 V1 wrapper 内的 `e2ee.p2p_encrypted` / `e2ee.group_encrypted` V2 envelope,并进入 V2 解密路径;群撤回在旧格式行中仍优先归一化为撤回事件。
60
+ - ordered queue、sender IK 延迟恢复、inline realtime 和不可解密事件保持原始来源,避免补洞消息被误标为 push;群 Tail 同步进度仅由当前实例拥有的 cursor 产生。
61
+
62
+ ### 改进
63
+
64
+ - SDK 包、锁文件、运行时 `VERSION`、V2 E2EE envelope `sdk_version`、conformance 及相关测试期望统一更新为 `0.5.11`。
65
+
66
+ ### 测试
67
+
68
+ - 新增 Worker 正常可用、CSP 禁止 Blob Worker、无 Worker、异步启动失败、open 超时及运行中崩溃的单元与 Playwright 浏览器测试。
69
+ - 扩展 `source`、`sync.*` 状态机、Pull 中止、分页进度、V1 wrapper 内 V2 envelope、连接后普通/群 agent.md 自愈及版本 conformance 测试。
70
+
9
71
  ## 0.5.10 — 2026-09-02
10
72
 
11
73
  ### 新功能
@@ -30,7 +30,7 @@
30
30
  | [SDK 文档索引](sdk/INDEX.md) | SDK 使用手册、四 SDK 当前 access token getter、Python Push 自动登记/Facade、RPC 手册、E2EE、Storage VFS、Group FS 和 Collab 的子索引 |
31
31
  | [SDK 查阅指南](sdk/AUN_DOCS_GUIDE.md) | SDK 文档按行区间渐进式查阅方法 |
32
32
  | [AUN SDK 0.5.6 更新日志](sdk/CHANGELOG-0.5.6.md) | 以 0.5.5 为基线的四 SDK 发布汇总;覆盖首次签名者回源、下载提交前验签、消息窗口、显式 change-seed 和语言能力边界 |
33
- | [四 SDK 版本对齐变更清单](../python/CHANGES_FOR_PARITY.md) | 以 Python 实现为主线的 v0.3.3 至 v0.5.6 跨语言对齐清单;0.5.6 重点覆盖首次签名者发现、下载提交前验签、消息窗口、inline push、显式 change-seed 与语言能力边界 |
33
+ | [四 SDK 版本对齐变更清单](../python/CHANGES_FOR_PARITY.md) | 以 Python 实现为主线的 v0.3.3 至 v0.5.12 跨语言对齐清单;0.5.12 重点覆盖定向群邀请、Forward/ACK/seq-tracker 游标边界、Tail/History 只读语义与四端一致性 |
34
34
  | [AUN CLI 手册](cli/CLI手册.md) | Python CLI 源码位置、安装运行入口、全局选项、profile 配置和主要命令集 |
35
35
  | [AUN CLI 设计文档](cli/AUN-CLI设计文档.md) | `python/src/aun_cli` 当前实现架构、命令注册面、配置解析、SDK 桥接和实现边界 |
36
36
  | [AUN Storage 架构设计](<aun-fs/AUN Storage架构设计.md>) | Storage SDK VFS、控制面/数据面分离、下载 ticket / AID Bearer 边界、当前 access token getter、类 Linux 权限、mount/symlink、服务端分层和 direct backend 上传下载 |
@@ -86,7 +86,7 @@
86
86
  - 四 SDK 当前 access token getter、缓存快照语义和外部 HTTP 数据面下载凭据生命周期 → [连接与认证](sdk/04-连接与认证.md)、[API 手册](sdk/06-API手册.md)、[Storage RPC 手册](sdk/09-storage-rpc-manual.md)、[AUN Storage 架构设计](<aun-fs/AUN Storage架构设计.md>)
87
87
  - 按主题和行区间查 SDK 文档 → [SDK 查阅指南](sdk/AUN_DOCS_GUIDE.md)
88
88
  - 四 SDK 0.5.6 发布摘要、首次签名者回源、可信缓存提交、消息窗口、语言能力边界 → [AUN SDK 0.5.6 更新日志](sdk/CHANGELOG-0.5.6.md)
89
- - 四 SDK 相对发布基线的实现级差异、代码/测试落点、对齐优先级、首次签名者发现、可信缓存和显式 change-seed 边界 → [四 SDK 版本对齐变更清单](../python/CHANGES_FOR_PARITY.md)
89
+ - 四 SDK 相对发布基线的实现级差异、代码/测试落点、对齐优先级、消息来源、sync 生命周期、身份准入自愈和 Worker 降级边界 → [四 SDK 版本对齐变更清单](../python/CHANGES_FOR_PARITY.md)
90
90
  - Python CLI 源码位置、安装运行入口、全局选项、profile 配置、身份/消息/群组/Storage/Group FS/Collab/诊断等命令用法 → [AUN CLI 手册](cli/CLI手册.md)
91
91
  - Python CLI 当前实现架构、`main.py` 命令注册、`CLISession` SDK 桥接、配置解析和实现边界 → [AUN CLI 设计文档](cli/AUN-CLI设计文档.md)
92
92
  - Storage SDK VFS、控制面/数据面分离、下载 ticket / AID Bearer 边界、当前 access token getter、类 Linux 权限、mount/symlink、direct backend 上传下载和服务端分层 → [AUN Storage 架构设计](<aun-fs/AUN Storage架构设计.md>)
@@ -222,7 +222,7 @@
222
222
 
223
223
  ### 四 SDK 版本对齐变更清单
224
224
 
225
- `python/CHANGES_FOR_PARITY.md` 以 Python SDK 历史实现为主线记录 Go / TypeScript / JavaScript 的对齐要求。v0.5.6 章节以 `ce56814a` 的 v0.5.5 为基线,区分四语言共有能力与 Python/Go/浏览器专属边界,并明确 `lookupPeer` 回源、`group.index` / `agent.md` 下载提交前验签、已验证缓存读取、消息窗口、inline push 和显式 change-seed 的一致性要求。
225
+ `python/CHANGES_FOR_PARITY.md` 以 Python SDK 历史实现为主线记录 Go / TypeScript / JavaScript 的对齐要求。当前 v0.5.12 章节以 `07a489b2` 的 v0.5.11 为基线,区分四语言共有能力与语言特有边界,并明确定向群邀请、Forward/ACK/seq-tracker 游标、inline/non-inline Push、Tail/History 语义和失败回滚的一致性要求。
226
226
 
227
227
  ### AUN CLI 手册
228
228
 
@@ -102,7 +102,7 @@ AUN SDK Core 文档在 `docs/` 下。根级索引为 `docs/INDEX.md`,SDK API
102
102
  | SDK API、RPC、E2EE、Storage VFS、Group FS、Collab GC/reflog/reset 使用细节 | `docs/sdk/AUN_DOCS_GUIDE.md` |
103
103
  | 四 SDK 当前 access token getter、缓存快照语义和外部 HTTP 数据面下载凭据生命周期 | `docs/sdk/04-连接与认证.md` L94-123、`docs/sdk/06-API手册.md` L192-209、`docs/sdk/09-storage-rpc-manual.md` L621-663、`docs/sdk/09-group-rpc-manual.md` L1448-1452、`docs/aun-fs/AUN Storage架构设计.md` L153-166 |
104
104
  | 四 SDK 0.5.6 发布摘要、验签缓存、消息窗口与语言能力边界 | `docs/sdk/CHANGELOG-0.5.6.md` L1-73 |
105
- | 四 SDK 版本差异、跨语言对齐优先级、验签缓存与 change-seed 边界 | `python/CHANGES_FOR_PARITY.md` L11-110 |
105
+ | 四 SDK 版本差异、跨语言对齐优先级、定向群邀请、Forward/ACK/seq-tracker 游标及 Tail/History 边界 | `python/CHANGES_FOR_PARITY.md` L11-92 |
106
106
  | 群 `mention_mode` 提及过滤、Agent 自主行为、SDK group.index facade 和 CAS 冲突处理 | `docs/protocol/10-Group-子协议.md`、`docs/protocol/13-Agent行为规范.md`、`docs/sdk/09-group-rpc-manual.md`、`docs/sdk/07-错误处理.md` |
107
107
  | AUN Python CLI 源码位置、安装入口、全局选项、profile 配置和主要命令集 | `docs/cli/CLI手册.md` L3-333 |
108
108
  | AUN Python CLI 当前实现架构、命令注册、SDK 桥接和实现边界 | `docs/cli/AUN-CLI设计文档.md` L3-265 |
@@ -17,7 +17,7 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
17
17
  ```
18
18
 
19
19
  - **Group Service**:持有独立 AID,作为 AUN 节点运行,暴露 `group.*` RPC 方法
20
- - **成员**:通过 `group.request_join` / `group.add_member` / `group.use_invite_code` 加入
20
+ - **成员**:通过 `group.request_join` / `group.add_member` / `group.invite_member` / `group.use_invite_code` 加入
21
21
  - **权限层级**:`owner` > `admin` > `member`(只读群另有 `observer` 角色)
22
22
 
23
23
  ---
@@ -238,7 +238,7 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
238
238
 
239
239
  ### `group.add_member`
240
240
 
241
- 直接添加成员。需要 admin 及以上权限。
241
+ 直接添加成员。需要 **owner** 权限;这是立即成为正式成员的显式例外。普通指定 AID 入群应使用 `group.invite_member`,由目标 AID 接受。
242
242
 
243
243
  **参数**:
244
244
 
@@ -249,7 +249,25 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
249
249
  | `role` | string | ❌ | `"member"` / `"admin"`,默认 `"member"` |
250
250
  | `member_type` | string | ❌ | `"human"` / `"ai"`,默认 `"human"` |
251
251
 
252
- **响应**:`{ "group": { ... }, "member": { ... } }`
252
+ **响应**:`{ "group": { ... }, "member": { ... } }`
253
+
254
+ ### `group.invite_member`
255
+
256
+ 创建指定 AID 的待处理邀请,不写入正式成员表。公开群允许任意正式成员,非公开群仅 owner/admin;同一群、目标和邀请者重复调用幂等返回原记录。
257
+
258
+ **参数**:`group_id`(必填)、`aid` 或 `invitee_aid`(必填)、`member_type`(可选,`human` / `ai`,默认 `human`)。
259
+
260
+ ### `group.list_my_invites`
261
+
262
+ 列出当前认证 AID 收到的待处理邀请,按 `group_id + invitee_aid` 聚合。参数为可选的 `page`、`size`。
263
+
264
+ ### `group.accept_invite` / `group.reject_invite`
265
+
266
+ 由被邀请 AID 以 `invite_id` 接受或拒绝聚合邀请;接受成功时才原子写入正式成员表,拒绝不写入成员表。
267
+
268
+ ### `group.revoke_invite`
269
+
270
+ 由原邀请发出者以 `invite_id` 撤回自己的待处理邀请。撤回、接受、拒绝和过期是互斥终态转换。
253
271
 
254
272
  ### `group.leave`
255
273
 
@@ -737,8 +737,11 @@ sub.unsubscribe()
737
737
  | `message.received` | 收到 P2P 消息 |
738
738
  | `message.ack` | 消息 ack |
739
739
  | `message.undecryptable` | P2P E2EE 解密失败 |
740
+ | `group.message_created` | 收到群消息 |
740
741
  | `group.changed` | 群组事件 |
742
+ | `group.message_recalled` | 群消息撤回 |
741
743
  | `group.message_undecryptable` | 群 E2EE 解密失败 |
744
+ | `sync.started` / `sync.progress` / `sync.stopped` | Pull 同步生命周期 |
742
745
  | `delivery.changed` | SDK 本地批量交付完成通知,用于合并应用层 UI 刷新 |
743
746
  | `push.offline_message` | Push Server 收到离线唤醒批次;普通终端无需订阅 |
744
747
  | `storage.object_changed` | Storage 对象变更事件透传 |
@@ -777,6 +780,62 @@ sub.unsubscribe()
777
780
 
778
781
  `delivery.changed` 只表示 UI 刷新时机,不是消息明细或持久化账本。应用仓库仍应按照原消息事件的 `(namespace, message_id)` 做幂等,并按 `seq` 排序。
779
782
 
783
+ ### 消息来源 `source`
784
+
785
+ 消息、群消息、群事件、撤回和不可解密事件的 payload 可能带有顶层 `source`,用于区分 SDK 的投递来源:
786
+
787
+ | `source` | 含义 |
788
+ |----------|------|
789
+ | `push` | 普通实时推送 |
790
+ | `pull` | Pull、Tail、Forward 或群事件补洞 |
791
+ | `inline_push` | 已在连续窗口内直接消费的实时载荷 |
792
+ | `pending_retry` | 缺失 Sender IK 后延迟恢复的消息 |
793
+
794
+ 直接由应用或无来源内部调用产生的事件不强行添加 `source`。`source` 位于应用事件 payload 顶层,不改变业务 `payload` 内的数据结构;应用应将其视为保留字段。
795
+
796
+ ### Pull 同步生命周期
797
+
798
+ 四个 SDK 均通过本地 dispatcher 发布以下异步生命周期事件;它们不是 Gateway 的 `event/...` 消息,应用 handler 不会阻塞网络 reader。
799
+
800
+ `sync.started` 在本次 Pull 的第一个 namespace 开始时发布一次:
801
+
802
+ ```json
803
+ {
804
+ "run_id": 7,
805
+ "source": "pull",
806
+ "syncing": true,
807
+ "namespaces_pending": 1,
808
+ "namespace": "p2p",
809
+ "received_total": 0,
810
+ "started_at": 1730000000000
811
+ }
812
+ ```
813
+
814
+ 每完成一页消息或群事件的处理、提交和有序投递,发布一次 `sync.progress`。`page_raw_count` 是本页有效原始条数,`page_pulled_count` 是本页实际投递条数;`pulled_count` / `received_total` 是本次 namespace 的累计投递数。服务端返回合法非负整数时透传 `remaining`,并同步设置 `estimated_remaining`;否则仅在协议可推导时提供估算值。
815
+
816
+ ```json
817
+ {
818
+ "run_id": 7,
819
+ "source": "pull",
820
+ "namespace": "p2p",
821
+ "page": 2,
822
+ "page_raw_count": 50,
823
+ "page_pulled_count": 48,
824
+ "pulled_count": 98,
825
+ "received_total": 98,
826
+ "batch_size": 48,
827
+ "has_more": true,
828
+ "remaining": 102,
829
+ "estimated_remaining": 102
830
+ }
831
+ ```
832
+
833
+ 当所有 namespace、续页、gap fill、ordered drain 和延迟 Sender IK 任务均排空时发布一次 `sync.stopped`。正常终态使用 `reason: "pull_drained"`;异常、取消、断线或连接/身份代次失效使用 `reason: "aborted"`。`sync.stopped` 描述同步生命周期终点,`delivery.changed(trigger="pull_drained")` 只汇总实际投递变化;空 Pull 可以有前者而没有后者。
834
+
835
+ ### JS/TS Worker 降级
836
+
837
+ JavaScript 浏览器 SDK 的 Worker 是网络隔离增强:`new Worker()` 同步失败、CSP `worker-src` 阻止、Worker 启动后未及时 `open` 或异步崩溃时,SDK 会销毁 Worker 并回退原生 WebSocket。TypeScript Node.js SDK 在 `worker_threads` 不可用、启动超时或 Network Actor 崩溃时回退本地 transport。两种降级均保留异步 dispatcher 和 Pull 生命周期语义,不要求应用改变消息处理代码。
838
+
780
839
  ---
781
840
 
782
841
  ## E2EE 高级 API
@@ -29,7 +29,12 @@
29
29
 
30
30
  | 方法 | 说明 |
31
31
  |------|------|
32
- | [group.add_member](#groupadd_member) | 添加成员 |
32
+ | [group.add_member](#groupadd_member) | 添加成员 |
33
+ | [group.invite_member](#groupinvite_member) | 创建定向邀请 |
34
+ | [group.list_my_invites](#grouplist_my_invites) | 列出我的定向邀请 |
35
+ | [group.accept_invite](#groupaccept_invite) | 接受定向邀请 |
36
+ | [group.reject_invite](#groupreject_invite) | 拒绝定向邀请 |
37
+ | [group.revoke_invite](#grouprevoke_invite) | 撤回定向邀请 |
33
38
  | [group.get_members](#groupget_members) | 获取成员列表 |
34
39
  | [group.kick](#groupkick) | 踢出成员 |
35
40
  | [group.leave](#groupleave) | 主动退群 |
@@ -396,7 +401,7 @@ SDK 发起 `group.*` 调用时会把传入的 `group_id` / `groupId` / `group_ai
396
401
 
397
402
  ### group.add_member
398
403
 
399
- 添加成员。需要 admin 及以上权限。若设置 `role=admin`,需要 owner 权限。
404
+ 添加成员。需要 **owner** 权限;普通指定 AID 入群应使用 `group.invite_member`。若设置 `role=admin`,仍需 owner 权限。
400
405
 
401
406
  **参数**:
402
407
 
@@ -1914,6 +1919,28 @@ SDK 交付给应用层的 `payload` 是明文业务 JSON 对象;群消息信
1914
1919
  }
1915
1920
  ```
1916
1921
 
1922
+ ### group.invite_member
1923
+
1924
+ 创建指定 AID 的待处理邀请,不写入正式成员表。公开群允许任意正式成员,非公开群仅 owner/admin;同一群、目标和邀请者重复调用幂等返回原记录。
1925
+
1926
+ **参数**:`group_id`、`aid`(或 `invitee_aid`)必填;`member_type` 可选(`human` / `ai`,默认 `human`)。
1927
+
1928
+ ### group.list_my_invites
1929
+
1930
+ 列出当前认证 AID 收到的待处理邀请,按群和目标 AID 聚合;支持 `page`、`size` 分页参数。
1931
+
1932
+ ### group.accept_invite
1933
+
1934
+ 被邀请 AID 以 `invite_id` 接受聚合邀请;成功后才原子写入正式成员表。
1935
+
1936
+ ### group.reject_invite
1937
+
1938
+ 被邀请 AID 以 `invite_id` 拒绝聚合邀请,不写入正式成员表。
1939
+
1940
+ ### group.revoke_invite
1941
+
1942
+ 原邀请发出者以 `invite_id` 撤回自己的待处理邀请。撤回、接受、拒绝和过期是互斥终态转换。
1943
+
1917
1944
  该事件不是服务端 `event/group.*`。多个群和 P2P 的 Pull 共用当前 `AUNClient` 的全局排空边界,因此一次 `pull_drained` 可以包含多个 `group:<canonical-group-aid>` 和 `p2p` 变更;有效 Push / Inline Push 则在原群消息事件处理完成后实时通知。完整 payload、折叠和零通知条件见 [06-API手册:delivery.changed](06-API手册.md#deliverychanged)。
1918
1945
 
1919
1946
  ### event/group.message_recalled
@@ -32,7 +32,7 @@ Group FS 的 `group.fs.*` RPC、`client.group.fs.*` 门面、`aun group fs` CLI
32
32
  - E2EE:默认加密、ProtectedHeaders、P2P / Group V2
33
33
  - RPC 与事件:`client.call()`、`client.on()`、`client.notify()`、RPC 手册
34
34
  - 离线推送:Python `connect()` 的 `push_notify_aid/push_token`、`client.push.register/unregister`、Push Server ACK
35
- - 消息同步:A/T/H、Tail、Forward、History、页内唯一有序发布、应用层跨页幂等排序、每个 AUNClient 一个 Pull Gate(P2P Message/Group Message/Group Event Pull 共享,始终单飞、相同 key 折叠、不同 key 排队、前台 FIFO 优先)、缺 sender IK 有界同步 bootstrap、永久页内 Gap、坏密文推进
35
+ - 消息同步:A/T/H、Tail、Forward、History、页内唯一有序发布、应用层跨页幂等排序、每个 AUNClient 一个 Pull Gate(P2P Message/Group Message/Group Event Pull 共享,始终单飞、相同 key 折叠、不同 key 排队、前台 FIFO 优先)、`source` 来源、`sync.started/progress/stopped` 生命周期、缺 sender IK 有界同步 bootstrap、永久页内 Gap、坏密文推进
36
36
  - Storage:SDK VFS、direct backend 数据面、下载 ticket / AID Bearer 边界、`storage.*` low-level RPC、类 Linux 权限、mount/symlink、Storage Service 分层
37
37
  - Group RPC:群提及过滤 `mention_mode`、`group_aid` / `group_id` 兼容、`group.index` 签名索引、`_meta.group_indexes`、`check/get/updateGroupIndex`、`expected_index_etag` CAS(见 `09-group-rpc-manual.md`、`06-API手册.md`)
38
38
  - 群文件系统:`group.fs.*`、`client.group.fs.*`、`aun group fs`、`cp/mv` 上传下载、群自有区角色 ACL 与 `group_aid` 签名、`parents`、JS string 差异和 memberdata 服务端映射(见 `09-group-rpc-manual.md`)
@@ -55,7 +55,7 @@ Group FS 的 `group.fs.*` RPC、`client.group.fs.*` 门面、`aun group fs` CLI
55
55
  | 03 | [核心概念](03-核心概念.md) | AID、A/T/H、Pull Gate、状态机、E2EE |
56
56
  | 04 | [连接与认证](04-连接与认证.md) | AIDStore、默认 agent.md 自动上传、连接生命周期并发/取消、当前 access token getter、网关发现、事件、agent.md 校验和自动观察 |
57
57
  | 05 | [E2EE加密通信](05-E2EE加密通信.md) | E2EE V2、ProtectedHeaders、agent.md 版本提示、recipient wrap |
58
- | 06 | [API手册](06-API手册.md) | AIDStore / Agent.md 校验签名 / AID / AUNClient 生命周期并发 / 四 SDK access token getter / 群组高层身份编排 / History 门面 / 事件 / RPC |
58
+ | 06 | [API手册](06-API手册.md) | AIDStore / Agent.md 校验签名 / AID / AUNClient 生命周期并发 / 四 SDK access token getter / 群组高层身份编排 / History 门面 / 消息来源与 Pull 同步生命周期 / 事件 / RPC |
59
59
  | 07 | [错误处理](07-错误处理.md) | Result、异常、错误码、重试 |
60
60
  | 08 | [最佳实践](08-最佳实践.md) | 幂等、消息同步/History、AUNClient 级 Pull Gate(始终单飞)、测试数据 |
61
61
  | - | [Storage RPC 手册](09-storage-rpc-manual.md) | Storage RPC、数据面 HTTP 下载流程、ticket / AID Bearer 边界、跨 issuer 下载 |
@@ -80,6 +80,7 @@ Group FS 的 `group.fs.*` RPC、`client.group.fs.*` 门面、`aun group fs` CLI
80
80
  | 查方法签名、群组高层 facade 和 `aid_store` / `aidStore` | [06-API手册](06-API手册.md) |
81
81
  | 查消息或群组 RPC、群提及过滤 `mention_mode` | 对应 `09-*-rpc-manual.md`;`mention_mode` 详见 [09-group-rpc-manual.md](09-group-rpc-manual.md) |
82
82
  | 查 A/T/H、SDK 自动最新页同步与 AUNClient 级 Pull Gate | [03-核心概念.md](03-核心概念.md)、[08-最佳实践.md](08-最佳实践.md)、[09-message-rpc-manual.md](09-message-rpc-manual.md)、[09-group-rpc-manual.md](09-group-rpc-manual.md) |
83
+ | 查消息事件 `source`、`sync.started/progress/stopped` 和 `delivery.changed` | [06-API手册](06-API手册.md) |
83
84
  | 查 History、Forward、Pull Gate、Group 成员可见性 floor 与 Piggy ACK | [09-message-rpc-manual.md](09-message-rpc-manual.md)、[09-group-rpc-manual.md](09-group-rpc-manual.md) |
84
85
  | 查群组标识 `group_aid` / `group_id` 兼容规范 | [09-group-rpc-manual.md](09-group-rpc-manual.md) |
85
86
  | 查 group.index 签名索引、版本观察、不同步判断、CAS 更新和 facade | [03-核心概念.md](03-核心概念.md)、[06-API手册.md](06-API手册.md)、[09-group-rpc-manual.md](09-group-rpc-manual.md)、[08-最佳实践.md](08-最佳实践.md) |
@@ -15,7 +15,7 @@
15
15
  | [04-连接与认证](04-连接与认证.md) | 注册加载 · 认证连接 · 当前 access token getter · Python Push 自动登记 · 网关发现 · 事件 · agent.md 自动观察 |
16
16
  | [05-E2EE加密通信](05-E2EE加密通信.md) | E2EE V2 消息 · ProtectedHeaders · agent.md 版本提示 · recipient wrap |
17
17
  | [E2EE_V2消息通信时序图](E2EE_V2消息通信时序图.md) | V2 P2P/GROUP 明文与加密主链路 |
18
- | [06-API手册](06-API手册.md) | AIDStore · AID · AUNClient · 四 SDK access token getter · Python PushFacade · Message/Group History 门面 · 事件 · E2EE 高级 API · RPC 索引 |
18
+ | [06-API手册](06-API手册.md) | AIDStore · AID · AUNClient · 四 SDK access token getter · Python PushFacade · Message/Group History 门面 · 消息来源与 Pull 同步生命周期 · 事件 · E2EE 高级 API · RPC 索引 |
19
19
  | [07-错误处理](07-错误处理.md) | Result · 错误类层级 · 错误码 · 重试 |
20
20
  | [08-最佳实践](08-最佳实践.md) | 幂等连接 · 消息同步/History · AUNClient 级 Pull Gate(始终单飞)· group.index · 测试数据保护 |
21
21
  | [09-payload-reference](09-payload-reference.md) | message / group / thought payload 格式 |
@@ -50,6 +50,7 @@
50
50
  - 九态状态机、device_id / slot_id 隔离键 → [03-核心概念](03-核心概念.md)
51
51
  - `connect()` 选项、长短连接、网关发现 → [04-连接与认证](04-连接与认证.md)
52
52
  - capability getter、事件、生命周期 API → [06-API手册](06-API手册.md)
53
+ - 消息事件 `source`、`sync.started/progress/stopped`、`delivery.changed` → [06-API手册](06-API手册.md)
53
54
  - Capabilities 能力声明、`inline_realtime_payload_v1` 实时推送优化 → [02-WebSocket协议](02-WebSocket协议.md)、[CHANGELOG-0.5.6](CHANGELOG-0.5.6.md)
54
55
  - 裸 WebSocket 握手 → [02-WebSocket协议](02-WebSocket协议.md)
55
56