@agentunion/fastaun-browser 0.5.19 → 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.
Files changed (114) hide show
  1. package/CHANGELOG.md +129 -78
  2. package/_packed_docs/CHANGELOG.md +129 -78
  3. package/_packed_docs/INDEX.md +201 -195
  4. package/_packed_docs/KITE_DOCS_GUIDE.md +93 -90
  5. package/_packed_docs/agent.md/SCHEMA.md +7 -7
  6. 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
  7. package/_packed_docs/protocol/06-/346/234/215/345/212/241/345/215/217/350/256/256.md +1072 -1072
  8. package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +676 -676
  9. package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +8 -12
  10. package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/211.md +443 -0
  11. package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.0.md +161 -0
  12. package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.1.md +658 -0
  13. package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2113.0.md +233 -0
  14. package/_packed_docs/protocol/agent.md/SCHEMA.md +1 -1
  15. package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +1 -1
  16. package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +67 -63
  17. package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +1 -1
  18. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +35 -8
  19. package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +3 -3
  20. package/_packed_docs/sdk/09-group-rpc-manual.md +258 -254
  21. package/_packed_docs/sdk/09-message-rpc-manual.md +7 -4
  22. package/_packed_docs/sdk/09-storage-rpc-manual.md +18 -26
  23. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +61 -52
  24. package/_packed_docs/sdk/INDEX.md +92 -80
  25. package/_packed_docs/sdk/Ownership-SDK/345/256/236/347/216/260/346/214/207/345/215/227.md +169 -0
  26. package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/227.md +349 -0
  27. package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/2272.1.md +922 -0
  28. package/_packed_docs/sdk/Ownership-SDK/351/233/206/346/210/220/346/214/207/345/215/227.md +270 -0
  29. 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
  30. 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
  31. 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
  32. package/_packed_docs/sdk/Ownership2.1/350/257/246/347/273/206/350/256/276/350/256/241.md +476 -0
  33. package/_packed_docs/sdk/Ownership/347/256/241/347/220/206/344/270/223/351/242/230.md +559 -0
  34. package/_packed_docs/sdk/ProtectedHeaders/347/224/250/346/263/225/344/270/223/351/242/230.md +299 -0
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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
  42. 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
  43. package/dist/agent-md-schema.d.ts +15 -4
  44. package/dist/agent-md-schema.d.ts.map +1 -1
  45. package/dist/agent-md-schema.js +64 -30
  46. package/dist/agent-md-schema.js.map +1 -1
  47. package/dist/agent-md.d.ts +10 -2
  48. package/dist/agent-md.d.ts.map +1 -1
  49. package/dist/agent-md.js +278 -121
  50. package/dist/agent-md.js.map +1 -1
  51. package/dist/aid-store.d.ts +46 -0
  52. package/dist/aid-store.d.ts.map +1 -1
  53. package/dist/aid-store.js +149 -10
  54. package/dist/aid-store.js.map +1 -1
  55. package/dist/aid.d.ts +4 -1
  56. package/dist/aid.d.ts.map +1 -1
  57. package/dist/aid.js +23 -42
  58. package/dist/aid.js.map +1 -1
  59. package/dist/auth.d.ts +1 -1
  60. package/dist/auth.d.ts.map +1 -1
  61. package/dist/auth.js +85 -18
  62. package/dist/auth.js.map +1 -1
  63. package/dist/bundle.js +1581 -781
  64. package/dist/cert-utils.d.ts +49 -1
  65. package/dist/cert-utils.d.ts.map +1 -1
  66. package/dist/cert-utils.js +102 -56
  67. package/dist/cert-utils.js.map +1 -1
  68. package/dist/client/delivery.d.ts +7 -0
  69. package/dist/client/delivery.d.ts.map +1 -1
  70. package/dist/client/delivery.js +243 -28
  71. package/dist/client/delivery.js.map +1 -1
  72. package/dist/client/rpc-pipeline.d.ts.map +1 -1
  73. package/dist/client/rpc-pipeline.js +89 -77
  74. package/dist/client/rpc-pipeline.js.map +1 -1
  75. package/dist/client/v2-e2ee.d.ts.map +1 -1
  76. package/dist/client/v2-e2ee.js +99 -80
  77. package/dist/client/v2-e2ee.js.map +1 -1
  78. package/dist/client.d.ts.map +1 -1
  79. package/dist/client.js +31 -17
  80. package/dist/client.js.map +1 -1
  81. package/dist/crypto.d.ts.map +1 -1
  82. package/dist/crypto.js +8 -6
  83. package/dist/crypto.js.map +1 -1
  84. package/dist/events.d.ts +5 -2
  85. package/dist/events.d.ts.map +1 -1
  86. package/dist/events.js +33 -14
  87. package/dist/events.js.map +1 -1
  88. package/dist/facades.js +5 -5
  89. package/dist/facades.js.map +1 -1
  90. package/dist/index.d.ts +1 -1
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js.map +1 -1
  93. package/dist/org-protocol.d.ts.map +1 -1
  94. package/dist/org-protocol.js +72 -12
  95. package/dist/org-protocol.js.map +1 -1
  96. package/dist/ownership-v21.d.ts +25 -8
  97. package/dist/ownership-v21.d.ts.map +1 -1
  98. package/dist/ownership-v21.js +142 -73
  99. package/dist/ownership-v21.js.map +1 -1
  100. package/dist/ownership-workflow.d.ts +6 -1
  101. package/dist/ownership-workflow.d.ts.map +1 -1
  102. package/dist/ownership-workflow.js +221 -58
  103. package/dist/ownership-workflow.js.map +1 -1
  104. package/dist/tools/cross-sdk-agent.d.ts +2 -1
  105. package/dist/tools/cross-sdk-agent.d.ts.map +1 -1
  106. package/dist/tools/cross-sdk-agent.js +91 -8
  107. package/dist/tools/cross-sdk-agent.js.map +1 -1
  108. package/dist/transport.d.ts +1 -0
  109. package/dist/transport.d.ts.map +1 -1
  110. package/dist/transport.js +2 -0
  111. package/dist/transport.js.map +1 -1
  112. package/dist/version.d.ts +1 -1
  113. package/dist/version.js +1 -1
  114. package/package.json +1 -1
