@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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
本文档负责三套本地 Docker 环境:三节点单域、本地真实域名双域 `agentid.pub/agentid.cn`、隔离双域 federation `dist-aid.com/dist-aid.net`。默认 `agentid.pub` 单域、默认四语言 Tester 和默认 cross-SDK 统一见 [AUN 测试运行指南](aun测试运行指南.md)。公网 `agentid.pub/agentid.cn` 复测是本地跨域通过后的独立验证层,不属于本地双域 Docker。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
本轮跨域验收范围仅为本机 Docker 中的 `agentid.pub` ↔ `agentid.cn`。测试请求必须经本地 `kite-agentid-federation-net` 在两个本地 Kite 容器之间完成;本轮禁止运行公网测试入口、访问线上 `agentid.pub` / `agentid.cn` 服务或把公网结果计入结论。`dist-aid.com` / `dist-aid.net` 章节仅保留为独立环境参考,本轮不得启动或运行该隔离 federation,也不得将其结果计入本轮跨域结论。
|
|
6
6
|
|
|
7
7
|
本指南只认当前 worktree `D:\modelunion\kite`。当前分支已经包含完整的默认单实例、三节点分布式、两套双域环境、服务端源码和四语言 SDK;服务端镜像、Tester、Cross-SDK、`data-dist` 与部署包都必须从这个 worktree 生成和运行。
|
|
8
8
|
|
|
@@ -45,7 +45,7 @@ D:\modelunion\kite\aun-sdk-core\docs\aun公网测试运行指南.md
|
|
|
45
45
|
|
|
46
46
|
## 本地真实域名双域与公网环境边界
|
|
47
47
|
|
|
48
|
-
`agentid.pub` 与 `agentid.cn` 在本机各运行一套“分布式控制模型的单节点形态”,共同组成当前真实域名双域 Docker 跨域环境。两域复用同一无 Mail 服务镜像,但各自拥有独立 Issuer CA、
|
|
48
|
+
`agentid.pub` 与 `agentid.cn` 在本机各运行一套“分布式控制模型的单节点形态”,共同组成当前真实域名双域 Docker 跨域环境。两域复用同一无 Mail 服务镜像,但各自拥有独立 Issuer CA、12 个服务 AID、MySQL、Redis、workspace、Compose project 和宿主端口;只共享 `kite-agentid-federation-net` 上的 Kite 业务节点。默认双域不创建 PostgreSQL、不加载 Mail;服务镜像固定使用 `python:3.11-bookworm`,最终镜像不包含 `uvloop`,Compose 默认 `AUN_GATEWAY_USE_UVLOOP=0`。
|
|
49
49
|
|
|
50
50
|
- `D:\modelunion\kite\docker-deploy\agentid.pub`:引用固定 `data`,project 为 `kite-single`,应用容器为 `kite-app`。
|
|
51
51
|
- `D:\modelunion\kite\docker-deploy\agentid.cn`:引用固定 `data-agentid-cn`,project 为 `kite-agentid-cn-local`,应用容器为 `kite-agentid-cn-local-app`。
|
|
@@ -79,7 +79,7 @@ D:\modelunion\kite\aun-sdk-core\docs\aun公网测试运行指南.md
|
|
|
79
79
|
- 目标 `data-dist` 必须不存在或为空。整套冷克隆至少包含 `mysql`、`postgres`、`CA`、`certs`、`AIDs`、`control`、`aun-node-a`、`aun-node-b`、`storage-shared`、`sdk-tester-aun` 和 `sdk-testers`;不得只复制 CA、证书、AID、MySQL 或节点目录中的一部分。
|
|
80
80
|
- `.env.distributed` 不得被 example 覆盖。保留当前文件前要逐项比对 Issuer、MySQL/PostgreSQL 凭据、控制令牌、镜像、project/container/network 前缀、子网和端口;当前 worktree 必须保持 `kite-main-dist-*`、`172.31.89.0/24` 与新端口,不能沿用来源 worktree 的 Docker 命名空间。
|
|
81
81
|
- 克隆完成后,来源与目标成为两套独立资产。后续不得共享目录、交叉挂载或同时用同一容器名接管;每次启动都执行“运行时来源强制核验”。
|
|
82
|
-
- 启动业务服务前,先只读核对根 CA/Registry CA
|
|
82
|
+
- 启动业务服务前,先只读核对根 CA/Registry CA 哈希、十二个内置服务证书的 SHA-256,以及证书在克隆后 MySQL `aun_cert.agentid_cert` 中的 `lifecycle_state=active_signing`、`cert_state=1` 记录。任一不一致即停止,不得补登记、重签、清库或局部重复制。
|
|
83
83
|
|
|
84
84
|
整套冷克隆会继承来源环境的历史业务数据,适合当前分支接管并继续回归。只有明确需要全新隔离身份和空业务库时,才在用户授权后运行 `prepare_dist_materials.py` 并完成新证书注册验收;“新建空目录 + 复制旧证书”不是合法初始化方式。
|
|
85
85
|
|
|
@@ -503,7 +503,7 @@ docker compose --env-file ../docker-deploy/.env.distributed -f tests/cross-sdk/d
|
|
|
503
503
|
|
|
504
504
|
### 定位与验收边界
|
|
505
505
|
|
|
506
|
-
|
|
506
|
+
这是当前真实域名的**本机 Docker 双域跨域测试环境**。两域都是分布式控制模型的单节点部署,已迁移服务默认使用 Go:Auth、CA、Gateway、Message、Group、Storage、Stream、NameService、Leaderboard、Service Proxy;AID Custody 仍使用 Python。两域必须使用同一个无 Mail 的 `docker-deploy-kite:latest` 镜像,避免把镜像差异误判为跨域问题。本阶段的 SDK runner 只加入本地 `kite-agentid-federation-net`,不使用公网 DNS、线上服务器或公网测试 runner。
|
|
507
507
|
|
|
508
508
|
本环境验证的是本地完整调用链:
|
|
509
509
|
|
|
@@ -519,7 +519,7 @@ docker compose --env-file ../docker-deploy/.env.distributed -f tests/cross-sdk/d
|
|
|
519
519
|
|
|
520
520
|
### 每轮执行顺序
|
|
521
521
|
|
|
522
|
-
每轮开始和结束都重新阅读 [AUN 测试运行指南](aun测试运行指南.md),确认身份保护、镜像重建和测试串行规则没有变化。固定顺序为:只读材料校验 -> 必要时构建镜像 -> 启动两域 -> 来源与 Go runtime 核验 -> 双向发现 -> 联邦身份边界 -> Notify -> Stream -> P2P -> Group -> Group FS -> Collab -> Storage OSS -> 采集两域日志。当前明确跳过 Mail 和 reconnect,因此不得加载 `docker-compose.mail.yml`。任一前置门禁失败即停止,不得用重签证书、`setup_aids.py`、清库或删除 SDK 身份绕过。
|
|
522
|
+
每轮开始和结束都重新阅读 [AUN 测试运行指南](aun测试运行指南.md),确认身份保护、镜像重建和测试串行规则没有变化。固定顺序为:只读材料校验 -> 必要时构建镜像 -> 启动两域 -> 来源与 Go runtime 核验 -> 双向发现 -> 联邦身份边界 -> Notify -> Stream -> P2P -> Read State -> Group -> Group FS -> Collab -> Storage OSS -> 采集两域日志。当前明确跳过 Mail 和 reconnect,因此不得加载 `docker-compose.mail.yml`。任一前置门禁失败即停止,不得用重签证书、`setup_aids.py`、清库或删除 SDK 身份绕过。
|
|
523
523
|
|
|
524
524
|
### 材料校验与镜像构建
|
|
525
525
|
|
|
@@ -531,7 +531,7 @@ docker image inspect docker-deploy-kite:latest mysql:8.0 redis:7-alpine | Out-Nu
|
|
|
531
531
|
if ($LASTEXITCODE -ne 0) { throw '双域基础镜像未准备完成,停止测试' }
|
|
532
532
|
```
|
|
533
533
|
|
|
534
|
-
`domain_materials.py validate` 会只读核对域名、Issuer CA 指纹、
|
|
534
|
+
`domain_materials.py validate` 会只读核对域名、Issuer CA 指纹、12 个服务 AID、TLS 与 MySQL `server-uuid`。任一不匹配都表示材料混域,不得自动修复。
|
|
535
535
|
|
|
536
536
|
只有服务端源码、Go 依赖、manifest 或 Dockerfile 变化时,才在依赖准备阶段构建;业务测试阶段不得临时联网补依赖:
|
|
537
537
|
|
|
@@ -665,10 +665,10 @@ agentid.cn: D:\modelunion\kite\docker-deploy\data-agentid-cn\sdk-testers\python
|
|
|
665
665
|
|
|
666
666
|
```powershell
|
|
667
667
|
cd D:\modelunion\kite\docker-deploy
|
|
668
|
-
$phases = @(
|
|
669
|
-
'federation-boundary', 'notify', 'stream', 'p2p',
|
|
670
|
-
'group', 'group-fs', 'collab', 'storage'
|
|
671
|
-
)
|
|
668
|
+
$phases = @(
|
|
669
|
+
'federation-boundary', 'notify', 'stream', 'p2p', 'read-state',
|
|
670
|
+
'group', 'group-fs', 'collab', 'storage'
|
|
671
|
+
)
|
|
672
672
|
foreach ($phase in $phases) {
|
|
673
673
|
$testSince = (Get-Date).ToUniversalTime().ToString('o')
|
|
674
674
|
$stamp = (Get-Date).ToUniversalTime().ToString('yyyyMMddHHmmss')
|
|
@@ -769,8 +769,9 @@ foreach ($case in $jsCases) {
|
|
|
769
769
|
| `federation-boundary` | `FEDERATION_MUTUAL_AUTH_OK`,以及 unauth/signature/issuer/RPC/event/Group-FS marker 的全部 `DENIED` |
|
|
770
770
|
| `notify` | `NOTIFY_CROSS_DOMAIN_OK` |
|
|
771
771
|
| `stream` | `STREAM_CREATED_EVENT_OK`、`STREAM_TARGET_BINDING_OK`、`STREAM_CLOSED_EVENT_OK` |
|
|
772
|
-
| `p2p` | `P2P_ONLINE_OK`、`P2P_ACK_OK`、`P2P_OFFLINE_RECONNECT_SKIPPED` |
|
|
773
|
-
| `
|
|
772
|
+
| `p2p` | `P2P_ONLINE_OK`、`P2P_ACK_OK`、`P2P_OFFLINE_RECONNECT_SKIPPED` |
|
|
773
|
+
| `read-state` | `READ_STATE_P2P_OK`、`READ_STATE_GROUP_OK`、`READ_STATE_CROSS_DEVICE_OK` |
|
|
774
|
+
| `group` | `GROUP_AUTHORITY_MEMBER_OK`、`GROUP_REMOTE_PULL_OK`、`GROUP_DIRECTORY_OK`、`GROUP_DIRECTORY_RECONNECT_SKIPPED`、`GROUP_MESSAGE_ONLINE_PULL_OK`、`GROUP_LEAVE_OK`、`GROUP_AID_CERT_OK` |
|
|
774
775
|
| `group-fs` | `GROUP_FS_OWNER_AREA_OK`、`GROUP_FS_NON_MEMBER_DENIED`、`GROUP_FS_MEMBERDATA_DIRECT_OK`、`GROUP_FS_OTHER_MEMBERDATA_DENIED`、`GROUP_FS_STORAGE_BYPASS_DENIED`、`GROUP_FS_MEMBERDATA_OK`、`GROUP_FS_REMOTE_COPY_OK`、`GROUP_FS_ACL_PRE_GRANT_DENIED`、`GROUP_FS_ACL_GRANTED`、`GROUP_FS_ACL_REVOKED_DENIED`、`GROUP_FS_ADMIN_DEFAULT_WRITE_OK`、`GROUP_FS_SHORT_AID_DENIED`、`GROUP_FS_AFTER_LEAVE_DENIED` |
|
|
775
776
|
| `collab` | `COLLAB_CROSS_DOMAIN_READ_OK`、`COLLAB_NON_MEMBER_DENIED`、`COLLAB_STORAGE_BYPASS_DENIED` |
|
|
776
777
|
| `storage` | `STORAGE_LIST_OK`、`STORAGE_RECONNECT_SKIPPED`、`STORAGE_PRIVATE_DENIED_OK`、`STORAGE_TOKEN_OK`、`STORAGE_CROSS_OWNER_ROUTING_OK`、`STORAGE_CLEANUP_OK` |
|
|
@@ -788,9 +789,35 @@ Notify 必须双向验证公开 SDK `notify()` 经过 Gateway 联邦事件转发
|
|
|
788
789
|
3. 当前 `--skip-reconnect` 范围明确不执行离线重连回补,必须输出 `P2P_OFFLINE_RECONNECT_SKIPPED`;恢复 reconnect 验收时,才要求接收端离线发送、再上线 pull 并 ACK。
|
|
789
790
|
4. receiver AID 的 issuer 必须决定远端 Gateway;本域 Message 不得把异域 receiver 当成本地收件人查询后返回 not found。
|
|
790
791
|
|
|
791
|
-
成功标准是发送响应、远端接收、pull/ack 和两域日志中的同一 trace/message ID 全部闭合。仅有 `message.send` 返回成功不算通过;远端超时必须返回明确的 federation unavailable/timeout,不能伪装成接收方不存在。
|
|
792
|
-
|
|
793
|
-
###
|
|
792
|
+
成功标准是发送响应、远端接收、pull/ack 和两域日志中的同一 trace/message ID 全部闭合。仅有 `message.send` 返回成功不算通过;远端超时必须返回明确的 federation unavailable/timeout,不能伪装成接收方不存在。
|
|
793
|
+
|
|
794
|
+
### 跨设备已读未读验收
|
|
795
|
+
|
|
796
|
+
本阶段只使用本地真实域 `agentid.pub` 与 `agentid.cn` 的固定身份,验证 Message P2P、Group 消息和同一 AID 多设备的已读状态同步。不得使用 `federation-test` 的 `dist-aid.com` / `dist-aid.net` 身份或 `cross_domain_read_state.py` 作为本轮跨域验收证据;隔离 federation 仅在本指南末尾的独立参考章节中运行。
|
|
797
|
+
|
|
798
|
+
在完成 `p2p` 阶段后执行:
|
|
799
|
+
|
|
800
|
+
```powershell
|
|
801
|
+
$runId = "agentid-read-state-" + (Get-Date).ToUniversalTime().ToString('yyyyMMddHHmmss')
|
|
802
|
+
docker run --rm --network kite-agentid-federation-net `
|
|
803
|
+
-v "D:\modelunion\kite\aun-sdk-core\python\src:/sdk/src:ro" `
|
|
804
|
+
-v "D:\modelunion\kite\docker-deploy\tests\agentid_cross_domain_e2e.py:/tests/agentid_cross_domain_e2e.py:ro" `
|
|
805
|
+
-v "D:\modelunion\kite\docker-deploy\data\extended-acceptance\group-management:/identities/pub:ro" `
|
|
806
|
+
-v "D:\modelunion\kite\docker-deploy\data-agentid-cn\sdk-testers\python-fixed:/identities/cn:ro" `
|
|
807
|
+
-e PYTHONPATH=/sdk/src `
|
|
808
|
+
-e AUN_E2E_PUB_IDENTITY_ROOT=/identities/pub `
|
|
809
|
+
-e AUN_E2E_CN_IDENTITY_ROOT=/identities/cn `
|
|
810
|
+
-e AUN_E2E_CN_ENCRYPTION_SEED=cross-domain-e2e-v1 `
|
|
811
|
+
-e AUN_E2E_RUN_ROOT=/tmp/aun-e2e `
|
|
812
|
+
-e AUN_SDK_UVLOOP=0 -e AUN_CLI_UVLOOP=0 -e AUN_BENCH_UVLOOP=0 `
|
|
813
|
+
-e HTTP_PROXY= -e HTTPS_PROXY= -e ALL_PROXY= -e NO_PROXY=* `
|
|
814
|
+
aun-sdk-tester:latest python /tests/agentid_cross_domain_e2e.py `
|
|
815
|
+
--phase read-state --skip-reconnect --run-id $runId
|
|
816
|
+
```
|
|
817
|
+
|
|
818
|
+
该阶段必须输出 `READ_STATE_P2P_OK`、`READ_STATE_GROUP_OK`、`READ_STATE_CROSS_DEVICE_OK` 和 `PASS phase=read-state`。P2P 与 Group 的状态上报、重复上报幂等、查询结果及跨域消息 ID 必须在同一轮中闭合;跨设备部分必须使用同一 AID 的两个不同 `device_id`,并验证在线 `message.read_changed` 事件及查询补偿。失败后只从 `read-state` 阶段继续,不重复已通过的 `federation-boundary`、Notify、Stream 和 P2P 阶段。
|
|
819
|
+
|
|
820
|
+
### Group 跨域验收
|
|
794
821
|
|
|
795
822
|
先由 `.agentid.pub` 成员创建群并加入 `.agentid.cn` 成员,再反向创建一次。每个方向都必须验证:
|
|
796
823
|
|
package/_packed_docs/aun/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md
CHANGED
|
@@ -55,7 +55,7 @@ Tester 和 cross-SDK 都不是服务端环境:
|
|
|
55
55
|
|
|
56
56
|
### 默认单实例测试前强制核验
|
|
57
57
|
|
|
58
|
-
每次开始本地单实例测试前,先选择域并执行以下只读检查。材料清单固定了 Issuer CA 指纹、
|
|
58
|
+
每次开始本地单实例测试前,先选择域并执行以下只读检查。材料清单固定了 Issuer CA 指纹、12 个服务 AID 和 MySQL `server-uuid`;Compose 解析结果必须把 MySQL 和应用四个数据挂载全部指向同一域:
|
|
59
59
|
|
|
60
60
|
```powershell
|
|
61
61
|
$domain = 'agentid.pub' # 校验本地跨域对端时改为 agentid.cn
|
|
@@ -183,7 +183,7 @@ JS 的真实 E2E 统一使用 `js/tests/e2e-browser`,不要把浏览器 E2E
|
|
|
183
183
|
|
|
184
184
|
## 一次性准备
|
|
185
185
|
|
|
186
|
-
首次准备时构建服务镜像和 Python Tester 镜像。服务镜像会同时构建
|
|
186
|
+
首次准备时构建服务镜像和 Python Tester 镜像。服务镜像会同时构建 12 个默认 Go 服务 binary:
|
|
187
187
|
|
|
188
188
|
```powershell
|
|
189
189
|
cd D:\modelunion\kite\docker-deploy
|
|
@@ -341,7 +341,7 @@ docker compose --env-file agentid.cn/local.env --project-directory . `
|
|
|
341
341
|
-f docker-compose.yml -f agentid.cn/docker-compose.yml config --quiet
|
|
342
342
|
```
|
|
343
343
|
|
|
344
|
-
解析后的服务端数据源必须全部位于 `data-agentid-cn`。Issuer CA 指纹、
|
|
344
|
+
解析后的服务端数据源必须全部位于 `data-agentid-cn`。Issuer CA 指纹、12 个服务 AID 和 MySQL `server-uuid` 由 `agentid.cn/materials.json` 锁定;不得从 `data` 复制 `agentid.pub` 的 Issuer、服务身份或数据库来补缺。
|
|
345
345
|
|
|
346
346
|
`agentid.cn` Tester 使用独立 project、容器名、网络和可写目录,不与 `agentid.pub` 共享 SDK 身份。单域测试可按该域 `local.env` 启动;真实双域测试不能只启动这个 Tester,完整拓扑、固定身份规则与验收顺序见分布式指南:
|
|
347
347
|
|
|
@@ -1149,7 +1149,7 @@ docker compose --env-file NUL -f docker-compose.build.yml build kite
|
|
|
1149
1149
|
|
|
1150
1150
|
### 首次安装与日常替换
|
|
1151
1151
|
|
|
1152
|
-
目标 Linux 主机先准备域专属材料(至少 CA、TLS、
|
|
1152
|
+
目标 Linux 主机先准备域专属材料(至少 CA、TLS、12 个服务 AID 和既有 MySQL 数据)。Compose 已内置可直接运行的默认值:数据根为当前目录的 `./data`,MySQL root 密码为 `root`,控制令牌为 `aun-local-control-token`,服务面令牌为 `aun-local-service-plane-token`;Issuer 固定为 `agentid.pub`。因此不创建 `.env`、不执行任何 `export`,`down` 和 `up` 也都能正常解析。
|
|
1153
1153
|
|
|
1154
1154
|
首次部署时,把 `bootstrap-materials.tar.gz` 解到三文件目录得到 `init.sql` 并长期保留,同时把 CA、TLS、AID 和既有运行数据放到 `./data/CA`、`./data/certs`、`./data/AIDs`、`./data/mysql`、`./data/redis` 与 `./data/kite-workspace`。然后执行:
|
|
1155
1155
|
|
|
@@ -92,98 +92,11 @@ AID 命名规则:
|
|
|
92
92
|
}
|
|
93
93
|
```
|
|
94
94
|
|
|
95
|
-
**说明**:
|
|
96
|
-
- Gateway 将请求转发到 Auth 服务,Auth 服务调用 CA 签发证书
|
|
97
|
-
- 创建 AID 时固定签发 P-256 证书,确保最大兼容性
|
|
98
|
-
- 协议默认允许创建任意 `aid`;命名冲突、抢注、保留名、审批制等约束由具体网络运营策略决定
|
|
99
|
-
- 客户端需保存返回的证书和本地生成的私钥
|
|
100
|
-
|
|
101
|
-
### 1.3.1 带 type/owner 的新注册流程
|
|
102
|
-
|
|
103
|
-
`auth.create_aid` 只负责签发证书,保持 legacy 兼容语义,不创建 owner relation。支持 owner 的新身份由 SDK 先完成证书签发,再调用以下可恢复 operation:
|
|
104
|
-
|
|
105
|
-
```text
|
|
106
|
-
证书签发(auth.create_aid)
|
|
107
|
-
→ auth.aid_register_prepare
|
|
108
|
-
→ auth.aid_register_submit(subject/owner 签名,可分批)
|
|
109
|
-
→ 使用 owner_operation_id 发布带 ownership_proof 的 agent.md
|
|
110
|
-
→ auth.aid_register_activate
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
#### auth.aid_register_prepare
|
|
114
|
-
|
|
115
|
-
| 参数 | 类型 | 必需 | 说明 |
|
|
116
|
-
|------|------|:----:|------|
|
|
117
|
-
| `aid`(或 `subject_aid`) | string | 是 | subject AID;服务端规范化为小写 |
|
|
118
|
-
| `type`(或 `aid_type`) | string | 是 | `human`、`agent`、`group`、`service`、`device`、`host`、`org`、`custom` |
|
|
119
|
-
| `owner`(或 `owner_aid`) | string | 条件 | 非 `human` 必填;`agent` 可与 subject 相同 |
|
|
120
|
-
| `idempotency_key` | string | 否 | 相同 kind/subject/key 返回同一 operation |
|
|
121
|
-
|
|
122
|
-
约束:`human` 不得指定 owner;非 `human` 必须指定 owner;只有 `agent` 允许 self-owner;外部 owner 必须是已登记且状态为 `active` 或 `not_applicable` 的 `human`/`agent`,并且不能形成 owner 环。prepare 成功后 operation 的初始 state 为 `proof_pending`(无 owner 的 human 为 `agent_md_pending`),TTL 固定为 7 天。
|
|
123
|
-
|
|
124
|
-
Auth 可登记 `org` 关系类型;但当前 CA/Name Service 只实现 `signing` 与 `group_identity` 证书用途,尚未实现 `org_identity` 映射。组织身份若使用现有流程,不能按已实现的组织专用证书用途对外承诺。
|
|
125
|
-
|
|
126
|
-
**响应**(字段会按场景返回):
|
|
127
|
-
|
|
128
|
-
```json
|
|
129
|
-
{
|
|
130
|
-
"operation_id": "op-...",
|
|
131
|
-
"kind": "register",
|
|
132
|
-
"aid": "sensor.agentid.pub",
|
|
133
|
-
"subject_aid": "sensor.agentid.pub",
|
|
134
|
-
"type": "agent",
|
|
135
|
-
"owner": "alice.agentid.pub",
|
|
136
|
-
"owner_aid": "alice.agentid.pub",
|
|
137
|
-
"state": "proof_pending",
|
|
138
|
-
"operation_state": "proof_pending",
|
|
139
|
-
"ownership_status": "pending",
|
|
140
|
-
"relation_version": 0,
|
|
141
|
-
"proof_id": "550e8400-e29b-41d4-a716-446655440000",
|
|
142
|
-
"fact_hash": "<64 lowercase hex>",
|
|
143
|
-
"statement_hash": "<64 lowercase hex>",
|
|
144
|
-
"expires_at": "2026-10-13T00:00:00Z"
|
|
145
|
-
}
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
#### auth.aid_register_submit
|
|
149
|
-
|
|
150
|
-
请求至少包含 `operation_id`,并可分批提交:
|
|
151
|
-
|
|
152
|
-
| 参数 | 类型 | 说明 |
|
|
153
|
-
|------|------|------|
|
|
154
|
-
| `subject_signature` | object | subject 对 ownership statement 的签名 |
|
|
155
|
-
| `owner_signature` | object | 外部 owner 对同一 statement 的签名;self-owner 禁止 |
|
|
156
|
-
|
|
157
|
-
签名封套只允许 `cert_fingerprint`(`sha256:<64 hex>`)和严格 Base64 的 `signature`。提交后双方签名齐全时 state 变为 `agent_md_pending`;重复提交相同签名幂等,替换已保存签名返回 `owner_relation_conflict`。
|
|
158
|
-
|
|
159
|
-
#### auth.aid_register_activate / auth.aid_register_status
|
|
160
|
-
|
|
161
|
-
`auth.aid_register_activate` 只接受 `operation_id`。客户端必须先用该 operation 的一次性 `owner_operation_id` 发布与 operation 完全匹配的 `agent.md`,成功后返回 `ownership_status=active`(`human` 返回 `not_applicable`)和 `relation_version=1`。`auth.aid_register_status` 接受 `aid`,返回当前登记或 pending operation 的状态。
|
|
162
|
-
|
|
163
|
-
### 1.3.2 已有 AID 的 aid_bind 流程
|
|
164
|
-
|
|
165
|
-
旧客户端通过 `auth.create_aid` 创建的 AID,以及已被 `owner_relation_unbind` 解除关系的 AID,使用 `auth.aid_bind_prepare`、`auth.aid_bind_submit`、`auth.aid_bind_activate` 和 `auth.aid_bind_status` 建立或重建关系。该流程不签发新证书、不改变 AID、密钥、登录或消息通信身份;绑定期间状态为 `legacy_unbound`/`pending`,基本登录和通信仍可用。
|
|
166
|
-
|
|
167
|
-
`aid_bind_prepare` 的参数和签名规则与新注册相同,但 active relation 不能被 bind 替换;已存在的 type/owner 只能重复提交完全相同的值。绑定失败或 operation 过期不会吊销证书。`auth.aid_operation_get` 接受 `operation_id`,用于进程重启后查询并恢复 pending operation。
|
|
168
|
-
|
|
169
|
-
### 1.3.3 Ownership proof 与 canonical bytes
|
|
170
|
-
|
|
171
|
-
四端实现必须对同一 UTF-8 字节序列计算摘要和签名:
|
|
172
|
-
|
|
173
|
-
```text
|
|
174
|
-
fact = canonical_json({"subject_aid": subject_aid, "owner_aid": owner_aid})
|
|
175
|
-
statement = canonical_json({"proof_id": proof_id, "subject_aid": subject_aid, "owner_aid": owner_aid})
|
|
176
|
-
signing_bytes = UTF-8("AUN-AID-OWNER-RELATION-V1;") || statement
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
对象键按字典序、无空格;AID 先规范化为 ASCII 小写;`proof_id` 必须为 UUID v4。`fact_hash=SHA-256(fact)`,`statement_hash=SHA-256(signing_bytes)`,均为裸小写十六进制。agent.md 的 `owner` 与 `ownership_proof` 必须同时出现;proof 的 `subject_aid`/`owner_aid` 必须分别等于 agent.md 的 `aid`/`owner`。`human` 不得携带这两个字段。
|
|
180
|
-
|
|
181
|
-
### 1.3.4 Owner change、解绑与 type 变更
|
|
182
|
-
|
|
183
|
-
- `auth.owner_change_prepare` 参数为 `subject_aid`、`new_owner_aid`、可选 `current_owner_aid`、`expected_relation_version`、`idempotency_key`;只允许当前 owner 发起,并检查 CAS、owner 类型和环。operation 的 `transfer_payload` 包含 `operation_id`、subject、old/new owner、new proof、当前 relation version、challenge nonce 和过期时间。
|
|
184
|
-
- `auth.owner_change_submit` 接收 `old_owner_signature`、`subject_signature`、`new_owner_signature`。old owner 签署 `AUN-AID-OWNER-TRANSFER-V1;` 加 `transfer_payload`;subject 和 new owner 签署新的 ownership statement。三份签名齐全后发布新 agent.md,再调用 `auth.owner_change_activate`。
|
|
185
|
-
- 激活成功后 `relation_version` 递增;旧 owner 的 relation ACL 被撤销但数据保留,新 owner 的 ACL 被创建。subject 自身签名不能替代 old owner 授权。
|
|
186
|
-
- `auth.owner_relation_status` 查询当前关系;`auth.owner_relation_unbind` 只允许当前 owner(可带 `expected_relation_version`),状态变为 `unbound`,版本递增,证书和数据保留;`auth.aid_type_change` 修改登记 type,但有 active 子关系时拒绝。
|
|
95
|
+
**说明**:
|
|
96
|
+
- Gateway 将请求转发到 Auth 服务,Auth 服务调用 CA 签发证书
|
|
97
|
+
- 创建 AID 时固定签发 P-256 证书,确保最大兼容性
|
|
98
|
+
- 协议默认允许创建任意 `aid`;命名冲突、抢注、保留名、审批制等约束由具体网络运营策略决定
|
|
99
|
+
- 客户端需保存返回的证书和本地生成的私钥
|
|
187
100
|
|
|
188
101
|
## 1.4 auth.aid_login1 / auth.aid_login2
|
|
189
102
|
|
|
@@ -356,48 +269,48 @@ signature = ECDSA_sign(private_key, SHA256(message))
|
|
|
356
269
|
{
|
|
357
270
|
"jsonrpc": "2.0",
|
|
358
271
|
"id": 4,
|
|
359
|
-
"result": {
|
|
360
|
-
"success": true,
|
|
361
|
-
"access_token": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9...",
|
|
362
|
-
"refresh_token": "new_refresh_token...",
|
|
363
|
-
"expires_in": 3600,
|
|
364
|
-
"aid": "alice.agentid.pub",
|
|
365
|
-
"refresh_count": 12,
|
|
366
|
-
"relogin_required": false,
|
|
367
|
-
"retryable": false,
|
|
368
|
-
"diagnostic": {
|
|
369
|
-
"aid": "alice.agentid.pub",
|
|
370
|
-
"refresh_count": 12
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
```
|
|
272
|
+
"result": {
|
|
273
|
+
"success": true,
|
|
274
|
+
"access_token": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9...",
|
|
275
|
+
"refresh_token": "new_refresh_token...",
|
|
276
|
+
"expires_in": 3600,
|
|
277
|
+
"aid": "alice.agentid.pub",
|
|
278
|
+
"refresh_count": 12,
|
|
279
|
+
"relogin_required": false,
|
|
280
|
+
"retryable": false,
|
|
281
|
+
"diagnostic": {
|
|
282
|
+
"aid": "alice.agentid.pub",
|
|
283
|
+
"refresh_count": 12
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
```
|
|
375
288
|
|
|
376
289
|
**说明**:
|
|
377
290
|
- 调用时提交当前持有的 `refresh_token`
|
|
378
|
-
- 服务端验证后吊销旧 `refresh_token`,签发新的 `access_token` 和 `refresh_token`
|
|
379
|
-
- 旧 access_token 在其过期时间前仍然有效(JWT 标准行为),但客户端应立即切换到新 token
|
|
380
|
-
- 建议在 access_token 过期前 60 秒刷新
|
|
381
|
-
- 响应包含结构化状态字段:`relogin_required=true` 表示客户端必须放弃本地 token 并重新登录;`retryable=true` 表示可退避重试;`diagnostic` 只包含脱敏诊断字段
|
|
382
|
-
|
|
383
|
-
**失败响应示例**:
|
|
384
|
-
|
|
385
|
-
```json
|
|
386
|
-
{
|
|
387
|
-
"success": false,
|
|
388
|
-
"error": "invalid_or_expired_refresh_token",
|
|
389
|
-
"relogin_required": true,
|
|
390
|
-
"retryable": false,
|
|
391
|
-
"diagnostic": {
|
|
392
|
-
"refresh_token_hash_prefix": "sha256:abcd..."
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
```
|
|
396
|
-
|
|
397
|
-
**刷新限制**:
|
|
398
|
-
- 刷新链总时长不超过 30 天,或最多刷新 720 次
|
|
399
|
-
- 达到限制后返回 `relogin_required=true`,客户端必须重新执行完整的两阶段认证
|
|
400
|
-
- 具体限制值由服务端实现决定
|
|
291
|
+
- 服务端验证后吊销旧 `refresh_token`,签发新的 `access_token` 和 `refresh_token`
|
|
292
|
+
- 旧 access_token 在其过期时间前仍然有效(JWT 标准行为),但客户端应立即切换到新 token
|
|
293
|
+
- 建议在 access_token 过期前 60 秒刷新
|
|
294
|
+
- 响应包含结构化状态字段:`relogin_required=true` 表示客户端必须放弃本地 token 并重新登录;`retryable=true` 表示可退避重试;`diagnostic` 只包含脱敏诊断字段
|
|
295
|
+
|
|
296
|
+
**失败响应示例**:
|
|
297
|
+
|
|
298
|
+
```json
|
|
299
|
+
{
|
|
300
|
+
"success": false,
|
|
301
|
+
"error": "invalid_or_expired_refresh_token",
|
|
302
|
+
"relogin_required": true,
|
|
303
|
+
"retryable": false,
|
|
304
|
+
"diagnostic": {
|
|
305
|
+
"refresh_token_hash_prefix": "sha256:abcd..."
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
**刷新限制**:
|
|
311
|
+
- 刷新链总时长不超过 30 天,或最多刷新 720 次
|
|
312
|
+
- 达到限制后返回 `relogin_required=true`,客户端必须重新执行完整的两阶段认证
|
|
313
|
+
- 具体限制值由服务端实现决定
|
|
401
314
|
|
|
402
315
|
## 1.6 证书生命周期方法
|
|
403
316
|
|
|
@@ -646,9 +559,7 @@ signature = ECDSA_sign(private_key, SHA256(message))
|
|
|
646
559
|
| `-32003` | Signature verification failed — 签名验证失败 |
|
|
647
560
|
| `-32005` | Authentication expired — Token 过期或刷新链耗尽 |
|
|
648
561
|
|
|
649
|
-
> 通用 JSON-RPC 2.0 错误码(-32700/-32600/-32601/-32602/-32603)同样适用,见 [07-JSON-RPC](07-JSON-RPC.md)。
|
|
650
|
-
|
|
651
|
-
Owner relation 方法使用 JSON-RPC `-32602`,并在 `error.data.error_code` 中返回稳定错误码;完整列表和 `signature_verification_unavailable`、`type_change_blocked`、`aid_binding_required` 的说明见 [07-错误码与状态机](07-错误码与状态机.md) §7.1。
|
|
562
|
+
> 通用 JSON-RPC 2.0 错误码(-32700/-32600/-32601/-32602/-32603)同样适用,见 [07-JSON-RPC](07-JSON-RPC.md)。
|
|
652
563
|
|
|
653
564
|
## 1.9 安全说明
|
|
654
565
|
|