@agentunion/fastaun 0.5.33 → 0.5.35
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 +59 -2
- package/README.md +28 -26
- package/_packed_docs/CHANGELOG.md +59 -2
- package/_packed_docs/INDEX.md +26 -12
- package/_packed_docs/KITE_DOCS_GUIDE.md +17 -11
- package/_packed_docs/agent.md/SCHEMA.md +1 -1
- package/_packed_docs/aun/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +2 -2
- package/_packed_docs/protocol/03-Gateway-/350/277/236/346/216/245/346/250/241/345/274/217.md +58 -8
- package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.1.md +17 -17
- package/_packed_docs/protocol/echo-probe-gateway.md +99 -0
- package/_packed_docs/protocol/echo-probe-sdk.md +91 -0
- package/_packed_docs/sdk/0.5.33-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +464 -316
- package/_packed_docs/sdk/0.5.33-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +499 -304
- package/_packed_docs/sdk/0.5.34-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +133 -0
- package/_packed_docs/sdk/0.5.34-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +107 -0
- package/_packed_docs/sdk/0.5.35-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +189 -0
- package/_packed_docs/sdk/0.5.35-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +204 -0
- package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +16 -13
- package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +13 -1
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +19 -9
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +87 -20
- package/_packed_docs/sdk/09-collab-rpc-manual.md +48 -30
- package/_packed_docs/sdk/09-custody-api-manual.md +3 -3
- package/_packed_docs/sdk/09-group-rpc-manual.md +60 -13
- package/_packed_docs/sdk/09-message-rpc-manual.md +22 -0
- package/_packed_docs/sdk/09-meta-rpc-manual.md +2 -1
- package/_packed_docs/sdk/09-payload-reference.md +9 -8
- package/_packed_docs/sdk/09-proxy-rpc-manual.md +20 -14
- package/_packed_docs/sdk/09-storage-rpc-manual.md +1698 -1659
- package/_packed_docs/sdk/09-stream-rpc-manual.md +33 -20
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +19 -17
- package/_packed_docs/sdk/AUN/344/272/213/344/273/266/345/217/221/345/270/203/350/256/242/351/230/205/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +125 -30
- package/_packed_docs/sdk/AUN/344/272/213/344/273/266/345/217/221/345/270/203/350/256/242/351/230/205/345/274/200/345/217/221/347/247/273/346/244/215/346/214/207/345/215/227.md +109 -33
- package/_packed_docs/sdk/INDEX.md +30 -18
- package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/2272.1.md +1 -1
- 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 +5 -5
- 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 +5 -5
- package/_packed_docs/sdk/Ownership2.1/350/257/246/347/273/206/350/256/276/350/256/241.md +9 -9
- package/_packed_docs/sdk/README.md +11 -6
- package/_packed_docs//346/266/210/346/201/257/345/274/271/346/200/247/350/241/245/346/213/211/351/200/232/351/201/223/345/256/236/346/226/275/350/256/241/345/210/222.md +400 -0
- package/_packed_docs//346/266/210/346/201/257/345/274/271/346/200/247/350/241/245/346/213/211/351/200/232/351/201/223/346/226/271/346/241/210.md +485 -0
- package/dist/auth.js +39 -45
- package/dist/auth.js.map +1 -1
- package/dist/client/control-messages.js +2 -2
- package/dist/client/control-messages.js.map +1 -1
- package/dist/client/delivery.d.ts +12 -1
- package/dist/client/delivery.js +281 -46
- package/dist/client/delivery.js.map +1 -1
- package/dist/client/lifecycle.js +13 -1
- package/dist/client/lifecycle.js.map +1 -1
- package/dist/client/rpc-budget.d.ts +21 -0
- package/dist/client/rpc-budget.js +82 -0
- package/dist/client/rpc-budget.js.map +1 -0
- package/dist/client/rpc-pipeline.d.ts +5 -0
- package/dist/client/rpc-pipeline.js +227 -63
- package/dist/client/rpc-pipeline.js.map +1 -1
- package/dist/client/sync-channels.d.ts +90 -0
- package/dist/client/sync-channels.js +508 -0
- package/dist/client/sync-channels.js.map +1 -0
- package/dist/client/v2-e2ee.d.ts +5 -1
- package/dist/client/v2-e2ee.js +420 -303
- package/dist/client/v2-e2ee.js.map +1 -1
- package/dist/client.d.ts +17 -0
- package/dist/client.js +373 -50
- package/dist/client.js.map +1 -1
- package/dist/events.d.ts +1 -0
- package/dist/events.js +5 -0
- package/dist/events.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mail-client.d.ts +101 -0
- package/dist/mail-client.js +369 -0
- package/dist/mail-client.js.map +1 -0
- package/dist/pubsub/binding.js +23 -3
- package/dist/pubsub/binding.js.map +1 -1
- package/dist/pubsub/channel.d.ts +15 -3
- package/dist/pubsub/channel.js +114 -7
- package/dist/pubsub/channel.js.map +1 -1
- package/dist/pubsub/client.d.ts +17 -2
- package/dist/pubsub/client.js +205 -40
- package/dist/pubsub/client.js.map +1 -1
- package/dist/pubsub/credentials.d.ts +3 -0
- package/dist/pubsub/credentials.js +57 -20
- package/dist/pubsub/credentials.js.map +1 -1
- package/dist/pubsub/index.d.ts +5 -2
- package/dist/pubsub/index.js +70 -54
- package/dist/pubsub/index.js.map +1 -1
- package/dist/pubsub/service.d.ts +9 -0
- package/dist/pubsub/service.js +266 -20
- package/dist/pubsub/service.js.map +1 -1
- package/dist/pubsub/types.d.ts +13 -1
- package/dist/storage/lowlevel.d.ts +3 -1
- package/dist/storage/lowlevel.js +13 -0
- package/dist/storage/lowlevel.js.map +1 -1
- package/dist/storage/types.d.ts +10 -0
- package/dist/storage/types.js.map +1 -1
- package/dist/storage/vfs.d.ts +3 -1
- package/dist/storage/vfs.js +2 -2
- package/dist/storage/vfs.js.map +1 -1
- package/dist/tools/cross-sdk-agent.d.ts +55 -5
- package/dist/tools/cross-sdk-agent.js +88 -21
- package/dist/tools/cross-sdk-agent.js.map +1 -1
- package/dist/transport.d.ts +16 -0
- package/dist/transport.js +129 -7
- package/dist/transport.js.map +1 -1
- package/dist/udp-standby.d.ts +89 -0
- package/dist/udp-standby.js +487 -0
- package/dist/udp-standby.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +5 -1
- package/scripts/patch-imapflow-external.mjs +69 -0
package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.1.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
普通 `agent.md` 的基础读取、验签、上传与显式 pending 恢复不以前置 Ownership 共识、owner Storage 或关系状态为条件。普通正文更新须原样保留当前原件中全部关系材料的字段存在性、类型和值,并遵守本人签名和原 ETag/CAS;材料无效或依赖不可用不能阻断这种更新。增删改关系字段继续执行当前双文件授权核验,不能借普通名片入口清除或替换 owner 锁。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
本协议的双文件声明与共识适用于 `human` 以外的主体,包含现代 `group/org`;`human` 禁止声明 owner。自 SDK 0.5.31 起,Group/Org 使用相同的 `ownership.statement` 和 `owner.md`,但绑定、释放及转移仍由第 1.3 节的专属生命周期编排,普通 Ownership 管理入口不直接操作群/组织。通用关系双方独立签署自己的声明文件;Group/Org 由实体签署名片、当前 owner 上传,见第 2.5 节。本协议不定义 ownership 专用授权 RPC 或权威关系控制方法,也不提供协议层关系申请、接受、拒绝方法。SDK 可以使用普通加密 P2P 载荷进行非权威编排,也可在持有各方身份材料时直接执行本地编排;当前流程不要求独立 decisions 接口或不可变审批记录。载荷和本地调用结果均不能替代双方文件及 NS 验收,具体流程见[当前应用指南](../sdk/Ownership2.1-SDK应用集成指南.md)。可选托管由应用层实现,不改变文件的签署身份及资源权限。
|
|
8
8
|
|
|
9
9
|
兼容方向为新服务端保留旧 SDK 的既有身份认证、普通名片、通信和 legacy owner 操作入口;新 SDK 的 2.1 关系操作不兼容旧服务端。兼容旧 SDK 所需的注册、绑定、转移、查询和解绑 RPC 使用隔离的 Auth JSONL 状态及 NS `ownership_proof`,只处理 legacy 关系;它们不生成 2.1 双文件声明,不构成 2.1 授权、owner 锁、关系版本或 `consensus`,也不得覆盖已存现代声明。Ownership 2.1 当前关系始终重新核对两份当前文件;不把新 SDK 源码调用形态兼容作为本契约要求。
|
|
10
10
|
|
|
@@ -51,11 +51,11 @@ Storage 须在文件、父目录、移动、重命名及自动清理等所有能
|
|
|
51
51
|
|
|
52
52
|
### 1.3 Group/Org 的专属 owner 生命周期
|
|
53
53
|
|
|
54
|
-
`type=group/org` 的 owner
|
|
54
|
+
`type=group/org` 的 owner 由 Group/Org 服务的当前权威生命周期确定;SDK 在创建、转移和解散流程中同步编排 Ownership 2.1 材料。现代实体同样使用 owner 的 `owner.md`、实体 `agent.md` 中的配对声明、`relation_version` 和双文件关系保护,并可通过通用共识入口查询。共识还须核对当前生命周期 owner、状态及实体证书,不能用声明文件单独改变生命周期归属。普通 Ownership 绑定、释放、转移 Facade 仍在副作用前返回 `not_applicable`、`retryable=false`,不自动转调用生命周期方法;这项管理入口限制不适用于现代实体的声明解析及共识查询,也不放宽管理入口的 owner 类型限制。
|
|
55
55
|
|
|
56
56
|
Group 使用 `group.transfer_owner` → `group.complete_transfer` 的两阶段转移;Org 使用既有 `org.lifecycle.transfer` → `org.lifecycle.transferAccept`。两者都必须真正 rekey,使证书及公钥指纹变化,旧身份材料不再授权当前操作,新材料归新 owner 持有;Org 的 rekey 与 owner CAS 顺序保持其专属 0.8 契约。创建时实体身份公私钥及证书由初始 owner 持有,业务服务不保存实体私钥。解散后不再存在可用 owner 授权,旧身份材料和待上传文件不能继续鉴权或发布名片。
|
|
57
57
|
|
|
58
|
-
新 SDK 发布的 Group/Org 名片必须含当前 `owner
|
|
58
|
+
新 SDK 发布的 Group/Org 名片必须含当前 `owner` 及配对的 `ownership.statement`,省略旧 `ownership_proof`、`ownership_release` 和 `entity_cert_fingerprint`。实体私钥生成不带 `signer_aid` 的主签,当前 owner 使用本人 token 上传;可选附签按完整签名链验证。owner 先以本人身份在自有 Storage 发布 `owner.md`,实体再条件发布名片并确认新鲜共识。Group 旧实体单签及实体身份上传持续兼容,Org 不开放该旧入口,见第 2.5 节。实体类型和当前 owner 必须以权威身份及生命周期记录校验,不能只相信上传文件中的 `type/owner`。
|
|
59
59
|
|
|
60
60
|
Org 生命周期向 CA 可信登记权威 Org 类型;分类只标识 AID 类型,不保存 owner 关系。Org 创建提交前完成登记,恢复时含 dissolved 的存量记录每批最多 256 条登记,全部成功后才持久标记分类回填完成。初签、轮换和导入不得覆盖已登记 Org 类型,Org 证书沿用 `signing` purpose。NS 仅在 CA 明确返回分类完成时将未登记的 normal 身份按普通主体处理;回填未确认时保留保守生命周期核验,Org 或 CA 故障不能降为普通身份。完成后普通主体 PUT 不再逐次查询 Org;Org 自身仍执行其生命周期校验。
|
|
61
61
|
|
|
@@ -86,8 +86,8 @@ Org 生命周期向 CA 可信登记权威 Org 类型;分类只标识 AID 类
|
|
|
86
86
|
| `description` | 可选字符串,最多 100 个 Unicode 字符。 |
|
|
87
87
|
| `avatar` | 可选字符串,最多 256 个 Unicode 字符。 |
|
|
88
88
|
| `tags` | 可选字符串数组。 |
|
|
89
|
-
| `owner` |
|
|
90
|
-
| `ownership` |
|
|
89
|
+
| `owner` | 非 human 主体可选字符串,出现时必须同时出现 `ownership`;现代 Group/Org 填当前生命周期 owner AID。历史实体 owner-only 格式仅按第 2.5 节兼容读取,不构成双文件共识。 |
|
|
90
|
+
| `ownership` | 非 human 主体可选对象,只允许包含 `statement`;现代 Group/Org 使用相同格式。 |
|
|
91
91
|
|
|
92
92
|
`owner.md` 的顶层只允许 `owner_aid`、`sub_aid`、`ownership`,三者均必填;不要求 `aid`、`name`、`type` 或名片版本字段。其 AID 必须与 statement 及规范路径一致。文件角色由资源位置确定,不能改用另一角色的规则接受不匹配文件。
|
|
93
93
|
|
|
@@ -117,7 +117,7 @@ statement:
|
|
|
117
117
|
| `relation_version` | `1..9007199254740991` 的整数,只用于两份当前签名声明的匹配;由双方在声明中明确一致取值,SDK 默认取当前可见基数加一(无声明时为 `1`),转移目标使用当前匹配版本加一。NS 不单独维护版本上界。 |
|
|
118
118
|
| `declared_at` | 被文件签名覆盖的 Unix 秒整数,范围 `1..9007199254740991`。 |
|
|
119
119
|
|
|
120
|
-
|
|
120
|
+
现代 `agent.md` 出现 `owner` 时必须同时出现 `ownership.statement`;`owner` 等于声明中的 `owner_aid`,`aid` 等于 `sub_aid`。无 owner 时两者同时省略;`human` 类型不能声明这两个字段。现代 Group/Org 同样使用本节声明,并额外遵守第 1.3、2.5 节的生命周期和实体签名约束;历史 owner-only 实体格式不因此成为现代声明。
|
|
121
121
|
|
|
122
122
|
普通正文、名称等更新必须完整保留已锁定的 `owner` 和 `ownership.statement`。不能只保留 owner 字符串、删除声明,也不能将完整关系降级为单方声明。
|
|
123
123
|
|
|
@@ -172,7 +172,7 @@ signature: <严格Base64编码的DER签名>
|
|
|
172
172
|
|
|
173
173
|
仅向已有签名链末尾追加时,保持现有全部字节,并在末字节既非 LF 也非 CR 时补一个 LF;无旧块仍按首签要求正文以 CR/LF 结束,否则拒绝。该 LF 属于新块所签 prefix,不改变旧主签输入。修改、重排或删除前序块会令后续验签失败;删除末端块可形成有效短链,verify 只返回实际签名列表,不承诺检测末端截断。
|
|
174
174
|
|
|
175
|
-
附签必填 `signer_aid`,须与该块证书 AID 一致;通用容器可解析主块的可选 signer_aid
|
|
175
|
+
附签必填 `signer_aid`,须与该块证书 AID 一致;通用容器可解析主块的可选 signer_aid,但现代 agent.md(含 Group/Org)和 owner.md 主块不输出且业务拒绝该字段;旧实体主块显式 signer_aid 的兼容边界见第 2.5 节。各块仅允许表中四字段及 `signer_aid`,重复或未知字段拒绝;相同签署者可多次追加,不据此增加授权。verify 必须逐块全验,任一块失败不能只采用主签结果。证书沿用可信 resolver 按 AID/指纹获取,不增加证书链字段。
|
|
176
176
|
|
|
177
177
|
`declared_at`、`expires_at`、`timestamp` 只接受无符号、无前导零的十进制正整数原词法;拒绝零、负数、布尔、字符串、浮点、科学计数、十六进制及越界值。先校验词法和范围,再转换数字或日期;无效输入归 `invalid`,不能因日期转换失败归 `unavailable`。表示范围不替代证书有效期、当前时钟和授权未过期校验,也不另设年份或最长授权期限上界。
|
|
178
178
|
|
|
@@ -182,23 +182,23 @@ signature: <严格Base64编码的DER签名>
|
|
|
182
182
|
|
|
183
183
|
### 2.5 Group/Org 名片的实体主签与 owner 上传
|
|
184
184
|
|
|
185
|
-
|
|
185
|
+
现代名片的 `aid` 是实体 AID,`type` 为 `group` 或 `org`,`owner` 是当前生命周期 owner,并包含与 owner 自有 Storage 中 `owner.md` 配对的 `ownership.statement`。新 SDK 不输出旧 `entity_cert_fingerprint`、`ownership_proof`、`ownership_release`;第一尾签块由实体当前私钥签署,不带 `signer_aid`,以尾签证书指纹及可信 CA 当前材料核对实体代际。Group 使用 `group_identity` 证书,Org 使用 `signing`;可选 owner 附签仍须逐块验证,不能替代主签、双文件共识或当前生命周期核验。
|
|
186
186
|
|
|
187
187
|
现代上传使用当前 owner 的有效 token,无需实体登录;不再生成或强制实体专用 `AUN-AGENTMD-OWNER-AUTHORIZATION` V2 头。token 证明使用了该有效凭据,不证明本人操作,也不替代离线 owner 附签。普通 Ownership 既有 V1 兼容授权不因此变更。Group 始终兼容当前实体证书单签、实体身份上传的旧流程,仍执行生命周期、证书和文件 CAS 检查;Org 不开放该旧入口。
|
|
188
188
|
|
|
189
189
|
旧0.5.19保留独立的 owner 主签 V2 兼容入口:请求无 multi-v1,文件仅一块主签,显式 signer_aid 等于正文 owner 且不同于实体 aid,正文 owner/entity_cert_fingerprint 完整合法。原 marker 可为裸或已有 tag,不能据 marker、UA 或尾签时间证明客户端版本。须有当前 owner token、原 `AUN-AGENTMD-OWNER-AUTHORIZATION` V2 授权和原 HTTP 条件;严格核对 target、uploader、完整原文摘要、实体当前指纹、owner 证书指纹、nonce、±300秒授权窗口及签名,并核对当前权威类型、owner、状态和实体代际,按完整快照 CAS 提交。该例外证明 owner 对原件的授权,不证明持有实体私钥;现代 multi-v1 上传仍必须实体主签。更早 Group 实体身份旧入口不因此增加 V2 要求。
|
|
190
190
|
|
|
191
|
-
|
|
191
|
+
历史 owner-only 实体文件保留读取兼容,不构成双文件共识,也不得覆盖或降级已存现代声明。旧格式按其适用规则检查 `entity_cert_fingerprint` 与主签 `signer_aid`;仅特定旧 Group 单签格式允许省略实体指纹,不能将该豁免推广到 Org。fresh 及 Storage 副本验证仍识别上述单块 owner 主签原件,核对当前权威 owner/实体代际和完整签名,不要求读取时提供未持久化的 V2 请求头。公开历史 verified 下载按实际签署者及历史证书验证原字节,不要求历史 owner 或证书代际仍为当前;实体指纹字段不与 owner 主签证书指纹混为一谈。历史读取例外不扩展到多块 owner 主签文件或现代写入,历史验签不授予当前权限。
|
|
192
192
|
|
|
193
|
-
NS
|
|
193
|
+
NS 对现代实体复用通用声明、Storage `owner.md`、关系保护和名片 CAS,并新鲜核对权威类型、生命周期状态、当前 owner、实体当前证书及所有签名,再允许提交。实体代际由主签证书与可信当前证书核对,不再依赖 frontmatter 的旧 `entity_cert_fingerprint`;证书代际和双文件 `relation_version` 不是同一概念。非当前 owner 的现代上传为 `forbidden`,声明 owner 与生命周期冲突、旧实体证书代际为 HTTP 409 / `conflict`,确定非法字段或签名为 `invalid`;生命周期、数据库或证书依赖不可用为 HTTP 503 / `unavailable`。沿用既有 PKI current HTTP 查询,不新增 RPC、证书链字段或独立关系账本;Group 旧入口不能据此开放 Org 或降级现代关系。
|
|
194
194
|
|
|
195
|
-
实体 fresh GET 必须同时携带 `X-AUN-Ownership-Check: 1`、`Cache-Control: no-cache`、`X-AUN-Signature-Format: multi-v1
|
|
195
|
+
实体 fresh GET 必须同时携带 `X-AUN-Ownership-Check: 1`、`Cache-Control: no-cache`、`X-AUN-Signature-Format: multi-v1`,绕过 LRU 并执行新鲜检查。现代声明进入通用双文件共识,使用第 3.3 节的协议、关系版本、lock 和结果 Header,不能按实体类型直接返回 `not_applicable`。仅缺少 `ownership` 的历史实体格式保留该标记及适用的实体 current/stale、权威 owner/证书指纹响应头;这些头不是现代共识证明。GET/HEAD 按协商表示返回 ETag,历史文件中的 owner 不作为当前权限。确实缺失为 404、无 ETag;权威依赖失败为 503,不能伪装 404 或未绑定。
|
|
196
196
|
|
|
197
|
-
新 SDK 首次发布用 `If-None-Match: *`,更新用原表示 `If-Match`;缺条件为 428,ETag 冲突为 412
|
|
197
|
+
新 SDK 首次发布用 `If-None-Match: *`,更新用原表示 `If-Match`;缺条件为 428,ETag 冲突为 412。实体名片失败稿/pending 保留完整签名原文、原 CAS、固定 owner 及签名证书代际,应用显式重试先验证原件和当前生命周期,仅重传仍可提交的原字节;不更换 owner、证书或条件重签旧稿。创建/转移自身的检查点恢复另行保留,并复用同一关系版本。访问历史实体时,SDK 按当前身份和成功连接代际对单实体合并一次检查:先预筛本地实体材料,可用的本地共识匹配 owner 时直接结束;否则确认 active 生命周期 owner 后查询共识,具备本人及实体私钥时才补齐声明。失败不在本连接自动反复重试,真实重连后可重查;不在启动时遍历全部实体重传名片。现代上传不需额外 V2 授权;旧入口仍按原规则验证。原条件完整且原文及 ETag 已证明提交时可仅观察完成。
|
|
198
198
|
|
|
199
|
-
新 SDK
|
|
199
|
+
新 SDK 通过 NS 查询当前双文件共识;补齐及生命周期编排另核对当前权威 owner、状态和实体签名材料,不信 raw owner 或历史实体响应头。owner 先条件发布本人签名的 `owner.md`,实体再签署配对名片并以 owner token 条件上传,完成后强制查询共识并核对 owner 和关系版本。首次历史补齐默认 v=1,同 owner 重试复用已有匹配声明;换 owner 须有旧 owner 指定目标的有效转移授权并使用 v+1,不能覆盖为新的无主绑定。公开 verified 下载逐块按签署者、尾签指纹和时间查询历史证书并验原始字节,不要求历史证书当前仍可签;历史验签不授予当前权限。确定坏签名或无效链为 `invalid`,依赖不可用为 `unavailable`,不能当成缺失关系补写。
|
|
200
200
|
|
|
201
|
-
NS
|
|
201
|
+
NS 的旧实体上传分支及 legacy h.put 沿用专用 Auditf 的 INFO event,记录 request_id、操作者、目标、权威类型、完整文件摘要、签名模式及转义字段;提交成功记 committed,拒绝记 rejected,操作失败记 failed。现代实体走通用 Ownership PUT,不能把旧分支日志覆盖等同于全部现代路径。沿用 NS 日志,不新增审计服务或关系账本;数据库与日志非原子,不承诺无遗漏,Storage 副本失败不改写已提交结果。
|
|
202
202
|
|
|
203
203
|
## 3. Name Service 的锁定规则
|
|
204
204
|
|
|
@@ -343,7 +343,7 @@ flowchart TB
|
|
|
343
343
|
|
|
344
344
|
原 owner 的有效 release 或权威删除使当前关系结果为 `released`。NS 不创建释放记录、不递增版本;sub 离线不妨碍当前校验方停止授予 owner 权限,sub 随后自行清理名片中的关系字段。
|
|
345
345
|
|
|
346
|
-
release
|
|
346
|
+
release 发布后,旧关系不能通过新鲜授权检查;当前关系声明依据 NS 当前 `agent.md` 与 owner 当前 `owner.md`;Group/Org 授权另须核对当前生命周期及实体证书。sub 的旧声明清理前须保留 release;sub 清理或转入另一有效关系后,owner 可核对当前 NS 及本任务完整原件后清理旧文件,不能只等待固定时长。
|
|
347
347
|
|
|
348
348
|
原 owner 自签发布的 release `owner.md`(原路径、被释放版本 `1`):
|
|
349
349
|
|
|
@@ -642,11 +642,11 @@ Storage 不满足第 1.2 节的完整原子发布要求时,不得发布 `owner
|
|
|
642
642
|
|
|
643
643
|
## 6. 共识、审计与安全边界
|
|
644
644
|
|
|
645
|
-
|
|
645
|
+
共识的关系声明依据 NS 当前签名 `agent.md` 与 owner 当前签名 `owner.md`;Group/Org 还须按第 1.3、2.5 节校验当前生命周期 owner、状态及实体证书。本次校验期间完整文件、存在性和 ETag须保持一致;返回 `consensus` 时,两份声明的关系版本和双方 AID 必须匹配,签名及证书校验须通过。owner 的 `declare`、尚未提交的 `transfer_owner` 均可证明当前旧关系;转移授权过期不影响该旧关系声明。当前 release 或权威删除不能返回 `consensus`。响应 Header 只投影本次两份材料的校验结果,不能替代材料或新增事实。
|
|
646
646
|
|
|
647
647
|
self-owner 验证通过同样返回 `consensus`,仅证明该 AID 的自主管理声明;校验依据与外部关系相同。
|
|
648
648
|
|
|
649
|
-
|
|
649
|
+
下表六态同样适用于现代 Group/Org 的双文件共识;实体还须满足第 1.3、2.5 节的生命周期和当前证书约束。NS 对缺少 `ownership` 的历史实体格式保留 `not_applicable` 标记,不把 owner-only 名片解释为双文件共识;普通管理 Facade 的 `not_applicable` 另属入口限制,不能用于否定现代实体共识。
|
|
650
650
|
|
|
651
651
|
| 结果 | 含义 |
|
|
652
652
|
| --- | --- |
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# echo 探针协议 — Gateway / Message / Group 实现规范
|
|
2
|
+
|
|
3
|
+
**状态**:v3.2,单 hop 全程递减规范
|
|
4
|
+
**日期**:2026-11-11
|
|
5
|
+
**适用**:本项目 AUN Gateway、Message、Group
|
|
6
|
+
**配套文档**:[`echo-probe-sdk.md`](./echo-probe-sdk.md)
|
|
7
|
+
|
|
8
|
+
## 1. 节点职责
|
|
9
|
+
|
|
10
|
+
| 节点 | 实际处理边界 |
|
|
11
|
+
|---|---|
|
|
12
|
+
| `AUN-Gateway.route` | 客户端、服务间或联邦 RPC 入站路由 |
|
|
13
|
+
| `AUN-Gateway.push` | 向客户端投递 message/group 事件 |
|
|
14
|
+
| `AUN-Message.relay` | 单聊 Message 转发 |
|
|
15
|
+
| `AUN-Group.relay` | 群聊 Group 转发 |
|
|
16
|
+
|
|
17
|
+
去程、回程使用相同节点名,由 dir 区分。每次实际经过都附行,包括后续 Gateway、同域多实例、跨域和相同名称的节点;不固定假设探针必定经过多少行或必定走满链路。
|
|
18
|
+
|
|
19
|
+
## 2. 识别与正文
|
|
20
|
+
|
|
21
|
+
只检查第一行,移除该行前导空白,再按最长前缀、大小写不敏感判断。
|
|
22
|
+
|
|
23
|
+
| 前缀 | 后继边界 | 处理 |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| `echo.ecdiag` | 空白或行尾 | 与 echo 相同,网络节点允许附行 |
|
|
26
|
+
| `echo.ask` | 空白或行尾 | 与 echo 相同 |
|
|
27
|
+
| `echo` | 空白、`[` 或行尾 | 计数、附行、必要时提前回送 |
|
|
28
|
+
|
|
29
|
+
` echo hop=5`、`ECHO`、`echo[tag]` 均命中;`hello echo`、`echoes`、`echo.path` 不命中。不按正文或首行长度决定是否命中。
|
|
30
|
+
|
|
31
|
+
命中后仅移除第一行前导空白,保留原 echo 的其余首行内容、参数、正文及历史 trace。新增信息从第二行开始,以换行追加,不能覆盖或重排原文。
|
|
32
|
+
|
|
33
|
+
## 3. Payload 与唯一跳数
|
|
34
|
+
|
|
35
|
+
明文 payload 使用 `type=text`、`text`、`hop`,另以 `dir=fwd|ret` 标记方向。**跳数字段只有 hop**,删除旧诊断字段 max_hop/rhop,不再使用或生成。
|
|
36
|
+
|
|
37
|
+
有效 payload.hop 优先于首行 `hop=N`,两者都没有时默认 **100**。服务与四 SDK 统一使用 JSON 安全整数范围 `[-9007199254740991, 9007199254740991]`,首行允许 `+` / `-` 符号;布尔值、字符串型 payload.hop 和非整数无效,按首行参数或默认值处理。整数超出范围或递减结果超出范围时必须明确报错,不能回退 100。首次发起用非负预算,负数表示已经提前返程,不得重置或归零。历史 trace 不作为控制字段的权威来源。普通消息不自动注入诊断字段。
|
|
38
|
+
|
|
39
|
+
hop 为负数时必须按返程处理,即使旧 dir 仍为 fwd;其余情况优先读取有效 payload.dir,缺少有效方向时兼容正文独立行 `[AUN-Echo.return]`。非负 hop 的显式 dir=fwd 优先于旧标记。方向不能仅由正文最后一行推断。
|
|
40
|
+
|
|
41
|
+
### 3.1 去程
|
|
42
|
+
|
|
43
|
+
每个实际节点读取 hop,先执行 `hop = max(hop - 1, 0)`,再用结果附 dir=fwd 行并传递该值。
|
|
44
|
+
|
|
45
|
+
**减到 0 必须停止前送并立即提前返程**。收到 hop=0 也立即返程,不减到负数。Gateway、Message、Group 都必须生成完整回包,不能只停止、丢弃或以超时作为预期结果。
|
|
46
|
+
|
|
47
|
+
### 3.2 回程
|
|
48
|
+
|
|
49
|
+
反射节点把 dir 改为 ret,继续把 hop 减 1,写自己的回程行,沿原路返回。去程到 0 提前返程时,反射节点写 -1,上游依次写 -2、-3。正常业务终点尚未耗尽时可用 dir=ret 进入回程,后续每个实际回程节点同样先减 1 再写行。
|
|
50
|
+
|
|
51
|
+
例如初始 hop=3:SDK 去程 2 → Gateway 1 → Message 0;Message 回程 -1 → Gateway -2 → SDK -3,交付应用。
|
|
52
|
+
|
|
53
|
+
回程不再受去程预算阻断,不因 hop 为 0 或负数丢弃,不重新反射;正常回程跨过 0 时也继续递减。一个实际处理边界只计一次;终点有去程、回程两行,普通消息构造、持久化或复制事件不是额外网络节点。
|
|
54
|
+
|
|
55
|
+
## 4. 完整提前回送
|
|
56
|
+
|
|
57
|
+
沿原同步 RPC 调用链返回 `status=echo_return`,保留完整 payload、message_id 及适用的 from/to/group_id。上游不得把结果降为投递数、空成功结果或仅保留状态码。
|
|
58
|
+
|
|
59
|
+
Gateway 入站、push、后续 session-owner Gateway、联邦转发、Message、Group 均须传回下游获得的完整响应,并各自附本节点回程行。
|
|
60
|
+
|
|
61
|
+
Message 和 Group 都有同步回包通道;到限必须回送,不能要求发起者等待超时。同步 echo 诊断路径不强制落库,也不进入业务消息去重;重试相同 message_id 仍按实际经过附行、保留完整 echo_return。普通消息存储和去重策略不受影响。
|
|
62
|
+
|
|
63
|
+
需要取得回程结果的 echo 路径不得放入丢弃结果的异步队列。保留实际群成员路由,每个已执行分支保留完整 trace;回送定向原发起者、保留 group_id,不把诊断响应广播给全群。现有单 RPC 返回已获得的诊断结果,不自动聚合所有群成员。接收 SDK 发起的定向回送是新的异步请求,不保证同一物理 Gateway。
|
|
64
|
+
|
|
65
|
+
收件人待机且仅能唤醒时,Gateway 应在本跳完整提前回送并记录原因,不能只返回 woken。离线、零投递、写入失败、owner 不可用等无法继续的情况,必须完整提前回送或通过现有 RPC 错误如实报告,不能返回 sent。message_id 应在提前返回前补齐,适用 group_id 在本域、联邦和回包中均须保留。
|
|
66
|
+
|
|
67
|
+
SDK 本地早停和服务端回包均必须进入应用接收事件,具体见配套 SDK 文档。
|
|
68
|
+
|
|
69
|
+
## 5. 明文约束
|
|
70
|
+
|
|
71
|
+
不支持加密 echo,由 SDK 在加密前识别并强制明文。服务端仅处理可见的明文 echo。
|
|
72
|
+
|
|
73
|
+
收到 encrypted/encrypt 标记、e2ee.* payload 或密文数据时,按普通消息原样处理,不追加 trace、不改密文、不尝试解密寻找前缀。这不构成加密 echo 的支持或验收。
|
|
74
|
+
|
|
75
|
+
## 6. 每跳 Trace 与耗时
|
|
76
|
+
|
|
77
|
+
`HH:MM:SS.mmm [node] dir=fwd|ret hop=N enc=0 ver=VERSION epoch=MS tz=±HH:MM [duration_ms=N] <节点字段>`
|
|
78
|
+
|
|
79
|
+
每行包含墙钟前缀、节点、dir、hop、enc、ver、epoch、tz,毫秒之后紧跟空格。ver 取服务编译版本,取不到为 unknown。route 保留 from/to/conn_uptime,push 保留 to,Message/Group 保留 from/to 及适用群标识。
|
|
80
|
+
|
|
81
|
+
每条回程行包含自身真实 duration_ms。同步获得 echo_return 时,用本地单调时钟测请求入口至形成回程结果,包含等待下游;新的定向返程请求没有原去程上下文,测本节点本次请求入口到向下一节点交接正文的处理时间。不得固定填 0 或用跨机器 epoch 差值代替。
|
|
82
|
+
|
|
83
|
+
不去重:同名节点、同方向或重复实际处理也必须附行。不设 echo 专用长度限制,不截断、不添加 `[TRUNCATED]`。通用传输层限制导致的失败必须如实返回,不得静默丢失 trace。
|
|
84
|
+
|
|
85
|
+
## 7. 实现入口
|
|
86
|
+
|
|
87
|
+
| 服务 | 现有入口 |
|
|
88
|
+
|---|---|
|
|
89
|
+
| Gateway | `extensions/services/gateway/go/internal/httpserver/server.go` 的 route、push、dispatch、后续 Gateway 与联邦路径 |
|
|
90
|
+
| Message | `extensions/services/message/go/internal/legacy/service.go`、`cmd/message-go/main.go` 的本域与联邦同步转发 |
|
|
91
|
+
| Group | `extensions/services/group/go/internal/service/send_message.go`、`relay_event.go` 及 rpc/cmd 的本域与联邦路径 |
|
|
92
|
+
|
|
93
|
+
保持模块独立实现,不引入跨模块共享代码。路由元数据 `_route`、RPC 级 `_trace` 与 echo 正文诊断分开。
|
|
94
|
+
|
|
95
|
+
## 8. 验收
|
|
96
|
+
|
|
97
|
+
更新已有测试,覆盖默认 hop=100、payload 优先首行参数、每个节点去程减 1、到 0 停止前送并完整回送、反射及上游每条回程继续减 1、负 hop 自动识别为返程、仅 hop 一个跳数字段、三前缀、前导空白移除、首行与其余正文保留、长正文和重复节点继续附行、普通密文不变、真实回程耗时、单聊/群聊/跨域/多 Gateway 的完整回包不被异步路径或投递统计吞掉。
|
|
98
|
+
|
|
99
|
+
不启动 Kite 或部署环境作为本机单元测试的一部分。外部 App、Rust SDK、EvolCore 的完整链路验收另行开展。
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# echo 探针协议 — SDK 实现规范
|
|
2
|
+
|
|
3
|
+
**状态**:v3.2,单 hop 全程递减规范
|
|
4
|
+
**日期**:2026-11-11
|
|
5
|
+
**适用**:本项目 fastaun SDK(Python / Go / TS / JS)
|
|
6
|
+
**配套文档**:[`echo-probe-gateway.md`](./echo-probe-gateway.md)
|
|
7
|
+
|
|
8
|
+
## 1. 范围与节点
|
|
9
|
+
|
|
10
|
+
SDK 负责 `AUN-SDK.send`、`AUN-SDK.receive`。外部 Rust SDK 可采用 `AUN-RustSDK.send/receive`;其位置为 `D:/modelunion/acp-app`,与 App、EvolCore 一样不在本次代码修改范围内。
|
|
11
|
+
|
|
12
|
+
SDK、Gateway、Message、Group 每次实际处理 echo 都记录自己的节点。同名节点再次经过仍附行,不能按节点名或方向去重。业务内部阶段不额外消耗网络跳数。
|
|
13
|
+
|
|
14
|
+
## 2. 前缀与正文
|
|
15
|
+
|
|
16
|
+
只检查第一行,先移除该行前导空白,再按最长前缀、大小写不敏感识别。
|
|
17
|
+
|
|
18
|
+
| 前缀 | 后继边界 | SDK 行为 |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| `echo.ecdiag` | 空白或行尾 | 明文、计数、附行;允许网络节点记录 |
|
|
21
|
+
| `echo.ask` | 空白或行尾 | 与 echo 相同,业务端决定是否经过 agent |
|
|
22
|
+
| `echo` | 空白、`[` 或行尾 | 明文、计数、附行 |
|
|
23
|
+
|
|
24
|
+
` echo hop=5`、`ECHO`、`echo[tag]` 均命中;`hello echo`、`echoes`、`echo.path` 不命中。正文和首行长度不参与识别。
|
|
25
|
+
|
|
26
|
+
命中后只移除原始第一行的前导空白,保留其余首行内容、参数、正文和历史 trace 的顺序。所有新增 trace 从第二行开始,以换行追加。普通消息不因本规范改变正文。
|
|
27
|
+
|
|
28
|
+
不做 trace 去重,不设 echo 专用字数或字节限制,不截断、不添加 `[TRUNCATED]`。通用传输大小限制仍由原传输层处理,失败必须如实报告,不能静默丢掉正文或 trace。
|
|
29
|
+
|
|
30
|
+
## 3. Payload 与方向
|
|
31
|
+
|
|
32
|
+
| 字段 | 约定 |
|
|
33
|
+
|---|---|
|
|
34
|
+
| `type` | 固定 `text` |
|
|
35
|
+
| `text` | 第一行为原 echo,按第 2 节移除前导空白 |
|
|
36
|
+
| `hop` | 唯一跳数字段;去程、回程均递减,负数表示提前返程 |
|
|
37
|
+
| `dir` | 方向标记 `fwd` / `ret`,不是第二个跳数;缺省 fwd |
|
|
38
|
+
|
|
39
|
+
删除旧诊断字段 `max_hop`、`rhop`,不再生成或使用。普通消息不自动携带 echo 的诊断字段。
|
|
40
|
+
|
|
41
|
+
有效 `payload.hop` 优先于首行 `hop=N`;两者都没有时默认 **100**。四 SDK 和服务统一使用 JSON 安全整数范围 `[-9007199254740991, 9007199254740991]`,首行允许 `+` / `-` 符号;布尔值、字符串型 payload.hop 和非整数无效,按首行参数或默认值处理。整数超出范围或递减结果超出范围时必须明确报错,不能回退 100。首次发起用非负预算,负数表示已经提前返程,不能重置或归零。正文历史 trace 不作为控制字段的权威来源。
|
|
42
|
+
|
|
43
|
+
hop 为负数时必须按返程处理,即使旧方向字段仍为 fwd;其余情况优先读取有效 `payload.dir`,没有有效方向时兼容正文独立行 `[AUN-Echo.return]`。非负 hop 的显式 `dir=fwd` 优先于旧标记。不能只检查正文最后一行决定方向。
|
|
44
|
+
|
|
45
|
+
## 4. 去程与回程
|
|
46
|
+
|
|
47
|
+
每次去程处理:读取 hop,计算 `hop = max(hop - 1, 0)`,用所得值写 `dir=fwd` trace 并传递同一值。**减到 0 就必须停止前送,立即提前返程**;收到 hop=0 也立即返程,不减为负数。
|
|
48
|
+
|
|
49
|
+
反射节点将 `dir` 改为 `ret`,继续把 hop 减 1,追加自己的回程行,然后返回完整正文。因此到 0 提前返程时,反射节点写 -1,上游依次写 -2、-3。正常业务终点尚未耗尽时可用 dir=ret 进入回程,每个回程节点同样先减 1 再附行。
|
|
50
|
+
|
|
51
|
+
示例:初始 hop=3,SDK 去程写 2,Gateway 写 1,Message 写 0;Message 停止前送,回程写 -1,Gateway 写 -2,SDK 写 -3,最终交付应用。
|
|
52
|
+
|
|
53
|
+
回程不再按去程预算停止,不因 hop=0 或负数丢弃结果,也不重新反射;已经在正常回程时跨过 0 仍继续递减。每个实际处理边界只执行一次计数;终点分别记录去程、回程。接收 SDK 自动回送时,不得因调用内部发送入口而重复记录同一个接收节点。
|
|
54
|
+
|
|
55
|
+
## 5. 明文约束
|
|
56
|
+
|
|
57
|
+
不支持加密 echo。SDK 必须在加密路由之前识别三种前缀,强制 `encrypt=false`,发送明文 `payload.type=text`,trace 固定 `enc=0`。
|
|
58
|
+
|
|
59
|
+
收到仍为密文的消息时按普通消息处理,不解开密文寻找 echo,不修改密文。不能把仅端节点有行的加密消息当作本协议的成功验收。
|
|
60
|
+
|
|
61
|
+
## 6. 提前回送与应用交付
|
|
62
|
+
|
|
63
|
+
SDK 本地去程减到 0 时不发网络请求,直接生成 `status=echo_return` 响应,包含完整 payload、message_id 和适用的 from/to/group_id,并追加本地回程行。
|
|
64
|
+
|
|
65
|
+
SDK 收到服务端 `echo_return` 时,先追加 `AUN-SDK.receive` 回程行,再通过现有 `message.received` 或 `group.message_created` 应用入口交付。本地提前返回同样使用 receive 回程行;不能只把回包作为 send 状态返回。
|
|
66
|
+
|
|
67
|
+
接收 SDK 去程到 0 时停止交给业务端处理,自动明文回送原发送者。群聊回送定向原发送者,保留 group_id 诊断上下文,不再次广播全群。该定向发送是新的异步请求,不能据此宣称返回经过原同步调用栈或同一物理 Gateway。
|
|
68
|
+
|
|
69
|
+
沿现有同步 RPC 原调用链返回时,完整响应不得被投递统计、空成功结果、业务去重或异步队列覆盖。投递不可继续时应完整提前回送或如实报错,不能把零投递、仅唤醒或写入失败报告为 sent。普通消息的持久化与投递策略保持原有约定。
|
|
70
|
+
|
|
71
|
+
## 7. Trace 与处理耗时
|
|
72
|
+
|
|
73
|
+
`HH:MM:SS.mmm [node] dir=fwd|ret hop=N enc=0 ver=VERSION epoch=MS tz=±HH:MM [duration_ms=N] <节点字段>`
|
|
74
|
+
|
|
75
|
+
每行必须包含墙钟前缀、节点名、dir、hop、enc、ver、epoch、tz;毫秒墙钟之后紧跟空格。ver 取包版本,无法取得时为 unknown。SDK 自定义字段保留 aid、conn_uptime。
|
|
76
|
+
|
|
77
|
+
每条回程行必须包含本节点真实 `duration_ms`。同步获得 echo_return 时,用本地单调时钟测量从该请求入口到形成回程结果的时间,包含等待下游;新的定向返程请求没有原去程上下文,测从本节点本次请求或接收入口到向下一节点交接正文的处理时间。不得固定填 0,也不得用跨机器 epoch 相减代替。
|
|
78
|
+
|
|
79
|
+
仅追加实际发生的节点记录,不删除历史行。RPC 级 `_trace`、`setTraceMode` 与正文探针相互独立。
|
|
80
|
+
|
|
81
|
+
## 8. 实现入口与验收
|
|
82
|
+
|
|
83
|
+
| SDK | 现有入口 |
|
|
84
|
+
|---|---|
|
|
85
|
+
| Python | `src/aun_core/client.py`、`_client/rpc_pipeline.py`、`_client/delivery.py` |
|
|
86
|
+
| Go | `client.go`、`client_rpc_pipeline.go`、`client_delivery.go` |
|
|
87
|
+
| TS / JS | `src/client.ts`、`src/client/rpc-pipeline.ts`、`src/client/delivery.ts` |
|
|
88
|
+
|
|
89
|
+
更新已有测试,覆盖三前缀、前导空白移除、首行与其余正文保留、长正文、同名节点重复附行、默认 hop=100、首行 hop 参数与 payload 优先级、仅一个跳数字段、去程递减到 0、回程继续递减及负 hop 识别、强制明文、真实耗时、本地无网络提前回送、服务回包进入应用事件、单聊与群定向回送。
|
|
90
|
+
|
|
91
|
+
外部 App、Rust SDK、EvolCore 未升级时不得宣称外部完整链路验收通过。
|