@agentunion/fastaun-browser 0.5.18 → 0.5.20
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 +172 -79
- package/_packed_docs/CHANGELOG.md +172 -79
- package/_packed_docs/INDEX.md +244 -116
- package/_packed_docs/KITE_DOCS_GUIDE.md +98 -69
- package/_packed_docs/agent.md/SCHEMA.md +245 -205
- package/_packed_docs/agent.md//350/277/234/347/250/213agent.md/347/274/223/345/255/230/344/270/216etag/351/200/217/344/274/240/346/226/271/346/241/210.md +11 -11
- 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 +42 -15
- package/_packed_docs/aun/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +4 -4
- package/_packed_docs/protocol/01-/350/272/253/344/273/275/344/270/216/345/207/255/350/257/201/345/215/217/350/256/256-auth.md +45 -134
- package/_packed_docs/protocol/06-/346/234/215/345/212/241/345/215/217/350/256/256.md +1072 -1072
- package/_packed_docs/protocol/07-/351/224/231/350/257/257/347/240/201/344/270/216/347/212/266/346/200/201/346/234/272.md +5 -20
- package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +687 -668
- package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +19 -28
- package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/211.md +443 -0
- package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.0.md +161 -0
- package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.1.md +658 -0
- package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2113.0.md +233 -0
- package/_packed_docs/protocol/agent.md/SCHEMA.md +4 -0
- package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +1 -1
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +68 -61
- package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +1 -1
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +279 -285
- package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +3 -3
- package/_packed_docs/sdk/09-group-rpc-manual.md +271 -235
- package/_packed_docs/sdk/09-message-rpc-manual.md +47 -6
- package/_packed_docs/sdk/09-storage-rpc-manual.md +70 -68
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +63 -34
- package/_packed_docs/sdk/INDEX.md +105 -34
- package/_packed_docs/sdk/Ownership-SDK/345/256/236/347/216/260/346/214/207/345/215/227.md +169 -0
- package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/227.md +349 -0
- package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/2272.1.md +922 -0
- package/_packed_docs/sdk/Ownership-SDK/351/233/206/346/210/220/346/214/207/345/215/227.md +270 -0
- package/_packed_docs/sdk/Ownership2.1-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +300 -0
- package/_packed_docs/sdk/Ownership2.1-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +382 -0
- package/_packed_docs/sdk/Ownership2.1-TDD/345/210/206/351/230/266/346/256/265/345/256/236/346/226/275/350/256/241/345/210/222.md +708 -0
- package/_packed_docs/sdk/Ownership2.1/350/257/246/347/273/206/350/256/276/350/256/241.md +476 -0
- package/_packed_docs/sdk/Ownership/347/256/241/347/220/206/344/270/223/351/242/230.md +559 -0
- package/_packed_docs/sdk/ProtectedHeaders/347/224/250/346/263/225/344/270/223/351/242/230.md +299 -0
- package/_packed_docs/sdk//345/207/255/350/257/201/344/270/216/347/273/204/347/273/207/346/234/215/345/212/241SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +173 -0
- package/_packed_docs/sdk//345/207/255/350/257/201/344/270/216/347/273/204/347/273/207/346/234/215/345/212/241SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +211 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273SDK/345/256/236/347/216/260/347/247/273/346/244/215/346/214/207/345/215/227.md +331 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273SDK/351/233/206/346/210/220/346/214/207/345/215/227.md +207 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273/344/273/243/347/240/201/345/256/241/346/237/245/346/212/245/345/221/212.md +252 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273/345/256/236/346/226/275/350/256/241/345/210/222.md +156 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273/346/226/271/346/241/210.md +273 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273/350/257/246/347/273/206/350/256/276/350/256/241.md +211 -0
- package/dist/agent-md-schema.d.ts +17 -3
- package/dist/agent-md-schema.d.ts.map +1 -1
- package/dist/agent-md-schema.js +94 -26
- package/dist/agent-md-schema.js.map +1 -1
- package/dist/agent-md.d.ts +54 -3
- package/dist/agent-md.d.ts.map +1 -1
- package/dist/agent-md.js +711 -65
- package/dist/agent-md.js.map +1 -1
- package/dist/aid-store.d.ts +58 -46
- package/dist/aid-store.d.ts.map +1 -1
- package/dist/aid-store.js +254 -248
- package/dist/aid-store.js.map +1 -1
- package/dist/aid.d.ts +4 -1
- package/dist/aid.d.ts.map +1 -1
- package/dist/aid.js +27 -33
- package/dist/aid.js.map +1 -1
- package/dist/auth.d.ts +4 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +426 -39
- package/dist/auth.js.map +1 -1
- package/dist/bundle.js +38179 -32054
- package/dist/cert-utils.d.ts +50 -2
- package/dist/cert-utils.d.ts.map +1 -1
- package/dist/cert-utils.js +105 -47
- package/dist/cert-utils.js.map +1 -1
- package/dist/client/delivery.d.ts +22 -1
- package/dist/client/delivery.d.ts.map +1 -1
- package/dist/client/delivery.js +389 -78
- package/dist/client/delivery.js.map +1 -1
- package/dist/client/rpc-pipeline.d.ts.map +1 -1
- package/dist/client/rpc-pipeline.js +103 -77
- package/dist/client/rpc-pipeline.js.map +1 -1
- package/dist/client/v2-e2ee.d.ts +1 -0
- package/dist/client/v2-e2ee.d.ts.map +1 -1
- package/dist/client/v2-e2ee.js +182 -89
- package/dist/client/v2-e2ee.js.map +1 -1
- package/dist/client.d.ts +100 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +1220 -25
- package/dist/client.js.map +1 -1
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +8 -6
- package/dist/crypto.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +3 -2
- package/dist/errors.js.map +1 -1
- package/dist/events.d.ts +9 -2
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +72 -13
- package/dist/events.js.map +1 -1
- package/dist/facades.d.ts +82 -2
- package/dist/facades.d.ts.map +1 -1
- package/dist/facades.js +100 -6
- package/dist/facades.js.map +1 -1
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/keystore/index.d.ts +17 -0
- package/dist/keystore/index.d.ts.map +1 -1
- package/dist/keystore/indexeddb-shared.d.ts +10 -1
- package/dist/keystore/indexeddb-shared.d.ts.map +1 -1
- package/dist/keystore/indexeddb-shared.js +111 -0
- package/dist/keystore/indexeddb-shared.js.map +1 -1
- package/dist/keystore/indexeddb-token-store.d.ts +7 -1
- package/dist/keystore/indexeddb-token-store.d.ts.map +1 -1
- package/dist/keystore/indexeddb-token-store.js +30 -1
- package/dist/keystore/indexeddb-token-store.js.map +1 -1
- package/dist/org-protocol.d.ts +98 -0
- package/dist/org-protocol.d.ts.map +1 -0
- package/dist/org-protocol.js +1802 -0
- package/dist/org-protocol.js.map +1 -0
- package/dist/ownership-proof.d.ts +93 -5
- package/dist/ownership-proof.d.ts.map +1 -1
- package/dist/ownership-proof.js +239 -53
- package/dist/ownership-proof.js.map +1 -1
- package/dist/ownership-v21.d.ts +194 -0
- package/dist/ownership-v21.d.ts.map +1 -0
- package/dist/ownership-v21.js +678 -0
- package/dist/ownership-v21.js.map +1 -0
- package/dist/ownership-workflow.d.ts +151 -0
- package/dist/ownership-workflow.d.ts.map +1 -0
- package/dist/ownership-workflow.js +1229 -0
- package/dist/ownership-workflow.js.map +1 -0
- package/dist/seq-tracker.d.ts +1 -0
- package/dist/seq-tracker.d.ts.map +1 -1
- package/dist/seq-tracker.js +10 -2
- package/dist/seq-tracker.js.map +1 -1
- package/dist/tools/cross-sdk-agent.d.ts +83 -0
- package/dist/tools/cross-sdk-agent.d.ts.map +1 -1
- package/dist/tools/cross-sdk-agent.js +415 -7
- package/dist/tools/cross-sdk-agent.js.map +1 -1
- package/dist/transport.d.ts +7 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +90 -2
- package/dist/transport.js.map +1 -1
- package/dist/v2/e2ee/decrypt.d.ts +1 -0
- package/dist/v2/e2ee/decrypt.d.ts.map +1 -1
- package/dist/v2/e2ee/decrypt.js +9 -1
- package/dist/v2/e2ee/decrypt.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -24,7 +24,9 @@ P2P `message.*` 的最终投递语义由连接阶段声明的 `delivery_mode`
|
|
|
24
24
|
| [message.thought.get](#messagethoughtget) | 读取某个 P2P 上下文的思考内容 |
|
|
25
25
|
| [message.pull](#messagepull) | 增量拉取消息 |
|
|
26
26
|
| [message.history](#messagehistory) | 向前只读翻页历史消息 |
|
|
27
|
-
| [message.ack](#messageack) | 确认送达 |
|
|
27
|
+
| [message.ack](#messageack) | 确认送达 |
|
|
28
|
+
| [message.read](#messageread) | 上报当前设备的话题业务已读位置 |
|
|
29
|
+
| [message.read_state](#messageread_state) | 查询当前 AID 的跨设备已读汇总 |
|
|
28
30
|
| [message.recall](#messagerecall) | 撤回消息 |
|
|
29
31
|
| [message.query_online](#messagequery_online) | 批量查询在线状态 |
|
|
30
32
|
|
|
@@ -46,11 +48,47 @@ P2P `message.*` 的最终投递语义由连接阶段声明的 `delivery_mode`
|
|
|
46
48
|
|------|------|
|
|
47
49
|
| [event/message.received](#eventmessagereceived) | 收到新消息 |
|
|
48
50
|
| [event/message.recalled](#eventmessagerecalled) | 消息被撤回 |
|
|
51
|
+
| [message.read_changed](#messageread_changed) | 同一 AID 的共享已读位置前进 |
|
|
52
|
+
| `read_state_sync` | SDK 本地已读补偿完成,交付本轮 states/errors |
|
|
49
53
|
| [delivery.changed](#deliverychanged) | SDK 本地批量交付完成通知,用于合并 UI 刷新 |
|
|
50
54
|
|
|
51
55
|
---
|
|
52
56
|
|
|
53
|
-
## message.
|
|
57
|
+
## message.read
|
|
58
|
+
|
|
59
|
+
请求为 `{"states":[{"scope":"p2p","topic_key":"topic-1","last_read_message_id":"m-100"}]}`。`states` 至少一项;省略时也兼容顶层单条,显式空数组、null 或非数组值拒绝;只更新出现的键。AID 与 device ID 从认证连接取得,不能指定其它设备。`scope` 缺省或为空时按 `p2p` 处理,非空值只能为 `p2p`;显式非字符串值拒绝。topic 原样保存,首尾空格、大小写和 Unicode 不折叠;topic、消息 ID、认证 AID 与 device ID 各最多 128 字符。
|
|
60
|
+
|
|
61
|
+
响应为 `{"updated":1,"ignored":0,"states":[{"scope":"p2p","topic_key":"topic-1","last_read_message_id":"m-100","changed":true}]}`。这些是逐项设备写入回执,不能当作共享汇总;`changed=true` 不保证共享位置前进。重复或更旧位置返回 `changed=false`,不回退状态。批量参数校验失败不提交其中任何一项。每个 RPC 只等待本次依赖的写入提交;跨多个数据库批次时,后续失败不回滚先前提交,原样幂等重试可收敛。
|
|
62
|
+
|
|
63
|
+
定向到 `device_id` / `to_device_id` 的消息形成独立设备事实,不进入 AID 共享汇总,也不广播共享已读变更。该业务 API 不推进投递 ACK。
|
|
64
|
+
|
|
65
|
+
P2P 已读状态只由当前身份的 home 域管理。Gateway 从认证连接绑定主体,禁止调用方伪造 `_auth.aid`;`message.read` 与 `message.read_state` 的 federation 入站和出站均拒绝。该边界不改变受来源域约束的已读事件转发。
|
|
66
|
+
|
|
67
|
+
## message.read_state
|
|
68
|
+
|
|
69
|
+
查询字段均可选:`scope`(缺省或为空时按 `p2p`,非空值只能为 `p2p`)、`topic_key`、`aid`(非空值只能等于认证 AID)。显式非字符串或 `null` 拒绝。省略过滤条件查询当前 AID 的全部共享状态;无状态返回 `states=[]`。响应始终有 `states`;只有一项时顶层镜像该项字段。
|
|
70
|
+
|
|
71
|
+
| 状态字段 | 含义 |
|
|
72
|
+
| --- | --- |
|
|
73
|
+
| `scope` / `topic_key` / `last_read_message_id` | 当前话题在全部设备中位置最新的共享业务已读消息 |
|
|
74
|
+
| `last_read_order` | 公共消息顺序提示;用于 SDK 乱序保护,不是设备 seq |
|
|
75
|
+
| `current_device_seq` | 该消息在当前认证设备 inbox 的本地 seq,无法映射为 `null` |
|
|
76
|
+
| `mapping_status` | `resolved`:映射成功;`not_received`:公共位置已知,当前设备无投递映射;`unresolved`:公共消息位置无法解析 |
|
|
77
|
+
| `updated_at` | 服务端更新时间,毫秒 |
|
|
78
|
+
|
|
79
|
+
未知消息首次上报保存待解析状态、查询为 `unresolved`,不广播汇总前进;晚到公共位置仅对仍匹配该消息且 order=0 的事实条件持久回填,不能只更新缓存或覆盖并发前进的事实;未知位置不能覆盖已知位置。历史清理后使用持久 `last_read_order` 防止比较回退。接口只返回共享汇总,不返回其它设备 ID、seq 或定向设备事实。当前设备投递索引缺失时回查公共索引,GC 后热/冷进程均返回一致映射状态。
|
|
80
|
+
|
|
81
|
+
网络 JSON 的公共顺序和 seq 是整数,Gateway 本域服务及 federation 回程必须无损保留;TS/JS 的 `last_read_order`、非空 `current_device_seq` 在安全整数范围内是 number,超出时是精确十进制字符串。`null` 映射保持不变。
|
|
82
|
+
|
|
83
|
+
## message.read_changed
|
|
84
|
+
|
|
85
|
+
SDK 订阅名为 `message.read_changed`。事件包含 `owner_aid`、`scope=p2p`、`topic_key`、`last_read_message_id`、`last_read_order` 和 `updated_at`,只在数据库提交成功且共享位置前进后发出。`owner_aid` 必须非空。Gateway 即使收到显式 route 也只向该 AID 分发,并校验 Kernel 转发的可信服务来源;federation 将 `owner_aid` 绑定来源域。SDK 要求 `scope=p2p` 匹配原事件,忽略缺失 owner 或其它 AID 的状态;事件 ID 对 JSON 数组 `[owner_aid, topic_key, last_read_message_id]` 计算 SHA-256,不包含 `last_read_order`,失败日志不泄露 topic。事件没有统一设备 seq,不进入 Pull 队列,丢失通过重连后 `read_state` 查询补偿。
|
|
86
|
+
|
|
87
|
+
四端 facade 分别为 Python `message.read/read_state`、TS/JS `message.read/readState`、Go `Message().Read/ReadState`。四个已读门面保留显式 `None/null/nil` 字段供服务端拒绝,不改变其他门面的空值处理。仅查询和有效事件更新共享缓存;旧事件不交付应用,同位置事件保留设备映射并避免重复交付,新位置不继承旧映射。未知顺序不按时间或 ID 猜测前进;已知同序 ID 按 Unicode 码点/BINARY 顺序比较。
|
|
88
|
+
|
|
89
|
+
SDK 登记成功查询的原过滤范围,空查询也登记;连接成功后补偿并在本地发布 `read_state_sync`,含 `owner_aid`、去重 `states` 和 `{method, params, error}` 错误项。消息 `background_sync=false` 不关闭补偿,AID/device 切换清理旧缓存及过滤项;旧身份在途结果按身份代际隔离,A→B→A 也不写当前缓存或补偿完成事件,原 RPC 调用仍可返回结果。应用在 connect 前订阅,详见 [跨设备已读未读 SDK 集成指南](../跨设备已读未读SDK集成指南.md)。
|
|
90
|
+
|
|
91
|
+
## message.send
|
|
54
92
|
|
|
55
93
|
发送一条 P2P 消息。
|
|
56
94
|
|
|
@@ -91,7 +129,7 @@ P2P `message.*` 的最终投递语义由连接阶段声明的 `delivery_mode`
|
|
|
91
129
|
> 连接级 `delivery_mode` 在 `auth.connect` 阶段声明,结构见 `02-WebSocket协议.md`。Python SDK 的 P2P 消息发送会沿用当前连接的 `delivery_mode`,应用层发送时无需重复指定。
|
|
92
130
|
> `protected_headers` 只在 SDK 加密路径生效;裸 RPC 发送明文或已加密信封时,调用方需自行遵守 [05-E2EE加密通信](05-E2EE加密通信.md#protectedheaders-与可验证上下文) 的格式和校验规则。
|
|
93
131
|
|
|
94
|
-
`message.send.device_id` 表示接收目标,不是发送方设备,也不同于 `message.pull` / `message.ack` 中表示当前消费实例的 `device_id`。指定目标设备时,SDK 的 V2 加密信封只选择该设备对应的 peer wrap(AID scope 使用对应 AID wrap),同时保留发送方 self-sync 和监管 audit wrap
|
|
132
|
+
`message.send.device_id` 表示接收目标,不是发送方设备,也不同于 `message.pull` / `message.ack` 中表示当前消费实例的 `device_id`。指定目标设备时,SDK 的 V2 加密信封只选择该设备对应的 peer wrap(AID scope 使用对应 AID wrap),同时保留发送方 self-sync 和监管 audit wrap。缓存 bootstrap 中缺少目标设备时,四个 SDK 会清除该缓存,获取新鲜 bootstrap 并仅重试一次;目标设备仍不存在或不可用时发送失败,不会降级为 AID 全设备广播。
|
|
95
133
|
|
|
96
134
|
`ttl` 与连接级 `delivery_mode` 相互独立。正 TTL 消息不写数据库或 WAL、不分配持久 `seq`;跨域只转发剩余 TTL,目标域不会重新执行 1 秒下限钳制。
|
|
97
135
|
|
|
@@ -320,11 +358,13 @@ result = await client.call("message.thought.get", {
|
|
|
320
358
|
|------|------|------|--------|------|
|
|
321
359
|
| `after_seq` | integer | 否 | 0 | 拉取 seq > after_seq 的消息 |
|
|
322
360
|
| `after_volatile_cursor` | string | 否 | SDK 当前游标 | 拉取该 opaque volatile 游标之后的消息;应用通常无需传入 |
|
|
323
|
-
| `limit` | integer | 否 | 50 |
|
|
361
|
+
| `limit` | integer | 否 | 50 | SDK 单页上限,最大 50 |
|
|
324
362
|
| `device_id` | string | 否 | 当前连接实例 | 多实例消费上下文中的设备标识 |
|
|
325
363
|
|
|
326
364
|
> 四个 SDK 自动管理 `after_volatile_cursor`,并在传输层注入当前消费实例的内部 slot。slot 不属于应用参数,也不会出现在消息、响应或事件中。
|
|
327
365
|
|
|
366
|
+
当前四个 SDK 的 V2 路由仍将单页限制为 50。直接调用底层 `message.v2.pull` 时,服务端默认 50、最大 200;旧 `message.pull` 的持久消息及 `message.history` 仍为最大 50。
|
|
367
|
+
|
|
328
368
|
### 响应
|
|
329
369
|
|
|
330
370
|
```json
|
|
@@ -357,6 +397,7 @@ result = await client.call("message.thought.get", {
|
|
|
357
397
|
| `messages` | array | 持久与 volatile 消息按服务端时间合并;持久消息子序列仍按 `seq` 升序。消息对象含 `encrypted` 字段(仅 `encrypted=true` 时出现) |
|
|
358
398
|
| `count` | integer | 本次返回的消息数 |
|
|
359
399
|
| `latest_seq` | integer | 返回的最大 seq |
|
|
400
|
+
| `has_more` | boolean | 服务端 Forward 响应中仍有可见持久消息未返回;通过 `limit + 1` 探测及响应截页确定,不由 `unread_count` 或恰好满页推断 |
|
|
360
401
|
| `latest_volatile_cursor` | string\|null | 本页最后一个 volatile 游标;不影响 `latest_seq` |
|
|
361
402
|
| `volatile_has_more` | boolean | 是否仍有未返回的 volatile 消息;SDK 在 volatile cursor 前进时据此继续分页 |
|
|
362
403
|
| `volatile_earliest_cursor` | string\|null | 当前 boot epoch 内仍可读取的最早 volatile 游标 |
|
|
@@ -367,11 +408,11 @@ result = await client.call("message.thought.get", {
|
|
|
367
408
|
| `ephemeral_earliest_available_seq` | integer\|null | 临时缓冲中可用的最小 seq |
|
|
368
409
|
| `ephemeral_dropped_count` | integer | 已被淘汰的临时消息数 |
|
|
369
410
|
|
|
370
|
-
`message.pull` 是公开的 Forward Pull。实时 A/T/H 最新页同步由 SDK 内部自动完成,不提供需要应用传入的模式参数。Forward 页通过结构校验后,本地 A 按原始页最大 seq 推进。页内缺号视为服务端永久空号;单条解密失败通过 `message.undecryptable` 报告,不阻塞后续水位。Forward 仍支持 Piggy ACK
|
|
411
|
+
`message.pull` 是公开的 Forward Pull。实时 A/T/H 最新页同步由 SDK 内部自动完成,不提供需要应用传入的模式参数。Forward 页通过结构校验后,本地 A 按原始页最大 seq 推进。页内缺号视为服务端永久空号;单条解密失败通过 `message.undecryptable` 报告,不阻塞后续水位。Forward 仍支持 Piggy ACK:有后续页时携带待提交 ACK;没有续页证明时以独立 ACK 收尾,不为 ACK 额外拉取空页。
|
|
371
412
|
|
|
372
413
|
四个 SDK 只让含正 `seq` 的持久消息进入 seq tracker。volatile push 与 pull 在进程内按发送方和 `message_id` 去重,成功交付后自动 ACK;epoch 不匹配时清空本地 volatile 游标并重试一次。`message.history` 永远不返回 volatile 消息。
|
|
373
414
|
|
|
374
|
-
`message.pull` 与 `message.history` 进入当前 `AUNClient` 的客户端级 Pull Gate。该 Gate 与 Group Message、Group Event Pull
|
|
415
|
+
`message.pull` 与 `message.history` 进入当前 `AUNClient` 的客户端级 Pull Gate。该 Gate 与 Group Message、Group Event Pull 共享,同一 namespace 内的 Tail、History、Forward 始终单飞,不同 namespace 最多 4 个并行。namespace 分别为 `p2p:{当前 AID}`、`group:{群标识}`、`group_event:{群标识}`,同群消息与群事件使用不同 namespace。相同完整请求 key 折叠并共享结果;可运行的不同 key 按前台 FIFO(Tail/History)优先于后台 FIFO(Forward/Gap Fill/Group Event)调度,跳过已被占用的 namespace。不同 `AUNClient` 实例之间不共享 Gate,应用层无需自行实现并发控制。
|
|
375
416
|
|
|
376
417
|
解密当前消息时若缺少 sender IK,SDK 会把同发送端请求 single-flight 合并,最多同步等待 3 秒执行 bootstrap;获取成功立即重试当前消息,失败或超时才进入 pending。该补救不改变 Forward 按原始页推进 A 的规则。
|
|
377
418
|
|
|
@@ -12,12 +12,9 @@
|
|
|
12
12
|
| [storage.delete_object](#storagedelete_object) | 删除对象 |
|
|
13
13
|
| [storage.list_objects](#storagelist_objects) | 列举对象 |
|
|
14
14
|
| [storage.list_prefixes](#storagelist_prefixes) | 列举子目录 |
|
|
15
|
-
| [storage.get_quota](#storageget_quota) | 查询配额 |
|
|
16
|
-
| [storage.get_limits](#storageget_limits) | 查询上传限制 |
|
|
17
|
-
| [storage.check_upload](#storagecheck_upload) | 上传预检(秒传检测 + 超限检测) |
|
|
18
|
-
| [storage.relation_backup_provision](#storagerelation_backup_provision) | Auth 内部创建关系备份命名空间 |
|
|
19
|
-
| [storage.relation_backup_revoke](#storagerelation_backup_revoke) | Auth 内部撤销关系 ACL、保留数据 |
|
|
20
|
-
| [storage.relation_backup_status](#storagerelation_backup_status) | 查询关系备份命名空间状态 |
|
|
15
|
+
| [storage.get_quota](#storageget_quota) | 查询配额 |
|
|
16
|
+
| [storage.get_limits](#storageget_limits) | 查询上传限制 |
|
|
17
|
+
| [storage.check_upload](#storagecheck_upload) | 上传预检(秒传检测 + 超限检测) |
|
|
21
18
|
|
|
22
19
|
### 目录树方法
|
|
23
20
|
|
|
@@ -96,7 +93,7 @@
|
|
|
96
93
|
|
|
97
94
|
> 统一权限求值顺序(硬顺序):公开位 → token → ACL(最近祖先前缀)→ 角色 → owner → 拒绝。
|
|
98
95
|
>
|
|
99
|
-
>
|
|
96
|
+
> `storage.set_acl` 授予路径前缀权限:`w` 写、`x` 删、`r` 读。`r` 用于 authoritative 读取和受信挂载读取;普通个人私有对象下载请使用 `storage.create_share_link`,以 `allowed_aids` 指定接收 AID。群角色 ACL 使用 `group.fs.set_acl/remove_acl`。
|
|
100
97
|
|
|
101
98
|
| 方法 | 说明 |
|
|
102
99
|
|------|------|
|
|
@@ -121,31 +118,21 @@
|
|
|
121
118
|
|
|
122
119
|
> `object_key` 当前仅支持 ASCII 安全字符集合 `[A-Za-z0-9._/-]`,且不允许空路径段、`..`、反斜杠转义后的非法段。
|
|
123
120
|
|
|
124
|
-
## SDK 封装状态
|
|
121
|
+
## SDK 封装状态
|
|
125
122
|
|
|
126
|
-
Python / Go / TypeScript / JavaScript SDK 均提供 storage low-level 与 VFS 门面。普通应用优先使用 SDK VFS:`write_bytes` / `upload_file` 会先 `check_upload`,小对象走 `put_object`,大对象走 `create_upload_session` → HTTP PUT → `complete_upload`,秒传路径用 `complete_upload(skip_blob=true)`;`read_bytes` / `download_file` 优先尝试 inline `get_object`,超限时回退 `create_download_ticket`;`touch` 直接封装 `storage.fs.touch`。需要精确控制 ACL、token、软链、卷、批量操作或 URL 字段时,再直接调用本手册中的 `storage.*` RPC。
|
|
127
|
-
|
|
128
|
-
四个 SDK 的 VFS 会优先按实际字节识别 PNG、JPEG、GIF、BMP、WebP、PDF、gzip、ZIP、MP4、JSON、HTML 和 UTF-8 文本,再回退文件扩展名及 `application/octet-stream`。大文件上传时,`create_upload_session`、HTTP PUT 和 `complete_upload` 使用同一个 `Content-Type`;如果 session 响应额外提供 `headers`,SDK 会保留其它 header 并以实际识别结果替换其中的 Content-Type。OSS 预签名 PUT 会把 Content-Type 纳入签名校验,缺失或不一致时可直接返回 403。
|
|
129
|
-
|
|
130
|
-
直接调用底层 RPC 的高级客户端必须自行完成相同编排:先确定内容类型,再把同一个值传给 session 和 complete,并在 PUT 请求中发送一致的 `Content-Type`。绕过 VFS 后未遵守该约束属于调用方式错误。
|
|
131
|
-
|
|
132
|
-
##
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
响应字段:`schema`、`owner_aid`、`subject_aid`、`proof_id`、`relation_version`、`bucket`、`path`、`acl_source`(固定 `ownership_relation`)、`acl_generation`、`status`(`ready`)、`on_revoke`(`retain_data_revoke_acl`)、`data_retained`。首次 generation 为 1;同一 proof/version 重复调用幂等。
|
|
141
|
-
|
|
142
|
-
### storage.relation_backup_revoke
|
|
143
|
-
|
|
144
|
-
参数:`owner_aid`、`subject_aid`,可选 `expected_relation_version`。只撤销 subject 的关系 ACL,保留目录和数据;成功返回 `status=retained`、`data_retained=true`,`acl_generation` 递增。记录不存在返回 `-32008`,非 Auth 调用返回 `-32004`。
|
|
145
|
-
|
|
146
|
-
### storage.relation_backup_status
|
|
147
|
-
|
|
148
|
-
参数:`subject_aid` 必填,`owner_aid` 可选;调用者必须是 owner 或 subject。响应与 provision 相同,未创建记录返回 `status=pending`、`acl_generation=0`、`data_retained=false`。`path` 的 RPC 返回值为 `.aun/subjects/<lowercase_subject_aid>`(SDK VFS 可用带前导 `/` 的等价路径)。subject 只能访问自己的 ready 关系目录的后代;不能列举 `.aun/subjects/` 根或其它 subject,不能删除 subject 根,也不能修改 ACL、visibility、token、share、mount。
|
|
123
|
+
Python / Go / TypeScript / JavaScript SDK 均提供 storage low-level 与 VFS 门面。普通应用优先使用 SDK VFS:`write_bytes` / `upload_file` 会先 `check_upload`,小对象走 `put_object`,大对象走 `create_upload_session` → HTTP PUT → `complete_upload`,秒传路径用 `complete_upload(skip_blob=true)`;`read_bytes` / `download_file` 优先尝试 inline `get_object`,超限时回退 `create_download_ticket`;`touch` 直接封装 `storage.fs.touch`。需要精确控制 ACL、token、软链、卷、批量操作或 URL 字段时,再直接调用本手册中的 `storage.*` RPC。
|
|
124
|
+
|
|
125
|
+
四个 SDK 的 VFS 会优先按实际字节识别 PNG、JPEG、GIF、BMP、WebP、PDF、gzip、ZIP、MP4、JSON、HTML 和 UTF-8 文本,再回退文件扩展名及 `application/octet-stream`。大文件上传时,`create_upload_session`、HTTP PUT 和 `complete_upload` 使用同一个 `Content-Type`;如果 session 响应额外提供 `headers`,SDK 会保留其它 header 并以实际识别结果替换其中的 Content-Type。OSS 预签名 PUT 会把 Content-Type 纳入签名校验,缺失或不一致时可直接返回 403。
|
|
126
|
+
|
|
127
|
+
直接调用底层 RPC 的高级客户端必须自行完成相同编排:先确定内容类型,再把同一个值传给 session 和 complete,并在 PUT 请求中发送一致的 `Content-Type`。绕过 VFS 后未遵守该约束属于调用方式错误。
|
|
128
|
+
|
|
129
|
+
## 权威读取与完整发布
|
|
130
|
+
|
|
131
|
+
`storage.head_object/get_object` 和 `storage.fs.stat` 的 `consistency: authoritative` 绕过正负缓存,核对当前存在性、规范路径及完整正文摘要。权威结果包含 `consistency`、布尔 `exists`、请求 `owner_aid/bucket/path` 和 Unix 秒 `observed_at`;存在时返回完整对象元数据,仅 `get_object` 另含严格 Base64 的完整 `content`,head/stat 不返回正文。恢复未完成、权限错误、网络或数据库故障不能返回 `exists=false`。私有路径仍检查既有 ACL,匹配的 `r` grant 不授权普通下载票据。
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
`default/sub_aids/{sub_aid}/owner.md` 为公开可读的 Ownership 规范路径,仅命名空间 owner 可写删;ACL、token、父目录、移动、重命名、软链、挂载或自动清理均不能给第三方绕过能力。该路径约束先于通用权限放行,关系授权以 [Ownership 2.1](../protocol/Ownership协议定义2.1.md) 的 NS 新鲜事实为准。
|
|
149
136
|
|
|
150
137
|
## storage.put_object
|
|
151
138
|
|
|
@@ -201,6 +188,8 @@ result = await client.call("storage.put_object", {
|
|
|
201
188
|
|
|
202
189
|
读取小对象,返回 base64 编码内容。
|
|
203
190
|
|
|
191
|
+
可传 `consistency: authoritative`,结果及故障分类见 [权威读取与完整发布](#权威读取与完整发布);权威读取只接受完整对象。
|
|
192
|
+
|
|
204
193
|
### 参数
|
|
205
194
|
|
|
206
195
|
| 参数 | 类型 | 必填 | 说明 |
|
|
@@ -208,6 +197,7 @@ result = await client.call("storage.put_object", {
|
|
|
208
197
|
| `object_key` | string | 是 | 对象路径 |
|
|
209
198
|
| `bucket` | string | 否 | 存储桶,默认 `"default"` |
|
|
210
199
|
| `owner_aid` | string | 否 | 所有者 AID,默认当前用户 |
|
|
200
|
+
| `consistency` | string | 否 | 传 `authoritative` 时绕过缓存并返回完整权威对象 |
|
|
211
201
|
|
|
212
202
|
### 响应
|
|
213
203
|
|
|
@@ -240,6 +230,8 @@ content = base64.b64decode(result["content"])
|
|
|
240
230
|
|
|
241
231
|
查询对象元数据,不返回内容。
|
|
242
232
|
|
|
233
|
+
可传 `consistency: authoritative`,返回当前存在性与完整对象元数据;完整契约见 [权威读取与完整发布](#权威读取与完整发布)。
|
|
234
|
+
|
|
243
235
|
### 参数
|
|
244
236
|
|
|
245
237
|
| 参数 | 类型 | 必填 | 说明 |
|
|
@@ -247,6 +239,7 @@ content = base64.b64decode(result["content"])
|
|
|
247
239
|
| `object_key` | string | 是 | 对象路径 |
|
|
248
240
|
| `bucket` | string | 否 | 存储桶,默认 `"default"` |
|
|
249
241
|
| `owner_aid` | string | 否 | 所有者 AID,默认当前用户 |
|
|
242
|
+
| `consistency` | string | 否 | 传 `authoritative` 时绕过缓存并返回权威对象元数据 |
|
|
250
243
|
|
|
251
244
|
### 响应
|
|
252
245
|
|
|
@@ -271,6 +264,7 @@ content = base64.b64decode(result["content"])
|
|
|
271
264
|
|
|
272
265
|
删除对象。
|
|
273
266
|
|
|
267
|
+
|
|
274
268
|
### 参数
|
|
275
269
|
|
|
276
270
|
| 参数 | 类型 | 必填 | 说明 |
|
|
@@ -586,27 +580,30 @@ for obj in result["items"]:
|
|
|
586
580
|
|
|
587
581
|
### 响应
|
|
588
582
|
|
|
589
|
-
| 字段 | 类型 | 说明 |
|
|
590
|
-
|------|------|------|
|
|
583
|
+
| 字段 | 类型 | 说明 |
|
|
584
|
+
|------|------|------|
|
|
591
585
|
| `upload_url` | string | 上传用 presigned URL |
|
|
592
|
-
| `
|
|
593
|
-
| `
|
|
594
|
-
| `
|
|
595
|
-
| `
|
|
596
|
-
| `
|
|
597
|
-
| `
|
|
598
|
-
| `
|
|
599
|
-
| `
|
|
600
|
-
| `
|
|
601
|
-
| `
|
|
602
|
-
| `
|
|
603
|
-
| `
|
|
586
|
+
| `session_id` | string | 规范 agent.md/owner.md 的完整原子发布会话;普通对象不保证返回 |
|
|
587
|
+
| `expire_at` | integer | URL 过期时间戳 |
|
|
588
|
+
| `owner_aid` | string | 所有者 AID |
|
|
589
|
+
| `bucket` | string | 存储桶 |
|
|
590
|
+
| `object_key` | string | 对象路径 |
|
|
591
|
+
| `name` | string | 对象名称 |
|
|
592
|
+
| `path` | string | 对象路径 |
|
|
593
|
+
| `path_url` | string | Storage path URL |
|
|
594
|
+
| `url` / `download_url` | string | AID 风格对象 URL |
|
|
595
|
+
| `logical_url` | string | Storage 直链 URL |
|
|
596
|
+
| `content_type` | string | MIME 类型 |
|
|
597
|
+
| `size_bytes` | integer | 声明的文件大小 |
|
|
598
|
+
| `overwrite` | boolean | 是否覆盖已有对象 |
|
|
599
|
+
|
|
600
|
+
客户端获得 `upload_url` 后,通过 HTTP PUT 上传文件数据。普通对象不保证返回 `session_id`;规范 agent.md/owner.md 会话另返回 `session_id`,complete 必须沿用同一会话。
|
|
604
601
|
|
|
605
|
-
|
|
602
|
+
规范 `default/agent.md` 与 `default/sub_aids/{sub_aid}/owner.md` 的上传会话使用独立临时对象,`create_upload_session` 返回 `session_id`;新客户端完成这些规范文件时必须携带同一 `session_id`。服务端核对会话的认证申请者、目标及有效期,验证完整内容后原子发布,失败保留旧完整文件。普通对象保持既有上传流程,不保证返回 `session_id`;该临时会话不记录 Ownership 关系事实或路径历史。
|
|
606
603
|
|
|
607
604
|
> 当前实现会对 BlobStore 返回的 loopback URL 做对外地址规范化:优先使用 `KITE_STORAGE_EXTERNAL_URL`,否则按 `storage.{issuer}` 形式改写。对外地址不可使用 `127.0.0.1` 或 `localhost`。
|
|
608
605
|
|
|
609
|
-
> 当前实现会在 `create_upload_session` 阶段按声明的 `size_bytes` 校验最大文件限制;实际 blob 大小、SHA-256 和配额在 `storage.complete_upload` 阶段校验。
|
|
606
|
+
> 当前实现会在 `create_upload_session` 阶段按声明的 `size_bytes` 校验最大文件限制;实际 blob 大小、SHA-256 和配额在 `storage.complete_upload` 阶段校验。
|
|
610
607
|
|
|
611
608
|
---
|
|
612
609
|
|
|
@@ -618,7 +615,8 @@ for obj in result["items"]:
|
|
|
618
615
|
|
|
619
616
|
| 参数 | 类型 | 必填 | 说明 |
|
|
620
617
|
|------|------|------|------|
|
|
621
|
-
| `object_key` | string |
|
|
618
|
+
| `object_key` | string | 条件 | 对象路径;提供 `session_id` 时可省略,若提供则必须与原会话目标一致 |
|
|
619
|
+
| `session_id` | string | 否 | 规范 agent.md/owner.md 新上传必须沿用 create_upload_session 返回的同一会话 |
|
|
622
620
|
| `sha256` | string | 否 | 文件 SHA-256 哈希;提供则校验完整性,`skip_blob=true` 时必填 |
|
|
623
621
|
| `bucket` | string | 否 | 存储桶,默认 `"default"` |
|
|
624
622
|
| `owner_aid` | string | 否 | 所有者 AID,默认当前用户 |
|
|
@@ -626,7 +624,7 @@ for obj in result["items"]:
|
|
|
626
624
|
| `is_private` | boolean | 否 | 是否私有,默认 `true` |
|
|
627
625
|
| `size_bytes` | integer | 否 | 预期文件大小(用于校验) |
|
|
628
626
|
| `skip_blob` | boolean | 否 | 秒传模式,默认 `false`;为 `true` 时跳过 blob 上传,必须提供 `sha256`,且当前 owner 已拥有相同内容 |
|
|
629
|
-
| `expected_version` | integer | 否 |
|
|
627
|
+
| `expected_version` | integer | 否 | 普通模式的乐观并发控制版本号;会话模式沿用 `create_upload_session` 保存的原值(包括未设置),本次传入值不生效 |
|
|
630
628
|
| `expire_in_seconds` | integer | 否 | 过期时间(秒) |
|
|
631
629
|
| `metadata` | object | 否 | 自定义元数据 |
|
|
632
630
|
|
|
@@ -650,7 +648,7 @@ for obj in result["items"]:
|
|
|
650
648
|
|
|
651
649
|
## storage.create_download_ticket
|
|
652
650
|
|
|
653
|
-
|
|
651
|
+
获取对象下载 URL。私有对象要分享给指定 AID 时,使用 `storage.create_share_link` 并设置 `allowed_aids`。
|
|
654
652
|
|
|
655
653
|
### 参数
|
|
656
654
|
|
|
@@ -677,20 +675,20 @@ for obj in result["items"]:
|
|
|
677
675
|
| `version` | integer | 版本号 |
|
|
678
676
|
| `etag` | string | 实体标签 |
|
|
679
677
|
|
|
680
|
-
`url` 是推荐使用的干净链接。访问时 storage 服务实时鉴权:public 文件直接通过,private 文件需 `?t=` token 或 `Authorization: Bearer <AID JWT>` 头证明 owner 身份。鉴权通过后 storage 302 到 blob 后端完成实际下载,这一步对客户端完全透明。
|
|
681
|
-
|
|
682
|
-
### 数据面 HTTP 下载流程
|
|
683
|
-
|
|
684
|
-
1. 通过控制面 RPC `storage.create_download_ticket` 获取短 TTL 的下载票据,不把长期对象 URL 当作最终下载地址。
|
|
685
|
-
2. 优先使用返回的 `url` / `download_url`,完整保留查询参数。URL 已包含 `?t=` 时,该值就是资源域签发的能力凭据,按原样请求即可,不要替换为 AID access token。
|
|
686
|
-
3. 只有目标端点明确要求 `Authorization: Bearer <AID JWT>` 时,才在发起请求前读取当前 token:Python 使用 `get_access_token()`,TypeScript / JavaScript 使用 `getAccessToken()`,Go 使用 `GetAccessToken()`。不得长期保存 `authenticate()` 首次返回的 token,也不得跨多次请求缓存 getter 的返回值。
|
|
687
|
-
4. getter 只读后台刷新任务维护的缓存,不主动刷新。返回空值时先完成身份加载和认证/连接,不发送空 Bearer。跨 issuer 下载必须使用资源所在域签发的 `?t=` 票据,不能把调用方所在域的 AID JWT 发给远端 storage。
|
|
688
|
-
5. Bearer 请求收到 401/403 时,重新读取一次 getter;仅当 token 已变化时最多重试一次。token 未变化时保留真实鉴权/授权错误,不得无限重试。票据过期则重新调用 `create_download_ticket`,不能靠刷新 AID token 延长票据。
|
|
689
|
-
6. 跟随 302 时不得把 AID Bearer 转发到不同 origin 的 blob backend;下载完成后校验 `size_bytes` / `sha256`。
|
|
690
|
-
|
|
691
|
-
SDK Storage VFS 会编排 ticket、HTTP GET 和完整性校验。应用只有在绕过 VFS、自行执行 HTTP 请求时,才需要直接处理上述凭据生命周期。
|
|
692
|
-
|
|
693
|
-
---
|
|
678
|
+
`url` 是推荐使用的干净链接。访问时 storage 服务实时鉴权:public 文件直接通过,private 文件需 `?t=` token 或 `Authorization: Bearer <AID JWT>` 头证明 owner 身份。鉴权通过后 storage 302 到 blob 后端完成实际下载,这一步对客户端完全透明。
|
|
679
|
+
|
|
680
|
+
### 数据面 HTTP 下载流程
|
|
681
|
+
|
|
682
|
+
1. 通过控制面 RPC `storage.create_download_ticket` 获取短 TTL 的下载票据,不把长期对象 URL 当作最终下载地址。
|
|
683
|
+
2. 优先使用返回的 `url` / `download_url`,完整保留查询参数。URL 已包含 `?t=` 时,该值就是资源域签发的能力凭据,按原样请求即可,不要替换为 AID access token。
|
|
684
|
+
3. 只有目标端点明确要求 `Authorization: Bearer <AID JWT>` 时,才在发起请求前读取当前 token:Python 使用 `get_access_token()`,TypeScript / JavaScript 使用 `getAccessToken()`,Go 使用 `GetAccessToken()`。不得长期保存 `authenticate()` 首次返回的 token,也不得跨多次请求缓存 getter 的返回值。
|
|
685
|
+
4. getter 只读后台刷新任务维护的缓存,不主动刷新。返回空值时先完成身份加载和认证/连接,不发送空 Bearer。跨 issuer 下载必须使用资源所在域签发的 `?t=` 票据,不能把调用方所在域的 AID JWT 发给远端 storage。
|
|
686
|
+
5. Bearer 请求收到 401/403 时,重新读取一次 getter;仅当 token 已变化时最多重试一次。token 未变化时保留真实鉴权/授权错误,不得无限重试。票据过期则重新调用 `create_download_ticket`,不能靠刷新 AID token 延长票据。
|
|
687
|
+
6. 跟随 302 时不得把 AID Bearer 转发到不同 origin 的 blob backend;下载完成后校验 `size_bytes` / `sha256`。
|
|
688
|
+
|
|
689
|
+
SDK Storage VFS 会编排 ticket、HTTP GET 和完整性校验。应用只有在绕过 VFS、自行执行 HTTP 请求时,才需要直接处理上述凭据生命周期。
|
|
690
|
+
|
|
691
|
+
---
|
|
694
692
|
|
|
695
693
|
## 事件
|
|
696
694
|
|
|
@@ -1010,6 +1008,8 @@ share_url = result["url"] # https://alice.agentid.pub/s/Ab3xK9mZ2q
|
|
|
1010
1008
|
|
|
1011
1009
|
查节点元数据(POSIX `stat`)。`follow_final=true`,解析末级软链 target。
|
|
1012
1010
|
|
|
1011
|
+
可传 `consistency: authoritative`;此模式使用 [权威对象结果](#权威读取与完整发布),不是普通 fs 节点视图。
|
|
1012
|
+
|
|
1013
1013
|
### 参数
|
|
1014
1014
|
|
|
1015
1015
|
| 参数 | 类型 | 必填 | 默认 | 说明 |
|
|
@@ -1018,6 +1018,7 @@ share_url = result["url"] # https://alice.agentid.pub/s/Ab3xK9mZ2q
|
|
|
1018
1018
|
| `owner_aid` | string | 否 | 当前用户 | 所有者 AID |
|
|
1019
1019
|
| `bucket` | string | 否 | `"default"` | 存储桶 |
|
|
1020
1020
|
| `token` | string | 否 | — | 访问 token |
|
|
1021
|
+
| `consistency` | string | 否 | — | 传 `authoritative` 时返回权威对象结果 |
|
|
1021
1022
|
|
|
1022
1023
|
### 响应
|
|
1023
1024
|
|
|
@@ -1092,6 +1093,7 @@ fs 目录节点视图。
|
|
|
1092
1093
|
|
|
1093
1094
|
删除文件/目录/软链(POSIX `rm`,目录用 `recursive`)。**拒绝删除挂载点**(须先 unmount)。
|
|
1094
1095
|
|
|
1096
|
+
|
|
1095
1097
|
### 参数
|
|
1096
1098
|
|
|
1097
1099
|
| 参数 | 类型 | 必填 | 默认 | 说明 |
|
|
@@ -1243,7 +1245,7 @@ fs 目录节点视图。
|
|
|
1243
1245
|
|
|
1244
1246
|
| 参数 | 类型 | 必填 | 默认 | 说明 |
|
|
1245
1247
|
|------|------|------|------|------|
|
|
1246
|
-
| `group_id` | string | 是 | — | 群组标识兼容字段,值语义为目标态 `group_aid` |
|
|
1248
|
+
| `group_id` | string | 是 | — | 群组标识兼容字段,值语义为目标态 `group_aid` |
|
|
1247
1249
|
| `group_owner_aid` | string | 是 | — | 群 owner AID |
|
|
1248
1250
|
| `member_aid` | string | 否 | — | 成员 AID(不传=全员) |
|
|
1249
1251
|
| `reason` | string | 否 | `"membership_changed"` | `dissolved` / `membership_changed` |
|
|
@@ -1356,7 +1358,7 @@ fs 目录节点视图。
|
|
|
1356
1358
|
|
|
1357
1359
|
## storage.set_acl
|
|
1358
1360
|
|
|
1359
|
-
|
|
1361
|
+
授予路径前缀权限,作用于该路径及子路径(最近祖先 ACL 生效)。`w` 写、`x` 删、`r` 读;`r` 可用于 authoritative 读取和受信挂载读取,不能授权普通个人私有对象直接下载。分享私有对象给指定 AID,请使用 `storage.create_share_link` 并设置 `allowed_aids`。
|
|
1360
1362
|
|
|
1361
1363
|
`role:*` 伪主体只允许可信 group 内部门面写入。客户端不能直接对 `group_aid` 空间调用 `storage.set_acl` 设置 `role:admin`;群自有区角色写授权统一使用 `group.fs.set_acl`。
|
|
1362
1364
|
|
|
@@ -1366,7 +1368,7 @@ fs 目录节点视图。
|
|
|
1366
1368
|
|------|------|------|------|------|
|
|
1367
1369
|
| `path` | string | 是 | — | 授权路径前缀 |
|
|
1368
1370
|
| `grantee_aid` | string | 是 | — | 被授权 AID;`role:*` 仅限 group 内部调用 |
|
|
1369
|
-
| `perms` | string | 是 | — | 权限位:`r
|
|
1371
|
+
| `perms` | string | 是 | — | 权限位:`r` 读取、`w` 写入、`x` 删除,可组合 |
|
|
1370
1372
|
| `owner_aid` | string | 否 | 当前用户 | 所有者 AID |
|
|
1371
1373
|
| `bucket` | string | 否 | `"default"` | 存储桶 |
|
|
1372
1374
|
| `expires_at` | integer | 否 | — | 授权过期时间 |
|
|
@@ -1380,7 +1382,7 @@ ACL 视图。
|
|
|
1380
1382
|
|
|
1381
1383
|
## storage.remove_acl
|
|
1382
1384
|
|
|
1383
|
-
|
|
1385
|
+
移除指定路径和 AID 的 ACL。撤销分享链接使用 `storage.revoke_share_link`;群角色 ACL 使用 `group.fs.remove_acl`。
|
|
1384
1386
|
|
|
1385
1387
|
### 参数
|
|
1386
1388
|
|
|
@@ -6,16 +6,17 @@ AUN SDK 文档位于 `docs/sdk/`,索引文件 `docs/sdk/INDEX.md` 分三层:
|
|
|
6
6
|
|
|
7
7
|
当前 SDK 聚焦三主体模型:
|
|
8
8
|
|
|
9
|
-
- `AIDStore
|
|
9
|
+
- `AIDStore`:注册、加载、列举、解析、证书运维与通用 raw/document 多签。
|
|
10
10
|
- `AID`:不可变身份值对象,负责签名、验签和 agent.md 签验。
|
|
11
11
|
- `AUNClient`:认证、连接、状态机、事件和 RPC。
|
|
12
12
|
- `PushFacade`:Python SDK 的当前安装推送登记、注销和 Push Server 批次 ACK。
|
|
13
13
|
- `ServiceProxyClient`:Python SDK 的 Service Proxy provider 侧客户端,负责 Gateway 控制面注册和 proxy-server 数据面隧道注册。
|
|
14
14
|
|
|
15
|
-
业务 RPC 的底层参数见 `09-*-rpc-manual.md`。P2P device 定向发送、TTL volatile 消息、独立游标和 ACK 见 `09-message-rpc-manual.md
|
|
15
|
+
业务 RPC 的底层参数见 `09-*-rpc-manual.md`。P2P device 定向发送、TTL volatile 消息、独立游标和 ACK 见 `09-message-rpc-manual.md`。当前 Agent.md Schema、签名和上传前校验见 `../protocol/Ownership协议定义2.1.md` 与 `04-连接与认证.md`;`../agent.md/SCHEMA.md` 为 legacy 2.0。当前 Ownership 2.1 应用接入见 `Ownership2.1-SDK应用集成指南.md`,SDK 移植见 `Ownership2.1-SDK开发与移植指南.md`,wire schema 见 `../protocol/Ownership协议定义2.1.md`;旧集成/实现指南与管理专题为 legacy。新服务端为旧 SDK 保留隔离的 owner RPC/Auth JSONL,不参与 2.1 双文件关系判断。Group/Org owner 不走通用流程,名片实体主签、owner token 上传、可选 owner 附签、实体证书代际和原 CAS pending见协议 §1.3/§2.5。A/T/H、SDK 内部自动最新页同步、Forward 调度和每个 AUNClient 一个 Pull Gate(同 namespace 单飞、不同 namespace 最多 4 个并行、相同 key 折叠、可运行项前台 FIFO 优先)见 `03-核心概念.md`;`message.history` / `group.history` 与 Piggy ACK 见 Message/Group RPC Manual。
|
|
16
16
|
|
|
17
|
-
Storage 的 SDK VFS、实际字节 MIME 识别、session/PUT/complete Content-Type 一致性、OSS 403、direct backend 上传下载和 ticket / AID Bearer 边界见 `09-storage-rpc-manual.md` 与 `AUN Storage架构设计.md`。
|
|
18
|
-
|
|
17
|
+
Storage 的 SDK VFS、实际字节 MIME 识别、session/PUT/complete Content-Type 一致性、OSS 403、direct backend 上传下载和 ticket / AID Bearer 边界见 `09-storage-rpc-manual.md` 与 `AUN Storage架构设计.md`。
|
|
18
|
+
跨设备业务已读的 `read/read_state/read_changed`、单条/显式空值、回执与共享汇总、scope/owner 绑定、设备映射、晚到位置回填、TS/JS 精确整数和 Group canonical/权限版本及混合域提交见 Message/Group RPC Manual;四端门面与本地 `read_state_sync` 完成事件见 `06-API手册.md`、`04-连接与认证.md`。
|
|
19
|
+
Group 的成员 block/status、暂停群权限和两阶段群主转让,以及 Group FS 的 `group.fs.*` RPC、角色 ACL、`parents` 语义和 memberdata 映射见 `09-group-rpc-manual.md`。Collab 的 `gc`、`reflog`、`revert`、`clone` 及版本化文档/标签语义见 `09-collab-rpc-manual.md`。
|
|
19
20
|
|
|
20
21
|
## 渐进式查阅流程
|
|
21
22
|
|
|
@@ -28,19 +29,22 @@ Group 的成员 block/status、暂停群权限和两阶段群主转让,以及
|
|
|
28
29
|
常见主题:
|
|
29
30
|
|
|
30
31
|
- 身份与认证:AIDStore / AID / 注册 / 加载 / 证书
|
|
31
|
-
-
|
|
32
|
+
- Ownership 2.1:关系仅由当前 agent.md/owner.md 确认;release 保持 v,清理后版本投影为 0/重绑默认 1,Header 只投影校验结果;普通 agent 注册 owner 可选;owner 当前完整原文/摘要/存在性再读,object_id/version 不为读取一致性条件;owner.md 通过 create_upload_session→HTTP PUT→complete_upload 的同一会话发布,expected_version 作发布 CAS,不提供全局/ABA保证;新服务端兼容旧 SDK 的注册、绑定、转移、查询和解绑 RPC 及隔离 Auth JSONL,只激活旧 NS ownership_proof,不写 2.1 双文件,不授 2.1 lock/version/consensus,不覆盖已存现代声明;新 SDK 关系操作不兼容旧服务端;当前应用/移植指南、七 Facade 与 Group/Org 专属生命周期、实体主签及原始多签恢复;v1/proof/escrow 文档为 legacy
|
|
33
|
+
- 连接与状态:AUNClient / 九态状态机 / Gateway / 重连 / 当前 access token getter / connect-disconnect-close 并发与取消
|
|
32
34
|
- E2EE:默认加密、ProtectedHeaders、P2P / Group V2
|
|
33
35
|
- RPC 与事件:`client.call()`、`client.on()`、`client.notify()`、RPC 手册
|
|
34
36
|
- 离线推送: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
|
|
36
|
-
- P2P TTL 消息:`message.send.ttl` 秒级钳制、按 device 内存收件箱、volatile 双游标、自动 ACK/去重、服务 epoch 与重启语义
|
|
37
|
-
-
|
|
38
|
-
-
|
|
37
|
+
- 消息同步:A/T/H、Tail、Forward、History、页内唯一有序发布、应用层跨页幂等排序、每个 AUNClient 一个 Pull Gate(P2P Message/Group Message/Group Event Pull 共享,同 namespace 单飞、不同 namespace 最多 4 个并行、相同 key 折叠、可运行项前台 FIFO 优先)、`source` 来源、`sync.started/progress/stopped` 生命周期、缺 sender IK 有界同步 bootstrap、永久页内 Gap、坏密文推进
|
|
38
|
+
- P2P TTL 消息:`message.send.ttl` 秒级钳制、按 device 内存收件箱、volatile 双游标、自动 ACK/去重、服务 epoch 与重启语义
|
|
39
|
+
- 跨设备已读:P2P/Group 按话题上报、共享汇总、设备映射、单调事件、本地 `read_state_sync`、精确整数、混合域部分提交及幂等重试
|
|
40
|
+
- Storage:SDK VFS、实际字节 MIME 识别、session/PUT/complete Content-Type 一致性、OSS 403、下载 ticket / AID Bearer 边界、`storage.*` low-level RPC
|
|
41
|
+
- Group RPC:成员 block/status、暂停群权限、两阶段群主转让、`group_aid` / `group_id` 兼容、`group.index` 签名索引与 CAS(见 `09-group-rpc-manual.md`、`06-API手册.md`)
|
|
39
42
|
- 群文件系统:`group.fs.*`、`client.group.fs.*`、`aun group fs`、`cp/mv` 上传下载、群自有区角色 ACL 与 `group_aid` 签名、`parents`、JS string 差异和 memberdata 服务端映射(见 `09-group-rpc-manual.md`)
|
|
40
43
|
- 协作(collab):`collab.*` 版本化文档、乐观锁 CAS commit、三方合并、标签、GC、reflog、revert(见 `09-collab-rpc-manual.md`)
|
|
44
|
+
- Credential/Org:服务端实际注册的凭证与组织 RPC、受保护请求、内部接口及未实现占位(见 `09-凭证服务RPC手册.md`、`09-组织服务RPC手册.md`)
|
|
41
45
|
- Service Proxy:`ServiceProxyClient`、`proxy.register_services`、proxy-server `register_services`
|
|
42
|
-
- agent.md:Schema/frontmatter
|
|
43
|
-
- 错误处理:Result、Python `ErrorInfo.cause`、异常、错误码、重试
|
|
46
|
+
- agent.md:Schema/frontmatter、Store.sign/verify 通用多签、显式 file/inPlace、multi-v1 表示协商、4 KiB/总尾区2048 字节限制、`AIDStore.register()` 默认自动上传、上传前完整校验、`agent_md_validation_v1`、`uploader_aid` / `uploaderAid`、`AIDStore.upload_agent_md()` / `download_agent_md()` / `check_agent_md()`、Gateway `_meta.agent_md_etags` 被动观察、`requester` / `peer` / `group` 角色
|
|
47
|
+
- 错误处理:Result、Python `ErrorInfo.cause`、异常、错误码、重试
|
|
44
48
|
|
|
45
49
|
### Step 3:读 Layer 3 摘要
|
|
46
50
|
|
|
@@ -50,17 +54,30 @@ Group 的成员 block/status、暂停群权限和两阶段群主转让,以及
|
|
|
50
54
|
|
|
51
55
|
| 编号 | 文档 | 定位 |
|
|
52
56
|
|------|------|------|
|
|
53
|
-
| - | [CHANGELOG-0.5.6](CHANGELOG-0.5.6.md) | **0.5.6 版本更新日志**:首次签名者回源、下载提交前验签、消息窗口、显式 change-seed 与语言能力边界 |
|
|
57
|
+
| - | [CHANGELOG-0.5.6](CHANGELOG-0.5.6.md) | **0.5.6 版本更新日志**:首次签名者回源、下载提交前验签、消息窗口、显式 change-seed 与语言能力边界 |
|
|
54
58
|
| 01 | [快速开始](01-快速开始.md) | 安装、三主体模型、最小示例 |
|
|
55
|
-
| 02 | [WebSocket协议](02-WebSocket协议.md) | 握手流程、Capabilities 能力声明、各层大小限制、消息格式、裸 WebSocket |
|
|
59
|
+
| 02 | [WebSocket协议](02-WebSocket协议.md) | 握手流程、Capabilities 能力声明、各层大小限制、消息格式、裸 WebSocket |
|
|
56
60
|
| 03 | [核心概念](03-核心概念.md) | AID、A/T/H、Pull Gate、状态机、E2EE |
|
|
57
|
-
| 04 | [连接与认证](04-连接与认证.md) | AIDStore、默认 agent.md 自动上传、连接生命周期并发/取消、当前 access token getter
|
|
61
|
+
| 04 | [连接与认证](04-连接与认证.md) | AIDStore、默认 agent.md 自动上传、连接生命周期并发/取消、当前 access token getter、网关发现、事件、已读状态本地补偿完成事件、agent.md 校验和自动观察 |
|
|
62
|
+
| - | [Ownership 协议定义 2.1](../protocol/Ownership协议定义2.1.md) | 当前双文件关系、版本、签名与授权边界、旧 SDK owner RPC/JSONL 隔离 |
|
|
63
|
+
| - | [Ownership SDK 编排指南 2.1](Ownership-SDK编排指南2.1.md) | 七 Facade、审批、持久任务和恢复 |
|
|
64
|
+
| - | [Ownership 2.1 SDK 应用集成指南](Ownership2.1-SDK应用集成指南.md) | 普通 agent 可选 owner 注册、应用审批、新鲜共识、文件多签与实体上传 |
|
|
65
|
+
| - | [Ownership 2.1 SDK 开发与移植指南](Ownership2.1-SDK开发与移植指南.md) | 统一签验核心、原件复核、owner.md 同会话上传与发布 CAS、NS 原条件与恢复 |
|
|
66
|
+
| - | [Ownership管理专题(legacy)](Ownership管理专题.md) | 四端 P2P owner API、应用层 accept/reject、完整消息 payload、identity escrow、owner 代签 agent.md、metadata 状态和验签边界 |
|
|
67
|
+
| - | [Ownership SDK集成指南(legacy)](Ownership-SDK集成指南.md) | TypeScript 快速接入、应用审批、状态查询及 SDK 编排流程图 |
|
|
68
|
+
| - | [Ownership SDK实现指南(legacy)](Ownership-SDK实现指南.md) | SDK 移植入口、消息拦截、proof/escrow、metadata 和恢复验收 |
|
|
69
|
+
| - | [Ownership协议定义(legacy)](../protocol/Ownership协议定义.md) | P2P/proof/agent.md schema、escrow、owner 授权头与现有 RPC |
|
|
70
|
+
| - | [凭证与组织服务 SDK 应用集成指南](凭证与组织服务SDK应用集成指南.md) | 0.5.19 应用接入、CAP 完整验证、登记回执、成员闭环、代表请求和转让恢复 |
|
|
71
|
+
| - | [凭证与组织服务 SDK 开发与移植指南](凭证与组织服务SDK开发与移植指南.md) | 0.5.19 四端协议实现、canonical JSON、强状态 proof、请求绑定、facade/RPC 和共同向量 |
|
|
72
|
+
| - | [凭证服务 RPC 手册](09-凭证服务RPC手册.md) | Credential Service 实际 RPC、参数和签名状态响应 |
|
|
73
|
+
| - | [组织服务 RPC 手册](09-组织服务RPC手册.md) | Org Service 生命周期/成员 RPC、内部接口和未实现方法 |
|
|
58
74
|
| 05 | [E2EE加密通信](05-E2EE加密通信.md) | E2EE V2、ProtectedHeaders、agent.md 版本提示、recipient wrap |
|
|
59
|
-
|
|
|
60
|
-
|
|
|
61
|
-
|
|
|
62
|
-
|
|
|
63
|
-
| - | [
|
|
75
|
+
| - | [ProtectedHeaders用法专题](ProtectedHeaders用法专题.md) | `protected_headers` 四端 API、实例级/单次调用、E2EE V2 HMAC 完整性和接收信任边界 |
|
|
76
|
+
| 06 | [API手册](06-API手册.md) | AIDStore / Agent.md 校验签名 / AID / AUNClient 生命周期并发 / 四 SDK access token getter / 群组高层身份编排 / History 与已读门面 / 已读变更及本地补偿完成 / 消息来源与 Pull 同步生命周期 / 事件 / RPC |
|
|
77
|
+
| 07 | [错误处理](07-错误处理.md) | Result、Python `ErrorInfo.cause`、异常、错误码、重试 |
|
|
78
|
+
| 08 | [最佳实践](08-最佳实践.md) | 幂等、消息同步/History、AUNClient 级 Pull Gate(同 namespace 单飞、客户端最多 4 个并行)、测试数据 |
|
|
79
|
+
| - | [Storage RPC 手册](09-storage-rpc-manual.md) | Storage RPC、实际字节 MIME、三阶段 Content-Type、OSS 403、HTTP 下载与凭据边界 |
|
|
80
|
+
| - | [AUN Storage架构设计](<../aun-fs/AUN Storage架构设计.md>) | Storage SDK VFS、控制面/数据面分离、类 Linux 权限、mount/symlink、服务端分层 |
|
|
64
81
|
| 09 | `09-*-rpc-manual.md` | 各服务 RPC 参数和响应 |
|
|
65
82
|
| 09 | [Service Proxy RPC手册](09-proxy-rpc-manual.md) | `proxy.*` 控制面和 proxy-server 数据面注册 |
|
|
66
83
|
| 09 | [AID托管API手册](09-custody-api-manual.md) | 可选 custody HTTP 服务 |
|
|
@@ -72,30 +89,42 @@ Group 的成员 block/status、暂停群权限和两阶段群主转让,以及
|
|
|
72
89
|
| 了解最新版本特性和改进 | [CHANGELOG-0.5.6](CHANGELOG-0.5.6.md) |
|
|
73
90
|
| 首次使用 SDK | [01-快速开始](01-快速开始.md) |
|
|
74
91
|
| 理解新构造入口 | [01-快速开始](01-快速开始.md)、[06-API手册](06-API手册.md) |
|
|
75
|
-
| 注册或加载 AID | [04-连接与认证](04-连接与认证.md) |
|
|
76
|
-
|
|
|
77
|
-
|
|
|
92
|
+
| 注册或加载 AID | [04-连接与认证](04-连接与认证.md) |
|
|
93
|
+
| 查旧 SDK owner 注册、绑定、转移、查询及解绑的隔离兼容,或 legacy proof/escrow/代签 | [当前协议兼容边界](../protocol/Ownership协议定义2.1.md) 开篇/§3.2、[详细设计](Ownership2.1详细设计.md) §1 兼容矩阵;历史 wire 见 [Ownership管理专题(legacy)](Ownership管理专题.md)、[legacy 集成指南](Ownership-SDK集成指南.md) |
|
|
94
|
+
| 首次在应用中集成 Ownership 2.1,使用 sign/verify、文件多签与实体上传 | [当前应用集成指南](Ownership2.1-SDK应用集成指南.md)、[API 手册](06-API手册.md#通用-sign--verify)、[编排指南 2.1](Ownership-SDK编排指南2.1.md) |
|
|
95
|
+
| 实现、移植或审查 Ownership 2.1 SDK、统一签验核心与多签 HTTP 兼容 | [当前开发与移植指南](Ownership2.1-SDK开发与移植指南.md) §7 的 owner.md 同会话上传与 expected_version 发布 CAS,object_id/version 非读取条件;[详细设计](Ownership2.1详细设计.md) §1 兼容非回归原则与矩阵;关系有效性只影响依赖 owner 的功能 |
|
|
96
|
+
| Ownership 2.1 当前审查、旧 SDK 兼容、四端修复与验证边界 | [当前审查第十五节](../audit/Ownership2.1代码审查报告.md#十五2026-10-15-追加审查兼容裁决与修复验收);历史 [第十二节](../audit/Ownership2.1代码审查报告.md#十二2026-10-11-本轮复审与修复)、[第十三节](../audit/Ownership2.1代码审查报告.md#十三2026-10-13-审查更正与最小修复验收)、[第 13.8 节复查更正与修复边界](Ownership2.1-TDD分阶段实施计划.md#138-2026-10-13-复查更正与修复边界) |
|
|
97
|
+
| 当前双文件关系、release/清理/重绑版本、Header 投影及 Group/Org 名片 wire | [协议 2.1](../protocol/Ownership协议定义2.1.md) §3/§4.2/§6、§1.3/§2.5;旧 SDK RPC 隔离兼容见开篇/§3.2,旧 escrow/授权头 wire 查 legacy 协议 |
|
|
98
|
+
| 应用接入 Credential/Org 服务 | [凭证与组织服务 SDK 应用集成指南](凭证与组织服务SDK应用集成指南.md) |
|
|
99
|
+
| 实现或移植 Credential/Org SDK | [凭证与组织服务 SDK 开发与移植指南](凭证与组织服务SDK开发与移植指南.md) |
|
|
100
|
+
| 查 Credential Service RPC | [凭证服务 RPC 手册](09-凭证服务RPC手册.md) |
|
|
101
|
+
| 查 Org Service RPC | [组织服务 RPC 手册](09-组织服务RPC手册.md) |
|
|
102
|
+
| 自行发起 HTTP 数据面请求并获取当前 access token | [04-连接与认证](04-连接与认证.md)、[06-API手册](06-API手册.md)、[Storage RPC 手册:数据面 HTTP 下载流程](09-storage-rpc-manual.md#数据面-http-下载流程) |
|
|
103
|
+
| 发布、下载、检查或排查 agent.md(含 Schema/签名/大小限制)及远端 ETag | [当前协议 2.1](../protocol/Ownership协议定义2.1.md)、[04-连接与认证](04-连接与认证.md)、[06-API手册](06-API手册.md)、[../agent.md/远程agent.md缓存与etag透传方案.md](../agent.md/远程agent.md缓存与etag透传方案.md) |
|
|
78
104
|
| 状态机和重连 | [03-核心概念](03-核心概念.md)、[04-连接与认证](04-连接与认证.md) |
|
|
79
105
|
| 查 Capabilities 能力声明、实时推送优化 | [02-WebSocket协议](02-WebSocket协议.md)、[CHANGELOG-0.5.6](CHANGELOG-0.5.6.md) |
|
|
80
106
|
| 登记、更新或注销 `push_notify_aid` | [04-连接与认证](04-连接与认证.md)、[06-API手册](06-API手册.md)、`docs/protocol/15-离线推送通知协议.md` |
|
|
81
|
-
| 查方法签名、群组高层 facade 和 `aid_store` / `aidStore` | [06-API手册](06-API手册.md) |
|
|
82
|
-
| 查消息或群组 RPC、群提及过滤 `mention_mode` | 对应 `09-*-rpc-manual.md`;`mention_mode` 详见 [09-group-rpc-manual.md](09-group-rpc-manual.md) |
|
|
83
|
-
| 查
|
|
84
|
-
| 查
|
|
85
|
-
|
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
107
|
+
| 查方法签名、群组高层 facade 和 `aid_store` / `aidStore` | [06-API手册](06-API手册.md) |
|
|
108
|
+
| 查消息或群组 RPC、群提及过滤 `mention_mode` | 对应 `09-*-rpc-manual.md`;`mention_mode` 详见 [09-group-rpc-manual.md](09-group-rpc-manual.md) |
|
|
109
|
+
| 查 `protected_headers` / ProtectedHeaders 用法及四端 E2EE 细节 | [ProtectedHeaders用法专题](ProtectedHeaders用法专题.md) |
|
|
110
|
+
| 查 P2P device 定向发送或 TTL volatile 消息 | [06-API手册](06-API手册.md)、[09-message-rpc-manual.md](09-message-rpc-manual.md) |
|
|
111
|
+
| 查跨设备业务已读、单条/显式空值、scope/owner、seq 映射、TS/JS 精确整数或 Group canonical/权限版本及混合域提交 | [09-message-rpc-manual.md](09-message-rpc-manual.md)、[09-group-rpc-manual.md](09-group-rpc-manual.md) |
|
|
112
|
+
| 查已读状态补偿完成事件 `read_state_sync`、states/errors 和 `background_sync` 边界 | [04-连接与认证](04-连接与认证.md)、[06-API手册](06-API手册.md) |
|
|
113
|
+
| 查 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) |
|
|
114
|
+
| 查消息事件 `source`、`sync.started/progress/stopped` 和 `delivery.changed` | [06-API手册](06-API手册.md) |
|
|
115
|
+
| 查 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) |
|
|
116
|
+
| 查群组标识 `group_aid` / `group_id` 兼容规范 | [09-group-rpc-manual.md](09-group-rpc-manual.md) |
|
|
117
|
+
| 查成员 block/status、暂停群发言权限或两阶段群主转让 | [09-group-rpc-manual.md](09-group-rpc-manual.md)、[06-API手册](06-API手册.md) |
|
|
89
118
|
| 查 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) |
|
|
90
119
|
| 查群文件系统 RPC / SDK / CLI 入口、群自有区角色 ACL 授权/撤销/查询、`parents` 和 JS string 差异 | [09-group-rpc-manual.md](09-group-rpc-manual.md)、[06-API手册](06-API手册.md) |
|
|
91
|
-
| 查 Storage 架构、SDK VFS、权限模型和 mount/symlink | [AUN Storage架构设计.md](<../aun-fs/AUN Storage架构设计.md>) |
|
|
92
|
-
| 查 Storage MIME 识别、session/PUT/complete Content-Type、OSS 403 或底层 RPC 调用责任 | [09-storage-rpc-manual.md](09-storage-rpc-manual.md)、[06-API手册](06-API手册.md) |
|
|
93
|
-
| 查 Storage 数据面 HTTP 下载流程和 ticket / AID Bearer 边界 | [09-storage-rpc-manual.md](09-storage-rpc-manual.md) |
|
|
120
|
+
| 查 Storage 架构、SDK VFS、权限模型和 mount/symlink | [AUN Storage架构设计.md](<../aun-fs/AUN Storage架构设计.md>) |
|
|
121
|
+
| 查 Storage MIME 识别、session/PUT/complete Content-Type、OSS 403 或底层 RPC 调用责任 | [09-storage-rpc-manual.md](09-storage-rpc-manual.md)、[06-API手册](06-API手册.md) |
|
|
122
|
+
| 查 Storage 数据面 HTTP 下载流程和 ticket / AID Bearer 边界 | [09-storage-rpc-manual.md](09-storage-rpc-manual.md) |
|
|
94
123
|
| 查协作(版本化文档/乐观锁/标签/GC/reflog/revert)RPC | [09-collab-rpc-manual.md](09-collab-rpc-manual.md) |
|
|
95
124
|
| 查 notify 在线轻量通知 / 跨域 federation | [Notify通知方案.md](Notify通知方案.md) |
|
|
96
125
|
| 查 Service Proxy 服务注册和路由 | [06-API手册](06-API手册.md)、[09-proxy-rpc-manual.md](09-proxy-rpc-manual.md) |
|
|
97
126
|
| 查 payload 格式 | [09-payload-reference.md](09-payload-reference.md) |
|
|
98
|
-
| 排查错误或读取 Python 本地原始异常 `cause` | [07-错误处理](07-错误处理.md) |
|
|
127
|
+
| 排查错误或读取 Python 本地原始异常 `cause` | [07-错误处理](07-错误处理.md) |
|
|
99
128
|
| 写测试或 demo | [08-最佳实践](08-最佳实践.md) |
|
|
100
129
|
|
|
101
130
|
|