@@ -0,0 +1,211 @@
1
+ # AUN 跨设备已读未读详细设计
2
+
3
+ > 依据:`docs/跨设备已读未读方案.md`
4
+ >
5
+ > 版本:v1.3
6
+ >
7
+ > 更新时间:2026-10-11
8
+
9
+ ## 1. 设计目标
10
+
11
+ 同一 AID 在手机、桌面端、Web 端等多个设备上登录时,服务端保存每个设备在每个应用话题上的最后已读消息,并对外提供设备汇总后的已读位置。应用可以据此在本地消息索引上计算话题未读数。
12
+
13
+ 第一期覆盖 P2P 收件箱和 Group 消息;覆盖单条上报、批量上报、部分更新、全量或条件查询、在线变更通知和重连查询补偿。第一期不实现发送方的对端已读回执,也不把业务已读游标混入投递 ACK。
14
+
15
+ ## 2. 最终契约
16
+
17
+ ### 2.1 方法
18
+
19
+ | Gateway 方法 | 服务方法 | 用途 |
20
+ | --- | --- | --- |
21
+ | `message.read` | `read` | 上报 P2P 话题已读位置 |
22
+ | `message.read_state` | `read_state` | 查询 P2P 已读汇总 |
23
+ | `group.read` | `read` | 上报 Group 话题已读位置 |
24
+ | `group.read_state` | `read_state` | 查询 Group 已读汇总 |
25
+
26
+ 服务方法在模块内部使用短名,Gateway 对外仍使用带 namespace 的完整方法名。P2P 已读状态仅由当前身份的 home 域管理,Gateway 将主体绑定认证连接并拒绝 `message.read/read_state` 的 federation 入站和出站,不能信任调用方提供的 `_auth.aid`。`message.read` 和 `group.read` 都是幂等写操作;重试不会重复产生业务状态。
27
+
28
+ ### 2.2 上报请求
29
+
30
+ 下例只对照两种状态字段,实际分别提交到 Message/Group 方法,不能把示意数组作为一个混合 scope 请求发送。
31
+
32
+ ```json
33
+ {
34
+ "states": [
35
+ {
36
+ "scope": "p2p",
37
+ "topic_key": "app-topic-42",
38
+ "last_read_message_id": "m-100"
39
+ },
40
+ {
41
+ "scope": "group",
42
+ "group_id": "group.example/g-1",
43
+ "topic_key": "topic-7",
44
+ "last_read_message_id": "gm-20"
45
+ }
46
+ ]
47
+ }
48
+ ```
49
+
50
+ `message.read` 缺省或空 `scope` 按 `p2p` 处理,非空值只能为 `p2p`;`group.read` 缺省或空 `scope` 按 `group` 处理,非空值只能为 `group`。显式提供的字符串字段必须是字符串,数字、布尔值、对象和 `null` 均不能替代。Group 状态必须有 `group_id`。只有省略 `states` 时才兼容顶层单条状态;显式 `states=[]`、`states=null` 或非数组值均拒绝。四个已读门面必须保留显式 `None/null/nil` 字段并发送给服务端校验,不能删除后当作省略字段。`device_id`、`slot_id` 和 `aid` 不从业务参数取得:设备与 AID 由当前认证连接的 `_auth` 确定,`slot_id` 不参与业务已读键。
51
+
52
+ `topic_key` 原样保存和返回,服务端不生成、不裁剪、不规范化、不解析。空 topic、空 message ID、非法 scope、Group 缺少 group ID 均返回参数错误。服务端只更新请求中出现的键。
53
+
54
+ ### 2.3 查询请求和响应
55
+
56
+ 查询可以携带以下可选过滤字段:
57
+
58
+ ```json
59
+ {
60
+ "scope": "group",
61
+ "topic_key": "app-topic-42",
62
+ "group_id": "group.example/g-1",
63
+ "aid": "current.agentid.pub"
64
+ }
65
+ ```
66
+
67
+ 省略过滤字段返回当前认证 AID 的全部状态;`scope` 在 `message.read_state` 中缺省或为空按 `p2p` 处理、非空值只能为 `p2p`,在 `group.read_state` 中缺省或为空按 `group` 处理、非空值只能为 `group`;`topic_key` 过滤 P2P 或 Group 话题;`group_id` 过滤 Group;两者同时出现时取交集。Group 全量或仅按 topic 查询通过完整成员目录发现远域群,逐群查询并合并有权限的状态,不受群列表默认分页限制。请求中的 `aid` 仅可作为当前认证 AID 的等值选择器,不能读取其它 AID。可选字符串字段省略或为空表示不启用该过滤,显式非字符串值返回参数错误。
68
+
69
+ 响应统一为:
70
+
71
+ ```json
72
+ {
73
+ "scope": "p2p",
74
+ "states": [
75
+ {
76
+ "scope": "p2p",
77
+ "topic_key": "app-topic-42",
78
+ "last_read_message_id": "m-100",
79
+ "last_read_order": 100,
80
+ "current_device_seq": 317,
81
+ "mapping_status": "resolved",
82
+ "updated_at": 1780000000000
83
+ }
84
+ ]
85
+ }
86
+ ```
87
+
88
+ `states` 永远存在且为数组。为兼容单话题调用,过滤结果只有一项时响应同时在顶层镜像该项字段;客户端以 `states` 为主。无状态时返回空数组,不返回虚构的游标。
89
+
90
+ `current_device_seq` 是汇总 `last_read_message_id` 在当前查询设备收件箱的本地 seq,只能来自当前认证设备。公共位置可解析但当前设备没有投递映射时返回 `null` / `not_received`;消息 ID 未知或公共消息索引已清理、无法解析公共位置时返回 `null` / `unresolved`。`last_read_order` 是服务端公共顺序提示,供 SDK 防止乱序缓存回退;它不是设备 seq,不可用于 ACK。
91
+
92
+ 网络 JSON 的 `last_read_order`、`current_device_seq` 使用整数;Gateway 的本域服务及 federation 回程必须无损保留这些整数,不能经浮点中转后再发送。Python 使用整数、Go 使用 `int64`;TS/JS 在安全整数范围内返回 `number`,超出时返回精确十进制字符串,内部以精确整数比较。无法映射的 seq 仍为 `null`。
93
+
94
+ ### 2.4 上报响应
95
+
96
+ ```json
97
+ {
98
+ "updated": 1,
99
+ "ignored": 0,
100
+ "states": [
101
+ {
102
+ "scope": "p2p",
103
+ "topic_key": "app-topic-42",
104
+ "last_read_message_id": "m-100",
105
+ "changed": true
106
+ }
107
+ ]
108
+ }
109
+ ```
110
+
111
+ `states` 是与输入项对应的设备写入回执,不是 AID 共享汇总;不能用它更新 SDK 或应用的共享已读缓存。`changed=false` 表示重复上报或公共消息顺序更旧;旧上报不能回退当前设备状态或 AID 汇总状态。`changed=true` 只表示该设备事实更新,不保证共享汇总前进,定向 P2P 回执也不代表共享位置。相同消息 ID 重复提交成功且不再广播变更。
112
+
113
+ ## 3. 状态模型与顺序
114
+
115
+ ### 3.1 设备事实表
116
+
117
+ Message 和 Group 使用各自独立的数据库,`message_read_states` 只保存 P2P,`group_read_states` 只保存 Group。`scope` 仍是 RPC、响应和事件字段,但不重复存进两个服务自己的状态表。
118
+
119
+ 两张表使用 `id BIGINT UNSIGNED AUTO_INCREMENT`(8 字节)作为主键;幂等性由以下唯一二级索引保证:
120
+
121
+ | 表 | 字段定义 | 唯一索引(同时服务查询) |
122
+ | --- | --- | --- |
123
+ | `message_read_states` | `id BIGINT UNSIGNED`;`owner_aid/device_id/topic_key/last_read_message_id VARCHAR(128)`;`last_read_order/updated_at_ms BIGINT`;`is_targeted TINYINT` | `(owner_aid, topic_key, device_id, is_targeted)` |
124
+ | `group_read_states` | `id BIGINT UNSIGNED`;`owner_aid/device_id/group_id/topic_key/last_read_message_id VARCHAR(128)`;`last_read_order/updated_at_ms BIGINT` | `(owner_aid, group_id, topic_key, device_id)` |
125
+
126
+ 所有 `VARCHAR` 长度单位均为字符,使用 `utf8mb4` 时每字符最多占 4 字节;`BIGINT` 为 8 字节。`owner_aid` 的 128 字符上限按本设计约束,设备 ID、Group ID 和消息 ID 保持服务当前的 128 字符上限;不透明 `topic_key` 本次明确限制为 128 字符。服务在写入和过滤查询前校验这些上限。
127
+
128
+ `topic_key` 定义为 `VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin`。该列使用二进制排序规则进行精确比较,大小写、组合字符形式和首尾空格不会被折叠;服务端和四端 SDK 都按原始字符串保存、查询、响应及写入缓存。已有状态表迁移时若列不是 `utf8mb4_0900_bin`,先执行同长度的列级排序规则变更,不改变现有 topic 内容。
129
+
130
+ 唯一索引按查询过滤列排列,索引左前缀可覆盖按 owner、topic 以及 owner、group、topic 的查询,不另建重复索引。按最坏 `utf8mb4` 估算,Message 唯一索引为 `128*3*4+1=1537` 字节,Group 为 `128*4*4=2048` 字节,均低于 InnoDB 3072 字节上限;聚簇主键均为 8 字节。状态表只保存业务消息 ID,不保存或复用投递 ACK。
131
+
132
+ 旧表迁移先检查 owner、device、topic、message ID 和 Group 的 group ID 字符长度,以及存在的 `scope` 是否只有该服务固定的值;没有 scope 列的旧表也要做长度预检查。超长或键冲突时在结构变更前失败,保留旧表,不截断或丢弃状态行。每次初始化都幂等回填 `last_read_order=0` 的可解析行,即使顺序列已存在,也要继续中断的回填;未知行保留 0。MySQL DDL 会隐式提交,多步迁移不承诺整体事务回滚,失败后通过幂等重启继续。
133
+
134
+ Message 另建 `message_delivery_targets`:`id BIGINT UNSIGNED AUTO_INCREMENT` 主键;`message_id/target_aid/target_device_id VARCHAR(128)`;`created_at_ms BIGINT`;唯一索引 `(message_id,target_aid)` 最坏 1024 字节。只有定向投递记录进入该表,Legacy、V2 与 WAL 重放保留相同目标元数据。
135
+
136
+ 已有旧表迁移必须幂等执行:先检查三列的 `CHAR_LENGTH` 和 `(message_id,target_aid)` 冲突;任一值超过 128 字符或存在冲突时直接失败,不执行 `ALTER TABLE`,保留原表、原数据和原索引。可迁移时删除旧复合主键及 `idx_message_delivery_targets_target(target_aid,target_device_id)`,把三列改为 `VARCHAR(128)`,新增 8 字节自增 `id` 主键和 `uk_message_delivery_targets_identity(message_id,target_aid)`。新结构再次启动时不重复迁移。
137
+
138
+ ### 3.2 公共顺序键
139
+
140
+ 比较同一 AID、同一 scope/topic 的多设备状态时,先按消息服务已有的公共创建时间或 Group 公共 `seq` 比较,再以 `message_id` 作为稳定并列键。不同设备的 P2P inbox seq 永远不参与跨设备比较。
141
+
142
+ 状态行持久化公共 `last_read_order`,历史消息清理后仍可按该位置防止回退。未知消息首次上报可以保存 order=0 的待解析事实,查询返回 `unresolved`,不触发汇总前进事件;未知位置不能覆盖已知位置,两个未知位置不能凭 ID 字典序比较。后续解析到位置后,仅对消息 ID 精确匹配且 `last_read_order=0` 的事实条件回填并持久化;CAS 未命中时重读当前事实,不能只更新缓存或覆盖并发前进的事实,事务内采用相同公共顺序。
143
+
144
+ ### 3.3 汇总
145
+
146
+ 查询时读取当前 AID 的全部设备事实行,并同时纳入 pending/inflight 候选,以公共顺序选出最新 message ID;pending 不能无条件替换同设备较新的数据库事实。服务端不返回设备明细,不泄露其它设备的 `device_id` 或 seq。当前设备所有投递映射均缺失时,绕过公共位置缓存回查数据库,以区分 `not_received` 与 GC 后的 `unresolved`,保证热进程和冷进程一致。
147
+
148
+ ### 3.4 状态缓存与异步批写
149
+
150
+ Message 和 Group 服务各自维护有界进程内缓存。缓存键分别为
151
+ `(owner_aid, device_id, scope, topic_key, is_targeted)` 与
152
+ `(owner_aid, device_id, group_id, scope, topic_key)`,默认容量 4096、TTL 30 秒;消息公共顺序位置也按消息 ID(Group 按 `group_id + message_id`)缓存,并采用同一容量级别的淘汰上限。缓存只用于减少状态行和公共顺序的重复读取,失效后回源状态表,重启不影响事实数据。
153
+
154
+ 状态写入先更新缓存并进入按键合并的内存队列,后台每 100ms 或达到 100 条时执行多值 `INSERT ... ON DUPLICATE KEY UPDATE`。每个 RPC 捕获本次依赖的提交句柄,只等待这些写入,不追随后续同 AID/device 的请求;提交错误也只归属对应句柄。每个刷写批次先按既有排序锁定全部键的已提交事实,Group 同时锁定历史别名并关闭全部查询 Rows,之后才执行首个普通公共位置查询,避免 REPEATABLE READ 在批次中途形成旧快照;再判定同设备更新及共享汇总前进,数据库条件更新按公共顺序与二进制 message ID 保持单调。提交后校正回执,每次真实汇总前进只由一个提交句柄领取并发布事件。
155
+
156
+ 查询合并 pending/inflight 行,因此未完成 RPC 的事实可能提前可见。失败批次重新排队;当前 RPC 返回写入错误且不发送事件,之后重试可能提交该事实。成功 RPC 已持久化;成功返回前崩溃仍可能丢失内存队列,调用方可幂等重试。单个 RPC 可以跨多个刷写批次,后续失败不回滚已提交批次。关闭时在数据库关闭前刷写,失败向关闭流程返回错误。
157
+
158
+ ## 4. 服务端实现
159
+
160
+ ### 4.1 Message
161
+
162
+ `MessageStore` 启动时创建并迁移状态表;上报使用认证 AID/device ID,进入异步合并队列并等待数据库提交。公共位置来自 `message_logical` / `message_inbox`;当前设备映射来自 `message_inbox`、`message_device_delivery` 和 `v2_peer_wraps`。
163
+
164
+ 定向 P2P 消息由 `device_id` / `to_device_id` 标识。`is_targeted=1` 的设备事实与共享事实分别存储;公共查询仅返回面向 AID 的共享汇总,定向上报不覆盖共享事实,也不广播共享变更。当前 RPC 不返回定向设备明细。
165
+
166
+ 目标元数据尚未到达时的否定结果不作永久负缓存;缓存读取在自身锁内核实当前缓存消息的目标元数据,必要时淘汰该否定缓存,避免误删并发新状态。设备事实读取核实 pending、缓存与数据库候选的目标元数据,跳过已确认定向消息的共享候选。若未解析事实已提交到共享槽后目标元数据才到达,事务内按既有单调规则合并到定向槽,再以完整事实键及旧消息 ID/order 精确删除该共享槽,保留已有更前的定向事实,允许正常共享消息推进。
167
+
168
+ ### 4.2 Group
169
+
170
+ Group 服务在 Group schema 迁移中创建状态表。上报和查询先解析 Group 身份,新写状态键与响应/事件使用 canonical `group_id`;历史别名同时参与事务中的事实、公共位置及当前设备映射查询。权限复用既有 `RequireSendGroup` 与群版本同步,不能以陈旧成员缓存授权。公共顺序使用 `group_messages.seq` 或 `group_inbox.seq` 的群内序号;Group 事件状态不写入本表,保留给后续独立契约。
171
+
172
+ 混合所属域的 `group.read` 按所属域拆分,按域首次出现的顺序逐域校验和提交,成功回执保持原输入顺序。任一域失败则整个 RPC 返回错误,已经提交的域不回滚;原请求通过幂等重试收敛,不承诺跨域事务。
173
+
174
+ ### 4.3 RPC 和事件
175
+
176
+ 数据库提交成功且汇总位置前进后发送 `message.read_changed` / `group.read_changed`,包含 `scope`、Group 的 `group_id`、`topic_key`、`last_read_message_id`、`owner_aid`、`updated_at` 和 `last_read_order`。`owner_aid` 必须非空且为状态主体;目标只允许该 AID,显式 route 也不能扩大收件范围。Gateway 对 Kernel 转发校验可信服务来源,Message/Group 来源必须匹配原始事件类型;federation 的 Message 绑定来源域 `owner_aid`,Group 绑定群所属域 `group_id`。Message AID 客户端只能登录所属域 Gateway,通常为本域分发;Group 所属域向外域成员转发已读事件。事件 ID 对 Message 使用 `[owner_aid, topic_key, last_read_message_id]`、对 Group 使用 `[owner_aid, group_id, topic_key, last_read_message_id]` 的 JSON 数组计算 SHA-256;`last_read_order` 不参与摘要。事件不进入 Pull 队列;重连通过查询补偿。
177
+
178
+ ## 5. 四端 SDK 行为
179
+
180
+ Python、TypeScript、JavaScript、Go 在 Message/Group facade 提供:
181
+
182
+ - 已读上报门面:Python/TS/JS 为 `read(params)`,Go 为 `Read(ctx, params)`;支持单条或批量并原样传递 topic key;
183
+ - 已读查询门面:Python 为 `read_state(params)`,TS/JS 为 `readState(params)`,Go 为 `ReadState(ctx, params)`;按 AID、topic、Group 查询;
184
+ - Python/TS/JS 使用 `on(...)`,Go 使用 `On(...)` 接收 `message.read_changed` / `group.read_changed`;payload 的 `scope` 必须匹配原事件,`owner_aid` 必须非空且等于当前身份;
185
+ - 本地按 `scope/group_id/topic_key` 缓存查询或有效事件中的共享汇总,写入回执只登记补偿查询,不进入汇总缓存;
186
+ - 比较已知 `last_read_order`,同序按有效 Unicode 的码点顺序比较 message ID,与服务端 UTF-8 BINARY 顺序一致;未知顺序不能凭更新时间或 ID 猜测前进,也不能压低已知位置;
187
+ - 旧事件直接丢弃,不交付应用;同位置事件不重复交付并保留查询得到的设备映射,新位置事件不继承旧映射;同位置查询可更新映射;
188
+ - 独立登记成功查询的原过滤条件,空结果、全量和按群查询均保留原范围;写入输入和有效事件另登记对应话题;
189
+ - 认证连接成功后逐项补偿,并在 SDK 本地发布 `read_state_sync`,不受消息 `background_sync=false` 开关影响;该事件不增加服务器 RPC 或 WS 事件类型;
190
+ - AID 或 device 切换后清理缓存和登记项;内部以身份代际隔离在途结果,A→B→A 切换也不能复用旧代际;旧结果不得更新缓存或补偿完成事件,原 RPC 调用仍可返回其结果;Go 补偿使用连接后台任务的上下文。
191
+
192
+ `read_state_sync` 包含 `owner_aid`、`states` 和 `errors`。`states` 按状态键去重,只包含本轮成功查询涉及的键在完成时已接受的最新状态,空查询不夹带旧缓存;较新的实时事件可替代旧查询位置,此时映射字段可能缺失。`errors` 每项为 `{method, params, error}`,`error` 为错误文本。无登记项也发布空完成事件。应用应在 `connect()` 前订阅,连接返回不代表补偿已经完成。
193
+
194
+ SDK 不修改 `message.pull`、`message.history`、`message.ack`、`group.pull`、`group.pull_events`、`group.ack_messages`、`group.ack_events` 和 SeqTracker 语义。`current_device_seq=null` 原样暴露给应用。
195
+
196
+ ## 6. 一致性、权限和失败处理
197
+
198
+ 1. `_auth.aid` 为空直接拒绝;查询的 `aid` 非当前主体时拒绝。
199
+ 2. 单调更新、重复幂等、旧值忽略均在服务端完成,客户端重试安全。
200
+ 3. 同域批量先校验该域全部项,参数或权限校验失败不提交该域;刷写分批失败及混合域失败可能已有部分提交,RPC 不承诺跨批次或跨域回滚,客户端原样幂等重试。
201
+ 4. 事件定向分发失败不回滚已提交状态;客户端依靠查询补偿。
202
+ 5. 状态表写入失败不改变 ACK、Pull 或消息内容。
203
+ 6. Group 成员被移除后不能继续写对应 Group 状态;历史状态保留,重新加入后仍可查询有权限的状态。
204
+
205
+ ## 7. 观测与兼容
206
+
207
+ 服务端记录 RPC 方法、状态数量、changed/ignored 数量和映射状态计数,成功及失败日志均不记录 payload 或 topic 内容,失败日志也不能通过原始错误文本泄露 topic。旧客户端未调用新方法时行为完全不变;新客户端连接到不支持方法的旧服务端时返回标准 Method not found,SDK 不自动修改 ACK 或 Pull 作为降级。
208
+
209
+ ## 8. 验收判定
210
+
211
+ 必须同时满足:单元测试覆盖单调/幂等/过滤/映射边界;单域集成覆盖双设备、P2P/Group、多话题和定向消息;E2E 覆盖重连、事件和缓存;跨 SDK 覆盖 Python/TS/JS/Go 互调;跨域覆盖双方域的 Group/P2P 状态写入、查询与事件路由。现有不相关测试不得因本功能失败。
@@ -1,17 +1,28 @@
1
+ import { type DocumentCertificateResolver } from './cert-utils.js';
1
2
  export declare const AGENT_MD_MAX_SIGNATURE_BYTES = 2048;
