@agentunion/fastaun-browser 0.5.3 → 0.5.6
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 +130 -56
- package/_packed_docs/AUN/347/246/273/347/272/277/346/216/250/351/200/201/346/216/245/345/205/245/344/270/216/346/274/224/347/244/272/346/214/207/345/215/227.md +290 -0
- package/_packed_docs/AUN/347/246/273/347/272/277/346/216/250/351/200/201/346/234/215/345/212/241/346/236/266/346/236/204/344/270/216/350/257/246/347/273/206/345/256/236/347/216/260/350/256/241/345/210/222-codex.md +994 -0
- package/_packed_docs/AUN/347/246/273/347/272/277/346/216/250/351/200/201/346/234/215/345/212/241/350/277/220/347/273/264/344/270/216/345/217/221/345/270/203/346/214/207/345/215/227.md +144 -0
- package/_packed_docs/CHANGELOG.md +130 -56
- package/_packed_docs/INDEX.md +127 -69
- package/_packed_docs/KITE_DOCS_GUIDE.md +63 -29
- package/_packed_docs/audit/AUN/346/234/215/345/212/241Go/345/214/226/351/207/215/346/236/204/347/262/276/347/273/206/345/214/226/346/272/220/347/240/201/345/256/241/346/237/245-20260718.md +366 -0
- package/_packed_docs/aun/345/205/254/347/275/221/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +227 -0
- package/_packed_docs/aun/345/210/206/345/270/203/345/274/217/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +1004 -0
- package/_packed_docs/aun/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +999 -0
- package/_packed_docs/cli/CLI/346/211/213/345/206/214.md +6 -4
- package/_packed_docs/protocol/06-/346/234/215/345/212/241/345/215/217/350/256/256.md +58 -20
- package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +219 -247
- package/_packed_docs/protocol/12-Stream-/345/255/220/345/215/217/350/256/256.md +14 -14
- package/_packed_docs/protocol/13-Agent/350/241/214/344/270/272/350/247/204/350/214/203.md +3 -3
- package/_packed_docs/protocol/15-/347/246/273/347/272/277/346/216/250/351/200/201/351/200/232/347/237/245/345/215/217/350/256/256.md +165 -421
- package/_packed_docs/protocol/README.md +1 -0
- package/_packed_docs/protocol/aun-docs-guide.md +7 -4
- package/_packed_docs/protocol/index.md +25 -19
- package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +62 -17
- package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +22 -0
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +67 -78
- package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +6 -2
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +87 -41
- package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +18 -5
- package/_packed_docs/sdk/09-group-rpc-manual.md +307 -267
- package/_packed_docs/sdk/09-message-rpc-manual.md +142 -103
- package/_packed_docs/sdk/09-payload-reference.md +1 -1
- package/_packed_docs/sdk/09-stream-rpc-manual.md +8 -8
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +26 -17
- package/_packed_docs/sdk/INDEX.md +42 -34
- package/_packed_docs/sdk/README.md +7 -6
- package/_packed_docs//346/266/210/346/201/257/345/220/214/346/255/245/344/270/216/345/216/206/345/217/262/346/213/211/345/217/226/344/273/243/347/240/201/345/256/241/346/237/245/351/227/256/351/242/230/346/270/205/345/215/225.md +229 -0
- package/_packed_docs//346/266/210/346/201/257/345/220/214/346/255/245/344/270/216/345/216/206/345/217/262/346/213/211/345/217/226/346/224/271/351/200/240/346/226/271/346/241/210.md +750 -0
- package/dist/agent-md.d.ts +4 -5
- package/dist/agent-md.d.ts.map +1 -1
- package/dist/agent-md.js +66 -43
- package/dist/agent-md.js.map +1 -1
- package/dist/aid-store.d.ts +2 -6
- package/dist/aid-store.d.ts.map +1 -1
- package/dist/aid-store.js +20 -14
- package/dist/aid-store.js.map +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +30 -11
- package/dist/auth.js.map +1 -1
- package/dist/bundle.js +3399 -1069
- package/dist/client/delivery.d.ts +75 -8
- package/dist/client/delivery.d.ts.map +1 -1
- package/dist/client/delivery.js +1419 -245
- package/dist/client/delivery.js.map +1 -1
- package/dist/client/group-state.d.ts.map +1 -1
- package/dist/client/group-state.js +27 -24
- package/dist/client/group-state.js.map +1 -1
- package/dist/client/lifecycle.d.ts.map +1 -1
- package/dist/client/lifecycle.js +48 -4
- package/dist/client/lifecycle.js.map +1 -1
- package/dist/client/mention-mode.d.ts +7 -0
- package/dist/client/mention-mode.d.ts.map +1 -0
- package/dist/client/mention-mode.js +184 -0
- package/dist/client/mention-mode.js.map +1 -0
- package/dist/client/peers.d.ts +1 -1
- package/dist/client/peers.d.ts.map +1 -1
- package/dist/client/peers.js +26 -3
- package/dist/client/peers.js.map +1 -1
- package/dist/client/rpc-pipeline.d.ts +22 -1
- package/dist/client/rpc-pipeline.d.ts.map +1 -1
- package/dist/client/rpc-pipeline.js +309 -74
- package/dist/client/rpc-pipeline.js.map +1 -1
- package/dist/client/v2-e2ee.d.ts +25 -2
- package/dist/client/v2-e2ee.d.ts.map +1 -1
- package/dist/client/v2-e2ee.js +606 -97
- package/dist/client/v2-e2ee.js.map +1 -1
- package/dist/client.d.ts +24 -5
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +404 -215
- package/dist/client.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +4 -1
- package/dist/errors.js.map +1 -1
- package/dist/facades.d.ts +6 -0
- package/dist/facades.d.ts.map +1 -1
- package/dist/facades.js +199 -104
- package/dist/facades.js.map +1 -1
- package/dist/group-index.d.ts +6 -1
- package/dist/group-index.d.ts.map +1 -1
- package/dist/group-index.js +44 -25
- package/dist/group-index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/keystore/index.d.ts +10 -5
- package/dist/keystore/index.d.ts.map +1 -1
- package/dist/keystore/indexeddb-identity-store.d.ts +0 -12
- package/dist/keystore/indexeddb-identity-store.d.ts.map +1 -1
- package/dist/keystore/indexeddb-identity-store.js +0 -60
- package/dist/keystore/indexeddb-identity-store.js.map +1 -1
- package/dist/keystore/indexeddb-shared.d.ts.map +1 -1
- package/dist/keystore/indexeddb-shared.js +9 -5
- package/dist/keystore/indexeddb-shared.js.map +1 -1
- package/dist/keystore/indexeddb-token-store.d.ts +3 -1
- package/dist/keystore/indexeddb-token-store.d.ts.map +1 -1
- package/dist/keystore/indexeddb-token-store.js +47 -2
- package/dist/keystore/indexeddb-token-store.js.map +1 -1
- package/dist/register-flow.d.ts.map +1 -1
- package/dist/register-flow.js +28 -3
- package/dist/register-flow.js.map +1 -1
- package/dist/seq-tracker.d.ts +28 -8
- package/dist/seq-tracker.d.ts.map +1 -1
- package/dist/seq-tracker.js +218 -61
- package/dist/seq-tracker.js.map +1 -1
- package/dist/storage/vfs.d.ts +1 -0
- package/dist/storage/vfs.d.ts.map +1 -1
- package/dist/storage/vfs.js +26 -2
- package/dist/storage/vfs.js.map +1 -1
- package/dist/tools/cross-sdk-agent.js +376 -10
- package/dist/tools/cross-sdk-agent.js.map +1 -1
- package/dist/transport.d.ts +12 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +218 -101
- package/dist/transport.js.map +1 -1
- package/dist/v2/session/session.d.ts.map +1 -1
- package/dist/v2/session/session.js +3 -4
- package/dist/v2/session/session.js.map +1 -1
- package/dist/v2/state/commitment.d.ts.map +1 -1
- package/dist/v2/state/commitment.js +1 -2
- package/dist/v2/state/commitment.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +6 -5
- package/dist/group-resources.d.ts +0 -98
- package/dist/group-resources.d.ts.map +0 -1
- package/dist/group-resources.js +0 -635
- package/dist/group-resources.js.map +0 -1
- package/dist/keystore/indexeddb.d.ts +0 -179
- package/dist/keystore/indexeddb.d.ts.map +0 -1
- package/dist/keystore/indexeddb.js +0 -2031
- package/dist/keystore/indexeddb.js.map +0 -1
- package/dist/namespaces/auth.d.ts +0 -98
- package/dist/namespaces/auth.d.ts.map +0 -1
- package/dist/namespaces/auth.js +0 -992
- package/dist/namespaces/auth.js.map +0 -1
- package/dist/namespaces/custody.d.ts +0 -51
- package/dist/namespaces/custody.d.ts.map +0 -1
- package/dist/namespaces/custody.js +0 -302
- package/dist/namespaces/custody.js.map +0 -1
- package/dist/namespaces/meta.d.ts +0 -109
- package/dist/namespaces/meta.d.ts.map +0 -1
- package/dist/namespaces/meta.js +0 -549
- package/dist/namespaces/meta.js.map +0 -1
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# AUN 离线推送服务运维与发布指南
|
|
2
|
+
|
|
3
|
+
本文档定义 Push Service V1 的发布门、运行诊断、灰度和回滚。协议语义以 `docs/superpowers/契约冻结-v3-to-v4.md` 为准,架构说明见 `docs/superpowers/specs/2026-07-24-push-service-design-v3.md`,实施范围见 v4 计划。
|
|
4
|
+
|
|
5
|
+
## 1. 当前发布结论
|
|
6
|
+
|
|
7
|
+
- 隔离 PoC 可以运行;生产发布仍被 token 安全门硬阻断。
|
|
8
|
+
- 明文 push token 只允许隔离 PoC。生产环境必须使用可信加密与密钥管理,未满足时服务应拒绝启动,而不是降级运行。
|
|
9
|
+
- V1 不转发 `push.offline_message` 到 federation。当前跨域 federation 验收未执行,不得标记为通过。
|
|
10
|
+
- Message/Group 的消息成功语义不依赖 Push Service;推送停用或故障不应改变消息主链结果。
|
|
11
|
+
|
|
12
|
+
## 2. 发布前强制门
|
|
13
|
+
|
|
14
|
+
每次构建或配置变更后必须重新执行以下门禁:
|
|
15
|
+
|
|
16
|
+
1. 六项冻结契约及 Push、Gateway、Message、Group、Launcher 关联回归全部通过。
|
|
17
|
+
2. 本地 P2P、Group、多设备、在线抑制、聚合、频控、ACK、响应丢失与 dedup、timeout、恢复、迁移和优雅关闭证据完整。
|
|
18
|
+
3. 日志文件和相关容器 stdout/stderr 的敏感信息扫描为零命中。
|
|
19
|
+
4. 容量、公平性、batch 数量、事件字节上限和 `max_inflight_per_server` 自动化测试通过。
|
|
20
|
+
5. 固定身份材料只读复用;不得删除、重建或修改既有身份和数据库。
|
|
21
|
+
6. 生产 token 加密门满足;否则只能发布到隔离 PoC。
|
|
22
|
+
|
|
23
|
+
任何未解释失败、环境缺失或未执行项都必须明确记录,不能用 mock 或空桩替代真实证据。
|
|
24
|
+
|
|
25
|
+
## 3. 运行依赖与启动判定
|
|
26
|
+
|
|
27
|
+
Push Service 依赖:
|
|
28
|
+
|
|
29
|
+
- Kernel 生命周期连接;
|
|
30
|
+
- `aun_push` 数据库及已完成的版本化 migration;
|
|
31
|
+
- 唯一可用 Gateway 的 discovery、service-plane attach 和 heartbeat;
|
|
32
|
+
- 有效且受保护的诊断凭据。
|
|
33
|
+
|
|
34
|
+
状态含义:
|
|
35
|
+
|
|
36
|
+
| 状态 | 运维判断 |
|
|
37
|
+
| --- | --- |
|
|
38
|
+
| `healthy` | migration、数据库、Gateway attach 和 runtime 均已就绪 |
|
|
39
|
+
| `waiting` | 尚未完成首次就绪,常见于零 Gateway 或初始化中 |
|
|
40
|
+
| `blocked` | 发现多个可用 Gateway 等违反 V1 唯一性约束的条件 |
|
|
41
|
+
| `degraded` | 曾经就绪,但数据库、Gateway 或调度运行出现故障 |
|
|
42
|
+
| `draining` | 已拒绝新变更请求,仍保留 ACK 通道并等待 in-flight 收敛 |
|
|
43
|
+
|
|
44
|
+
服务不得在 migration 失败、Gateway 数量非法或依赖未就绪时伪装为 `healthy`。
|
|
45
|
+
|
|
46
|
+
## 4. 诊断入口
|
|
47
|
+
|
|
48
|
+
内部诊断端点使用 Bearer 认证,只允许集群私网访问:
|
|
49
|
+
|
|
50
|
+
- `/internal/diagnostics/health`
|
|
51
|
+
- `/internal/diagnostics/status`
|
|
52
|
+
- `/internal/diagnostics/metrics`
|
|
53
|
+
- `/internal/diagnostics/capabilities`
|
|
54
|
+
|
|
55
|
+
`status.business` 给出候选队列深度、in-flight、最老候选等待时间,以及最近一次调度、维护和存储快照状态。
|
|
56
|
+
|
|
57
|
+
`metrics` 的核心分组:
|
|
58
|
+
|
|
59
|
+
| 分组 | 主要用途 |
|
|
60
|
+
| --- | --- |
|
|
61
|
+
| `rpc` | register、unregister、enqueue、ack 的调用量、结果、错误码和延迟 |
|
|
62
|
+
| `scheduler` | claim、计划、batch、dispatch、dedup、timeout、恢复、in-flight、事件字节和迭代耗时 |
|
|
63
|
+
| `scheduler_outcomes_total` | 在线抑制、无 registration、频控、过期、Gateway 未知和永久拒绝等原因计数 |
|
|
64
|
+
| `maintenance` | registration 失效、candidate 过期和终态数据清理结果 |
|
|
65
|
+
| `storage` | candidate、delivery、batch 状态计数、队列深度、in-flight 和最老候选等待时间 |
|
|
66
|
+
|
|
67
|
+
存储状态快照默认每 5 秒采样一次,因此用于趋势、告警和故障定位,不是事务级实时读数。指标只包含计数、耗时和受控状态,不包含 AID、token、消息内容或 payload。
|
|
68
|
+
|
|
69
|
+
## 5. 告警判断
|
|
70
|
+
|
|
71
|
+
优先处理以下信号:
|
|
72
|
+
|
|
73
|
+
- `lifecycle_state` 为 `blocked`、`degraded` 或长期 `waiting`;
|
|
74
|
+
- `storage.candidate_queue_depth` 持续增长,且 `oldest_candidate_age_ms` 接近 candidate TTL;
|
|
75
|
+
- `scheduler.inflight_batches` 长期不下降,或 `timeouts_total` 连续增长;
|
|
76
|
+
- `scheduler_outcomes_total.online_unknown`、`push_server_unknown` 或 `gateway_result_unknown` 持续增长;
|
|
77
|
+
- `rpc.errors_by_code` 中 timeout、unavailable 或 conflict 异常增长;
|
|
78
|
+
- `maintenance.errors_total` 增长或存储快照长时间不更新;
|
|
79
|
+
- Message/Group 候选队列出现满、TTL 丢弃或 drain 超时日志。
|
|
80
|
+
|
|
81
|
+
排障时按 candidate → delivery → batch → Gateway connection 的关联标识查日志;不得为了诊断打开 token 或消息正文日志。
|
|
82
|
+
|
|
83
|
+
## 6. 性能与容量基线
|
|
84
|
+
|
|
85
|
+
2026-07-26 Windows amd64 基线,512 个候选、4 个 Push Server、每目标 1 个 delivery:
|
|
86
|
+
|
|
87
|
+
| 指标 | 结果 |
|
|
88
|
+
| --- | ---: |
|
|
89
|
+
| 三轮五次规划 P95 | 3.7478–5.7713 ms;中位 4.3937 ms |
|
|
90
|
+
| benchmark | 3.424612–4.595007 ms/op;中位 3.667848 ms/op |
|
|
91
|
+
| 内存 | 4,960,258–4,960,760 B/op |
|
|
92
|
+
| 分配 | 28,954–28,956 allocs/op |
|
|
93
|
+
|
|
94
|
+
自动灾难性退化门为 512 候选规划 P95 不超过 2 秒。该基线只覆盖内存调度规划,不代表数据库、Gateway、移动推送平台或公网端到端吞吐。
|
|
95
|
+
|
|
96
|
+
容量配置必须同时满足:
|
|
97
|
+
|
|
98
|
+
- 单批 delivery 数量和事件字节上限;
|
|
99
|
+
- 每 Push Server 最大 in-flight;
|
|
100
|
+
- 全局、Push Server 和目标频控;
|
|
101
|
+
- registration/candidate TTL、ACK timeout、重试上限和终态保留;
|
|
102
|
+
- 同一 Push Server 内目标公平轮询,以及不同 Push Server 间公平轮询。
|
|
103
|
+
|
|
104
|
+
## 7. 安全与身份材料
|
|
105
|
+
|
|
106
|
+
- 普通日志、归档日志、crash JSON 和容器输出均必须经过敏感信息扫描。
|
|
107
|
+
- token 只允许记录不可逆短指纹;Bearer、seed、私钥和消息内容不得进入诊断或日志。
|
|
108
|
+
- Launcher 启动环境摘要必须按变量名统一脱敏 token、password、secret、HMAC、seed、key、DSN,以及带用户信息的 URL。
|
|
109
|
+
- Docker Push Server 服务身份使用只读 PEM 证书和私钥,不需要 SDK seed。
|
|
110
|
+
- SDK `key.json` 身份的 seed 在构造 `AIDStore` 或对应身份存储时显式传入;正常运行和身份目录复制不读取 `.seed` 文件。
|
|
111
|
+
- SDK 不提供 `.seed` 文件读取或迁移入口;轮换 seed 时必须显式提供当前与新的 seed_password。
|
|
112
|
+
|
|
113
|
+
## 8. 隔离 PoC 灰度
|
|
114
|
+
|
|
115
|
+
1. 先以 `AUN_PUSH_ENABLED=false` 部署镜像并完成 migration、诊断和三中心纳管检查。
|
|
116
|
+
2. 只接入隔离 Mock Push Server 和授权的测试安装,不接真实生产 token。
|
|
117
|
+
3. 使用较低的 batch、频控和 in-flight 上限启用 Push Service。
|
|
118
|
+
4. 再分别开启 `AUN_MESSAGE_OFFLINE_PUSH_ENABLED`、`AUN_GROUP_OFFLINE_PUSH_ENABLED`,观察候选队列、在线抑制、ACK、timeout 和清理指标。
|
|
119
|
+
5. 扩大覆盖前必须确认消息主链结果不受推送故障影响,且日志扫描仍为零命中。
|
|
120
|
+
|
|
121
|
+
在可信 token 加密完成前,不存在生产灰度路径。
|
|
122
|
+
|
|
123
|
+
Mock Push Server 使用修改后的 Python SDK 作为普通长连接客户端。SDK 自身仍把认证类终止 close code(包括 4008)视为停止自动重连;Mock 的常驻进程只在 SDK 已结束内部重连且处于离线终态后,由应用层守护重新调用 `connect()`。这是测试工具的恢复策略,不改变公共 SDK 重连契约。
|
|
124
|
+
|
|
125
|
+
## 9. 回滚
|
|
126
|
+
|
|
127
|
+
回滚顺序:
|
|
128
|
+
|
|
129
|
+
1. 先关闭 `AUN_MESSAGE_OFFLINE_PUSH_ENABLED` 和 `AUN_GROUP_OFFLINE_PUSH_ENABLED`,停止产生新候选。
|
|
130
|
+
2. 等待生产者候选队列 drain;超时项按既定允许丢失边界记录指标和日志。
|
|
131
|
+
3. 将 `AUN_PUSH_ENABLED=false`,让 Push Service 进入可管理的停用模式并完成优雅关闭。
|
|
132
|
+
4. 如需回退镜像,在服务停用后执行;保留 `aun_push` schema 和数据,不做逆向 migration、清表或身份重建。
|
|
133
|
+
5. 回滚后验证 Message/Group 发送、pull 和 ack 主链正常。
|
|
134
|
+
|
|
135
|
+
Push 是辅助唤醒链路,回滚不得触碰消息正文、SDK 固定身份或既有 AID 数据。
|
|
136
|
+
|
|
137
|
+
## 10. 已知限制
|
|
138
|
+
|
|
139
|
+
- V1 只支持单 Push Service、单可用 Gateway 和批次级 ACK。
|
|
140
|
+
- `push.offline_message` 不跨 federation;跨域验收当前未执行。
|
|
141
|
+
- Push Service 不直接调用 APNs/FCM,移动平台适配属于 Push Server 职责。
|
|
142
|
+
- 明文 token 仅限隔离 PoC,生产发布仍被硬阻断。
|
|
143
|
+
- 诊断存储快照是周期采样;瞬时值应结合 Scheduler 日志和持久状态判断。
|
|
144
|
+
- 当前性能数字是调度规划微基准,不替代真实数据库和公网容量测试。
|
|
@@ -6,75 +6,149 @@
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
## 0.5.
|
|
9
|
+
## 0.5.6 — 2026-08-13
|
|
10
10
|
|
|
11
11
|
### 新功能
|
|
12
12
|
|
|
13
|
-
####
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
- 入口导出 `GROUP_INDEX_KEY`、`GROUP_INDEX_SCHEMA`、`GroupIndexMetaCache`、`buildSignedGroupIndex`、`verifyGroupIndex`、`prepareGroupSettingsWithIndex` 等 group.index API。
|
|
13
|
+
#### V2 消息窗口与实时推送
|
|
14
|
+
- 完成 `tail` / `forward` / `history` 消息窗口、IndexedDB seq 状态持久化和 pull gate 调度,统一 P2P 与群消息的补洞、确认和有序投递。
|
|
15
|
+
- 连接认证时声明 `inline_realtime_payload_v1`;实时事件优先使用内联消息载荷,离线或不完整事件继续通过 pull 回退。
|
|
16
|
+
- 对齐 Message/Group self-sync 与 bootstrap 契约,补齐浏览器多设备同步状态处理。
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
#### 群消息提及过滤
|
|
19
|
+
- 新增 `mention_mode` 归一化与投递过滤,兼容 `disabled`、`mention-only` 及历史 `mention_only` 表示。
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
- `message.recalled` 改为专用处理路径,支持 P2P 撤回 tombstone 的有序投递、自动 ack、gap fill 和按原消息标识去重,避免 push / pull 对同一次撤回重复回调。
|
|
23
|
-
- 群撤回去重键改为规范化 group id + 原消息 id/seq,忽略 `recalled_at`,并补齐顶层 recall 字段归一化。
|
|
24
|
-
- 群消息 pull / legacy fallback 识别 `group.message_recalled` tombstone,避免把撤回通知作为普通群消息投递。
|
|
25
|
-
- P2P 与群 push 按 namespace 串行化处理,降低异步解密和投递导致的乱序风险。
|
|
26
|
-
- V2 P2P / Group pull 页内消息按 `seq` 排序后处理,避免服务端返回无序时影响本地 seq 推进。
|
|
21
|
+
### 安全性
|
|
27
22
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
-
|
|
31
|
-
- `getAnnouncement` / `getRules` / `getJoinRequirements` 优先使用 group.index settings cache;`updateAnnouncement` / `updateRules` / `updateJoinRequirements` 改走 `updateGroupIndex`,保持索引与设置同步。
|
|
32
|
-
- cross-sdk JS agent 支持 `sdk.update_group_index` 调用,便于跨 SDK 测试索引化群设置。
|
|
33
|
-
- SDK 包版本、运行时 `VERSION` 和 conformance 期望版本更新为 `0.5.3`。
|
|
34
|
-
|
|
35
|
-
### 测试
|
|
36
|
-
|
|
37
|
-
- 新增 group.index 单元测试,覆盖 hash/etag、签名/验签、settings merge、RPC meta stale/fresh、async meta observer 和 IndexedDB 持久化恢复。
|
|
38
|
-
- 新增 GroupFacade group.index 单元测试,覆盖 CAS 写入、冲突重试、远端索引验签、tamper 拒绝、settings cache 和便利方法索引化写入。
|
|
39
|
-
- 新增浏览器 E2E:验证签名 `group.index` 写入、裸 settings 写入拒绝、CAS 冲突重试和最终 settings 一致性。
|
|
40
|
-
- 扩展撤回投递测试,覆盖 P2P/group recall 顶层字段归一化、push/pull tombstone 去重和有序投递。
|
|
41
|
-
- 更新 group settings 与签名审计 E2E,使公告/群规等索引化 settings 通过 `updateGroupIndex` 写入。
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## 0.5.2 — 2026-07-05
|
|
46
|
-
|
|
47
|
-
### 新功能
|
|
48
|
-
|
|
49
|
-
#### agent.md 元数据
|
|
50
|
-
- 支持从 RPC `_meta.agent_md_etags.group` 和 V2 envelope `agent_md.group` 观察群组 agent.md ETag / Last-Modified,并自动维护群 AID 的本地缓存。
|
|
51
|
-
- 群消息 agent.md 观察逻辑补齐 sender / group 两类来源,提升浏览器端跨设备、跨群消息场景下的版本一致性提示能力。
|
|
52
|
-
|
|
53
|
-
### 修复
|
|
54
|
-
|
|
55
|
-
#### V2 P2P / Group 拉取
|
|
56
|
-
- `message.v2.pull` / `group.v2.pull` 自动 ack 改为通过下一次 pull 的 `ack_up_to_seq` piggyback,减少独立 ack RPC。
|
|
57
|
-
- 修复非满页返回 `has_more=true` 时盲目续拉的问题;满页继续立即拉,非满页仅在有待合并 ack 时追加一页。
|
|
58
|
-
- 过滤 `seq <= after_seq` 的 stale 原始消息,避免重复处理或错误推进 ack。
|
|
59
|
-
- stale 原始页未推进 contiguous seq 时不再发送自动 ack,避免把未真正拉齐的数据误确认。
|
|
23
|
+
- `lookupPeer()` 在内存 peer cache 未命中或指纹不匹配时自动获取并校验证书;支持按签名指纹精确加载历史证书。
|
|
24
|
+
- `group.index` 和 `agent.md` 在下载或更新提交 IndexedDB 缓存前验签;rules、announcement、join requirements 等索引化 settings 逐项校验已签名索引中的 ETag。签名者权限、摘要或内容校验失败时不落盘,也不参与业务读取;已验证缓存的普通读取不重复验签。
|
|
25
|
+
- 修复跨域 Storage 下载的 bearer 隔离,并加固浏览器连接/重连及 Gateway 候选故障转移。
|
|
60
26
|
|
|
61
27
|
### 改进
|
|
62
28
|
|
|
63
|
-
-
|
|
64
|
-
-
|
|
65
|
-
-
|
|
29
|
+
- 收口短 RPC、challenge/response、前置帧和浏览器 transport 竞态;后台补洞/ack 调度不再阻塞前台 RPC。
|
|
30
|
+
- 扩展浏览器 cross-SDK agent 与诊断契约,覆盖消息窗口和 inline realtime 场景;浏览器 SDK 本版本未新增离线 Push facade。
|
|
31
|
+
- 浏览器使用 IndexedDB keystore,不适用文件型 `.seed` 自动迁移;不新增文件型 `change-seed` 命令。
|
|
32
|
+
- SDK 包版本、运行时 `VERSION` 和 conformance 期望版本更新为 `0.5.6`。
|
|
66
33
|
|
|
67
34
|
### 测试
|
|
68
35
|
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
- 扩展 agent.md 和 conformance 测试,覆盖群组 ETag 观察及 0.5.2 版本声明。
|
|
36
|
+
- 新增消息窗口、inline realtime push、mention mode、self-sync/bootstrap、peer identity、group index、`agent.md` 和 IndexedDB/浏览器 E2E 测试。
|
|
37
|
+
- 扩展 cross-SDK contract vectors,覆盖验签后缓存提交和窗口状态一致性。
|
|
72
38
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
39
|
+
## 0.5.5 — 2026-07-14
|
|
40
|
+
|
|
41
|
+
### 维护
|
|
42
|
+
|
|
43
|
+
- SDK 包版本、运行时 `VERSION` 和 conformance 期望版本更新为 `0.5.5`。
|
|
44
|
+
|
|
45
|
+
## 0.5.4 — 2026-07-09
|
|
46
|
+
|
|
47
|
+
### 新功能
|
|
48
|
+
|
|
49
|
+
#### 通用 indexed document settings
|
|
50
|
+
- 浏览器 `GroupFacade` 新增 `getSettingWithIndex()` / `updateSettingWithIndex()`,支持按 `keyName` 管理 `{keyName}.content` 与 `{keyName}.attachments` 两类文档型 indexed settings。
|
|
51
|
+
- `keyName` 增加统一校验:必须匹配 `^[A-Za-z][A-Za-z0-9_-]{0,63}$`,并拒绝 `join`、`group`、`index`、`visibility` 等保留基名。
|
|
52
|
+
- `getAnnouncement()` / `updateAnnouncement()` 与 `getRules()` / `updateRules()` 复用通用 indexed document setting 路径,继续通过 signed `group.index` + `expected_index_etag` CAS 写入。
|
|
53
|
+
|
|
54
|
+
#### 入群要求附件
|
|
55
|
+
- `getJoinRequirements()` / `updateJoinRequirements()` 支持 `attachments`,对应服务端 `join.attachments` indexed setting。
|
|
56
|
+
- `join.attachments` 与公告/群规附件保持同一类 `group.fs` 引用结构,可通过 group.index 签名索引同步。
|
|
57
|
+
|
|
58
|
+
#### Group FS 角色 ACL
|
|
59
|
+
- 服务端 group.fs 命名空间新增受保护 `.group` 控制目录,并为 owner/admin 同步基线角色 ACL。
|
|
60
|
+
- owner/admin 默认可写群自有区;admin 可管理群自有区角色 ACL。
|
|
61
|
+
- `role:member` 支持按具体业务目录授予 `rw`,允许成员创建/上传,但不允许删除、重命名或移动群自有区内容。
|
|
62
|
+
|
|
63
|
+
### 修复
|
|
64
|
+
|
|
65
|
+
- 修复 Storage 直接入口对群自有区删除/移动/重命名权限检查不足的问题,删除类操作统一走 `delete` 权限判定。
|
|
66
|
+
- 修复旧 group AID 证书类型仍为 normal 时,Storage 无法通过 group resolver 判定群空间的问题。
|
|
67
|
+
- 兼容 CA 续期时 PEM 公钥与 SPKI base64 的等价比较,并兼容托管续期返回 `cert_pem` / `new_cert` 字段。
|
|
68
|
+
|
|
69
|
+
### 改进
|
|
70
|
+
|
|
71
|
+
- message/group WAL writer 的 `micro_wait` 支持 auto 预算模型,并扩展性能统计输出,便于观察批量写入队列深度与 pending 状态。
|
|
72
|
+
- group.fs 命名空间在读取 group 记录时支持懒修复,缺失 baseline ACL 时可重试同步。
|
|
73
|
+
- SDK 包版本、运行时 `VERSION` 和 conformance 期望版本更新为 `0.5.4`。
|
|
74
|
+
|
|
75
|
+
### 测试
|
|
76
|
+
|
|
77
|
+
- 扩展浏览器 GroupFacade group index 单元测试,覆盖通用 indexed document setting、`join.attachments` 缓存读取和 group.index 写入路径。
|
|
78
|
+
- 更新 conformance 版本期望到 `0.5.4`。
|
|
79
|
+
- 服务端测试扩展 group settings、group.fs namespace / role ACL、Storage 群自有区权限和 CA 续期兼容性。
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 0.5.3 — 2026-07-07
|
|
84
|
+
|
|
85
|
+
### 新功能
|
|
86
|
+
|
|
87
|
+
#### group.index 索引化群设置
|
|
88
|
+
- 新增浏览器 `group.index` JSONL 工具:支持 canonical entries、body hash、etag、ECDSA P-256 签名/验签,以及将 settings 更新合并为带 `group.index` 的原子写入。
|
|
89
|
+
- `GroupFacade` 新增 `checkGroupIndex` / `getGroupIndex` / `updateGroupIndex`,写入时携带 `expected_index_etag` 做 CAS,并在冲突后重拉索引重试。
|
|
90
|
+
- 浏览器 IndexedDB TokenStore 新增 `group_index_cache`,按 local AID + group AID 持久化 index JSONL、remote meta、本地 etag、settings cache 和 entry etags。
|
|
91
|
+
- 入口导出 `GROUP_INDEX_KEY`、`GROUP_INDEX_SCHEMA`、`GroupIndexMetaCache`、`buildSignedGroupIndex`、`verifyGroupIndex`、`prepareGroupSettingsWithIndex` 等 group.index API。
|
|
92
|
+
|
|
93
|
+
### 修复
|
|
94
|
+
|
|
95
|
+
#### 撤回去重与有序投递
|
|
96
|
+
- `message.recalled` 改为专用处理路径,支持 P2P 撤回 tombstone 的有序投递、自动 ack、gap fill 和按原消息标识去重,避免 push / pull 对同一次撤回重复回调。
|
|
97
|
+
- 群撤回去重键改为规范化 group id + 原消息 id/seq,忽略 `recalled_at`,并补齐顶层 recall 字段归一化。
|
|
98
|
+
- 群消息 pull / legacy fallback 识别 `group.message_recalled` tombstone,避免把撤回通知作为普通群消息投递。
|
|
99
|
+
- P2P 与群 push 按 namespace 串行化处理,降低异步解密和投递导致的乱序风险。
|
|
100
|
+
- V2 P2P / Group pull 页内消息按 `seq` 排序后处理,避免服务端返回无序时影响本地 seq 推进。
|
|
101
|
+
|
|
102
|
+
### 改进
|
|
103
|
+
|
|
104
|
+
- `RPCTransport` 的 `_meta` observer 支持异步回调;RPC 成功响应会等待 observer 完成,事件/通知路径统一走安全的 meta observer 分发。
|
|
105
|
+
- `getAnnouncement` / `getRules` / `getJoinRequirements` 优先使用 group.index settings cache;`updateAnnouncement` / `updateRules` / `updateJoinRequirements` 改走 `updateGroupIndex`,保持索引与设置同步。
|
|
106
|
+
- cross-sdk JS agent 支持 `sdk.update_group_index` 调用,便于跨 SDK 测试索引化群设置。
|
|
107
|
+
- SDK 包版本、运行时 `VERSION` 和 conformance 期望版本更新为 `0.5.3`。
|
|
108
|
+
|
|
109
|
+
### 测试
|
|
110
|
+
|
|
111
|
+
- 新增 group.index 单元测试,覆盖 hash/etag、签名/验签、settings merge、RPC meta stale/fresh、async meta observer 和 IndexedDB 持久化恢复。
|
|
112
|
+
- 新增 GroupFacade group.index 单元测试,覆盖 CAS 写入、冲突重试、远端索引验签、tamper 拒绝、settings cache 和便利方法索引化写入。
|
|
113
|
+
- 新增浏览器 E2E:验证签名 `group.index` 写入、裸 settings 写入拒绝、CAS 冲突重试和最终 settings 一致性。
|
|
114
|
+
- 扩展撤回投递测试,覆盖 P2P/group recall 顶层字段归一化、push/pull tombstone 去重和有序投递。
|
|
115
|
+
- 更新 group settings 与签名审计 E2E,使公告/群规等索引化 settings 通过 `updateGroupIndex` 写入。
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 0.5.2 — 2026-07-05
|
|
120
|
+
|
|
121
|
+
### 新功能
|
|
122
|
+
|
|
123
|
+
#### agent.md 元数据
|
|
124
|
+
- 支持从 RPC `_meta.agent_md_etags.group` 和 V2 envelope `agent_md.group` 观察群组 agent.md ETag / Last-Modified,并自动维护群 AID 的本地缓存。
|
|
125
|
+
- 群消息 agent.md 观察逻辑补齐 sender / group 两类来源,提升浏览器端跨设备、跨群消息场景下的版本一致性提示能力。
|
|
126
|
+
|
|
127
|
+
### 修复
|
|
128
|
+
|
|
129
|
+
#### V2 P2P / Group 拉取
|
|
130
|
+
- `message.v2.pull` / `group.v2.pull` 自动 ack 改为通过下一次 pull 的 `ack_up_to_seq` piggyback,减少独立 ack RPC。
|
|
131
|
+
- 修复非满页返回 `has_more=true` 时盲目续拉的问题;满页继续立即拉,非满页仅在有待合并 ack 时追加一页。
|
|
132
|
+
- 过滤 `seq <= after_seq` 的 stale 原始消息,避免重复处理或错误推进 ack。
|
|
133
|
+
- stale 原始页未推进 contiguous seq 时不再发送自动 ack,避免把未真正拉齐的数据误确认。
|
|
134
|
+
|
|
135
|
+
### 改进
|
|
136
|
+
|
|
137
|
+
- V2 pull 默认/最大 page limit 收敛为 50,并对传入 `limit` 做 1..50 夹取。
|
|
138
|
+
- V2 pull 增加非满页 tail delay:`1000ms / (pulled_messages + 1)`,最大 500ms;满页和空页仍立即结束或续拉。
|
|
139
|
+
- SDK 包版本、运行时 `VERSION` 和 conformance 期望版本更新为 `0.5.2`。
|
|
140
|
+
|
|
141
|
+
### 测试
|
|
142
|
+
|
|
143
|
+
- 扩展 V2 P2P / Group pull 单元测试,覆盖 `ack_up_to_seq` piggyback、非满页 tail delay、stale 过滤和 max pages flush。
|
|
144
|
+
- 新增 `v2-e2ee-coordinator` 组件边界测试,验证自动 ack 通过下一页 pull piggyback。
|
|
145
|
+
- 扩展 agent.md 和 conformance 测试,覆盖群组 ETag 观察及 0.5.2 版本声明。
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 0.5.1 — 2026-07-01
|
|
150
|
+
|
|
151
|
+
### ⚠️ 重大变更(Breaking Changes)
|
|
78
152
|
|
|
79
153
|
#### 群组标识符统一为 GROUP_AID
|
|
80
154
|
- **GROUP_ID 废弃**:历史 `group.{domain}/{base}` 格式已废弃,统一为 `{base}.{issuer}` 格式(group_aid)
|