2
- export declare function parseFileFrontmatter(payload: string): Record<string, unknown>;
3
- export declare function validateAgentMdDocument(content: string, opts?: {
3
+ export declare function parseFileFrontmatter(payload: string, allowEmpty?: boolean, validateOwnershipNumbers?: boolean): Record<string, unknown>;
4
+ type AgentMdDocumentOptions = {
4
5
  expectedAid?: string;
5
6
  maxPayloadBytes?: number;
6
7
  requireSignature?: boolean;
7
8
  now?: number;
8
9
  validateOwnership?: boolean;
9
10
  checkTimestamp?: boolean;
10
- }): {
11
+ };
12
+ export declare function validateAgentMdDocument(content: string, opts?: AgentMdDocumentOptions): {
13
+ payload: string;
14
+ frontmatter: Record<string, unknown>;
15
+ signature: Record<string, string> | null;
16
+ signatures: import("./cert-utils.js").DocumentSignature[];
17
+ };
18
+ export declare function validateAgentMdDocumentForRead(content: string, opts?: AgentMdDocumentOptions, fallbackAid?: string | undefined): {
11
19
  payload: string;
12
20
  frontmatter: Record<string, unknown>;
13
21
  signature: Record<string, string> | null;
22
+ signatures: import("./cert-utils.js").DocumentSignature[];
14
23
  };
15
- export declare function verifyAgentMdUpload(content: string, certPem: string, expectedAid: string, now?: number): Promise<void>;
24
+ export declare function verifyAgentMdUpload(content: string, certPem: string, expectedAid: string, now?: number, resolver?: DocumentCertificateResolver): Promise<void>;
25
+ export declare function verifyAgentMdLegacyBodyUpload(content: string, certPem: string, expectedAid: string, now?: number, resolver?: DocumentCertificateResolver): Promise<void>;
16
26
  export declare function validateAgentMdCertificate(certPem: string, expectedAid: string, timestamp: number, now?: number, requireCurrentValidity?: boolean): void;
27
+ export {};
17
28
  //# sourceMappingURL=agent-md-schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-md-schema.d.ts","sourceRoot":"","sources":["../src/agent-md-schema.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,4BAA4B,OAAO,CAAC;AASjD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqB7E;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO;;;;EA6CtN;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ5H;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,GAAG,CAAC,EAAE,MAAM,EACZ,sBAAsB,UAAO,GAC5B,IAAI,CASN"}
1
+ {"version":3,"file":"agent-md-schema.d.ts","sourceRoot":"","sources":["../src/agent-md-schema.ts"],"names":[],"mappings":"AACA,OAAO,EAA4J,KAAK,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAO7N,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAajD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,UAAQ,EAAE,wBAAwB,UAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsBlI;AAED,KAAK,sBAAsB,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAElL,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,sBAA2B;;;;;EAEzF;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,sBAA2B,EAAE,WAAW,qBAAmB;;;;;EAIhI;AA0DD,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpK;AAED,wBAAsB,6BAA6B,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9K;AAeD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,GAAG,CAAC,EAAE,MAAM,EACZ,sBAAsB,UAAO,GAC5B,IAAI,CASN"}
@@ -1,18 +1,21 @@
1
1
  import { ValidationError } from './errors.js';
2
- import { parseAgentMdTailSignature, parseCertMetadata, verifySignatureWithCert, certFingerprint, publicKeyMatchesFingerprint, isStrictBase64 } from './cert-utils.js';
2
+ import { parseAgentMdTailSignature, parseAgentMdTailSignatureForRead, parseCertMetadata, certFingerprint, isStrictBase64, normalizeFingerprintHex, verifyDocument } from './cert-utils.js';
3
3
  import { isAlias, parseDocument, visit } from 'yaml';
4
4
  import { validateOwnershipFrontmatter } from './ownership-proof.js';
5
5
  import { validateOwnershipAgentFrontmatter } from './ownership-v21.js';
6
6
  const AID_RE = /^[A-Za-z0-9_][A-Za-z0-9_-]*(?:\.[A-Za-z0-9_][A-Za-z0-9_-]*)+$/;
7
7
  const SEMVER_RE = /^\d+\.\d+\.\d+$/;
8
8
  export const AGENT_MD_MAX_SIGNATURE_BYTES = 2048;
9
+ function aidEqual(left, right) {
10
+ return typeof left === 'string' && typeof right === 'string' && left.toLowerCase() === right.toLowerCase();
11
+ }
9
12
  function assertValidUtf8Text(content) {
10
13
  const encoded = new TextEncoder().encode(content);
11
14
  if (new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(encoded) !== content) {
12
15
  throw new ValidationError('agent.md must be valid UTF-8 text');
13
16
  }
14
17
  }
15
- export function parseFileFrontmatter(payload) {
18
+ export function parseFileFrontmatter(payload, allowEmpty = false, validateOwnershipNumbers = true) {
16
19
  const lines = payload.replace(/^\ufeff/, '').split(/\r\n|\n|\r/);
17
20
  if (lines[0]?.trim() !== '---')
18
21
  throw new ValidationError('agent.md must start with YAML frontmatter');
@@ -28,26 +31,35 @@ export function parseFileFrontmatter(payload) {
28
31
  });
29
32
  if (doc.warnings.length)
30
33
  throw new ValidationError(`agent.md frontmatter is invalid: ${doc.warnings[0].message}`);
31
- for (const path of [
34
+ for (const path of validateOwnershipNumbers ? [
32
35
  ['ownership', 'statement', 'version'], ['ownership', 'statement', 'relation_version'], ['ownership', 'statement', 'declared_at'],
33
36
  ['ownership', 'transfer', 'target_relation_version'], ['ownership', 'transfer', 'expires_at'],
34
- ]) {
37
+ ] : []) {
35
38
  const scalar = doc.getIn(path, true);
36
39
  if (scalar && typeof scalar.value === 'number' && !/^(?:0|[1-9][0-9]*)$/.test(scalar.source ?? ''))
37
40
  throw new ValidationError(`${path.join('.')} must be a YAML integer`);
38
41
  }
39
42
  const result = doc.toJS();
43
+ if (allowEmpty && doc.contents === null)
44
+ return {};
40
45
  if (!result || typeof result !== 'object' || Array.isArray(result))
41
46
  throw new ValidationError('agent.md frontmatter must be a mapping');
42
47
  return result;
43
48
  }
44
49
  export function validateAgentMdDocument(content, opts = {}) {
50
+ return validateAgentMdDocumentForPurpose(content, opts);
51
+ }
52
+ export function validateAgentMdDocumentForRead(content, opts = {}, fallbackAid = opts.expectedAid) {
53
+ const parsed = validateAgentMdDocumentForPurpose(content, opts, true, fallbackAid);
54
+ if (['group', 'org'].includes(String(parsed.frontmatter.type)) && !(parsed.frontmatter.type === 'group' && parsed.signatures.length === 1 && !Object.hasOwn(parsed.frontmatter, 'entity_cert_fingerprint') && (parsed.signature?.signer_aid === undefined || aidEqual(parsed.signature.signer_aid, parsed.frontmatter.aid))))
55
+ return validateAgentMdDocument(content, opts);
56
+ return parsed;
57
+ }
58
+ function validateAgentMdDocumentForPurpose(content, opts, reading = false, fallbackAid) {
45
59
  if (!String(content ?? '').trim())
46
60
  throw new ValidationError('agent.md content cannot be empty');
47
61
  assertValidUtf8Text(String(content));
48
- if ((String(content).match(/<!-- AUN-SIGNATURE/g) ?? []).length > 1)
49
- throw new ValidationError('agent.md must contain exactly one signature block');
50
- const parsed = parseAgentMdTailSignature(String(content));
62
+ const parsed = (reading ? parseAgentMdTailSignatureForRead : parseAgentMdTailSignature)(String(content));
51
63
  if (parsed.parseError)
52
64
  throw new ValidationError(parsed.parseError);
53
65
  if (opts.requireSignature && !parsed.fields)
@@ -56,7 +68,17 @@ export function validateAgentMdDocument(content, opts = {}) {
56
68
  throw new ValidationError('agent.md payload exceeds 4096 bytes');
57
69
  if (parsed.fields && new TextEncoder().encode(String(content)).byteLength - new TextEncoder().encode(parsed.payload).byteLength > AGENT_MD_MAX_SIGNATURE_BYTES)
58
70
  throw new ValidationError(`agent.md signature block exceeds ${AGENT_MD_MAX_SIGNATURE_BYTES} bytes`);
59
- const meta = parseFileFrontmatter(parsed.payload);
71
+ const meta = reading && parsed.fields && parsed.payload.replace(/^\ufeff/, '').split(/\r\n|\n|\r/, 1)[0]?.trim() !== '---' ? { aid: fallbackAid } : parseFileFrontmatter(parsed.payload, reading && !!parsed.fields, !reading);
72
+ if (reading && parsed.fields) {
73
+ if (!Object.hasOwn(meta, 'aid'))
74
+ meta.aid = fallbackAid;
75
+ if (!Object.hasOwn(meta, 'name'))
76
+ meta.name = meta.aid;
77
+ if (!Object.hasOwn(meta, 'type'))
78
+ meta.type = 'agent';
79
+ if (!Object.hasOwn(meta, 'version'))
80
+ meta.version = '1.0.0';
81
+ }
60
82
  for (const key of ['aid', 'name', 'type', 'version'])
61
83
  if (!(key in meta))
62
84
  throw new ValidationError(`agent.md frontmatter missing ${key}`);
@@ -86,12 +108,13 @@ export function validateAgentMdDocument(content, opts = {}) {
86
108
  if (meta.tags !== undefined && (!Array.isArray(meta.tags) || meta.tags.some((item) => typeof item !== 'string')))
87
109
  throw new ValidationError('agent.md tags must be an array of strings');
88
110
  const entity = ['group', 'org'].includes(String(meta.type));
111
+ const legacyEntity = reading && meta.type === 'group' && !Object.hasOwn(meta, 'entity_cert_fingerprint') && parsed.signatures.length === 1 && parsed.fields && (parsed.fields.signer_aid === undefined || aidEqual(parsed.fields.signer_aid, meta.aid));
89
112
  if (entity) {
90
- if (typeof meta.owner !== 'string' || !AID_RE.test(meta.owner))
113
+ if ((!legacyEntity || Object.hasOwn(meta, 'owner')) && (typeof meta.owner !== 'string' || !AID_RE.test(meta.owner)))
91
114
  throw new ValidationError('group/org agent.md requires owner');
92
- if (typeof meta.entity_cert_fingerprint !== 'string' || !/^sha256:[0-9a-f]{64}$/.test(meta.entity_cert_fingerprint))
115
+ if ((!legacyEntity || Object.hasOwn(meta, 'entity_cert_fingerprint')) && (typeof meta.entity_cert_fingerprint !== 'string' || !/^sha256:[0-9a-f]{64}$/.test(meta.entity_cert_fingerprint)))
93
116
  throw new ValidationError('group/org agent.md requires entity_cert_fingerprint');
94
- if (['ownership', 'ownership_proof', 'ownership_release'].some((field) => Object.hasOwn(meta, field)))
117
+ if (!legacyEntity && ['ownership', 'ownership_proof', 'ownership_release'].some((field) => Object.hasOwn(meta, field)))
95
118
  throw new ValidationError('group/org agent.md cannot use Ownership 2.1');
96
119
  }
97
120
  else if (opts.validateOwnership ?? true) {
@@ -102,35 +125,46 @@ export function validateAgentMdDocument(content, opts = {}) {
102
125
  }
103
126
  const fields = parsed.fields;
104
127
  if (fields) {
105
- if (Object.keys(fields).some((key) => !['cert_fingerprint', 'public_key_fingerprint', 'timestamp', 'signature', ...(entity ? ['signer_aid'] : [])].includes(key)))
128
+ if (Object.keys(fields).some((key) => !['cert_fingerprint', 'public_key_fingerprint', 'timestamp', 'signature', 'signer_aid'].includes(key)))
106
129
  throw new ValidationError('agent.md signature contains unknown fields');
107
- if (entity && ![meta.aid, meta.owner].includes(fields.signer_aid ?? meta.aid))
108
- throw new ValidationError('group/org agent.md signer must be entity or owner');
109
- if (!/^sha256:[0-9a-f]{64}$/.test(fields.cert_fingerprint))
130
+ if (!entity && fields.signer_aid !== undefined)
131
+ throw new ValidationError('ordinary agent.md main signature contains unknown signer_aid');
132
+ if (entity && (legacyEntity ? fields.signer_aid !== undefined && !aidEqual(fields.signer_aid, meta.aid) : !aidEqual(fields.signer_aid, meta.aid) || fields.cert_fingerprint !== meta.entity_cert_fingerprint))
133
+ throw new ValidationError('group/org agent.md primary signer must be entity');
134
+ if (entity && parsed.signatures.slice(1).some((block) => !aidEqual(block.fields.signer_aid, meta.owner)))
135
+ throw new ValidationError('group/org agent.md additional signer must be current owner');
136
+ const fingerprintPattern = /^sha256:[0-9a-f]{64}$/;
137
+ if (reading ? !normalizeFingerprintHex(fields.cert_fingerprint) : !fingerprintPattern.test(fields.cert_fingerprint))
110
138
  throw new ValidationError('agent.md cert_fingerprint is invalid');
111
- if (fields.public_key_fingerprint !== undefined && !/^sha256:[0-9a-f]{64}$/.test(fields.public_key_fingerprint))
139
+ if (fields.public_key_fingerprint !== undefined && (reading ? !normalizeFingerprintHex(fields.public_key_fingerprint) : !fingerprintPattern.test(fields.public_key_fingerprint)))
112
140
  throw new ValidationError('agent.md public_key_fingerprint is invalid');
113
- if (!/^[1-9][0-9]*$/.test(fields.timestamp) || !Number.isSafeInteger(Number(fields.timestamp)) || !isStrictBase64(fields.signature))
141
+ if (!(reading ? /^[0-9]+$/ : /^[1-9][0-9]*$/).test(fields.timestamp) || !Number.isSafeInteger(Number(fields.timestamp)) || Number(fields.timestamp) <= 0 || !isStrictBase64(fields.signature))
114
142
  throw new ValidationError('agent.md signature fields are invalid');
115
143
  const now = Math.trunc(opts.now ?? Date.now() / 1000);
116
144
  const ts = Number(fields.timestamp);
117
145
  if ((opts.checkTimestamp ?? true) && ts > now + 300)
118
146
  throw new ValidationError('agent.md signature timestamp is too far in the future');
119
147
  }
120
- return { payload: parsed.payload, frontmatter: meta, signature: fields };
148
+ return { payload: parsed.payload, frontmatter: meta, signature: fields, signatures: parsed.signatures };
121
149
  }
122
- export async function verifyAgentMdUpload(content, certPem, expectedAid, now) {
123
- const parsed = validateAgentMdDocument(content, { expectedAid, requireSignature: true, now });
150
+ export async function verifyAgentMdUpload(content, certPem, expectedAid, now, resolver) {
151
+ return verifyAgentMdUploadForPurpose(content, certPem, expectedAid, now, true, resolver);
152
+ }
153
+ export async function verifyAgentMdLegacyBodyUpload(content, certPem, expectedAid, now, resolver) {
154
+ return verifyAgentMdUploadForPurpose(content, certPem, expectedAid, now, false, resolver);
155
+ }
156
+ async function verifyAgentMdUploadForPurpose(content, certPem, expectedAid, now, validateOwnership = true, resolver) {
157
+ const parsed = validateAgentMdDocument(content, { expectedAid, requireSignature: true, now, validateOwnership });
124
158
  const fields = parsed.signature;
125
- const signer = ['group', 'org'].includes(String(parsed.frontmatter.type)) ? fields.signer_aid ?? expectedAid : expectedAid;
126
- validateAgentMdCertificate(certPem, signer, Number(fields.timestamp), now);
127
- const actualCertFingerprint = (await certFingerprint(certPem)).toLowerCase();
128
- if (actualCertFingerprint !== fields.cert_fingerprint.trim().toLowerCase())
129
- throw new ValidationError('agent.md certificate fingerprint mismatch');
130
- if (fields.public_key_fingerprint && !(await publicKeyMatchesFingerprint(certPem, fields.public_key_fingerprint)))
131
- throw new ValidationError('agent.md public key fingerprint mismatch');
132
- if (!(await verifySignatureWithCert(certPem, fields.signature, new TextEncoder().encode(parsed.payload))))
133
- throw new ValidationError('agent.md signature verification failed');
159
+ const verified = await verifyDocument(content, async (signer, fingerprint, timestamp) => {
160
+ const material = signer.toLowerCase() === expectedAid.toLowerCase() && await certFingerprint(certPem) === fingerprint ? certPem : resolver ? await resolver(signer, fingerprint, timestamp) : '';
161
+ const pem = typeof material === 'string' ? material : material.certPem;
162
+ validateAgentMdCertificate(pem, signer, timestamp, now);
163
+ return pem;
164
+ }, { expectedAid, now, requireCurrentValidity: true });
165
+ if (!verified.valid) {
166
+ throw new ValidationError(verified.reason || 'agent.md signature verification failed');
167
+ }
134
168
  }
135
169
  export function validateAgentMdCertificate(certPem, expectedAid, timestamp, now, requireCurrentValidity = true) {
136
170
  const metadata = parseCertMetadata(certPem);
@@ -141,7 +175,7 @@ export function validateAgentMdCertificate(certPem, expectedAid, timestamp, now,
141
175
  throw new ValidationError('agent.md signing certificate is invalid');
142
176
  if (requireCurrentValidity && (current < notBefore || current > notAfter))
143
177
  throw new ValidationError('agent.md signing certificate is expired or not yet valid');
144
- if (metadata.subject.trim().toLowerCase() !== expectedAid.trim().toLowerCase())
178
+ if (requireCurrentValidity ? !aidEqual(metadata.subject, expectedAid) : !aidEqual(metadata.subject.trim(), expectedAid.trim()))
145
179
  throw new ValidationError('agent.md signing certificate subject does not match AID');
146
180
  if (timestamp < notBefore || timestamp > notAfter)
147
181
  throw new ValidationError('agent.md signature timestamp is outside certificate validity');
@@ -1 +1 @@
1
- {"version":3,"file":"agent-md-schema.js","sourceRoot":"","sources":["../src/agent-md-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-md-schema.js","sourceRoot":"","sources":["../src/agent-md-schema.ts"],"names":[],"mappings":"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"}
@@ -107,6 +107,14 @@ export declare class AgentMdManager {
107
107
  authorization?: string;
108
108
  } | null>;
109
109
  resumePendingUpload(aid: string, signer?: AID): Promise<boolean>;
110
+ private _parseBodyUpdate;
111
+ private _isLegacyBodyRelation;
112
+ private _bodyRelationFields;
113
+ private _sameBodyRelation;
114
+ private _readLegacyBodyFresh;
115
+ private _verifyLegacyBodyOriginal;
116
+ private _verifyPeerDocument;
117
+ private _verifyBodyUpload;
110
118
  private _uploadPrepared;
111
119
  readEntityAuthorityFresh(target: string): Promise<{
112
120
  owner_aid: string;
@@ -116,6 +124,7 @@ export declare class AgentMdManager {
116
124
  private _entityCurrentContext;
117
125
  private _entityContext;
118
126
  private _entityDocumentSigner;
127
+ private _verifyEntityDocument;
119
128
  private _verifyEntityOwnerSigner;
120
129
  download(aid?: string | null, timeoutMs?: number): Promise<AgentMdDownloadResult>;
121
130
  check(aid?: string | null, ttlDays?: number): Promise<AgentMdCheckResult>;
@@ -128,7 +137,7 @@ export declare class AgentMdManager {
128
137
  } | null>;
129
138
  readContent(aid: string): Promise<string | null>;
130
139
  writeContent(aid: string, content: string): Promise<void>;
131
- loadRecord(aid: string): Promise<Record<string, unknown> | null>;
140
+ loadRecord(aid: string, strict?: boolean): Promise<Record<string, unknown> | null>;
132
141
  saveRecord(aid: string, fields: Record<string, unknown>): Promise<Record<string, unknown>>;
133
142
  static contentEtag(content: string): Promise<string>;
134
143
  private static checkedAtFresh;
@@ -145,7 +154,6 @@ export declare class AgentMdManager {
145
154
  private _resolvePeer;
146
155
  private _accessToken;
147
156
  private _uploadAccessToken;
148
- private _validateEntityUploadAuthorization;
149
157
  private _ownerUploadAuthorization;
150
158
  private _url;
151
159
  private _uploadHttp;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-md.d.ts","sourceRoot":"","sources":["../src/agent-md.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-md.d.ts","sourceRoot":"","sources":["../src/agent-md.ts"],"names":[],"mappings":"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"}