@agentunion/fastaun 0.5.23 → 0.5.25

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 (54) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/_packed_docs/CHANGELOG.md +62 -0
  3. package/_packed_docs/INDEX.md +27 -15
  4. package/_packed_docs/KITE_DOCS_GUIDE.md +22 -19
  5. package/_packed_docs/TS/346/263/250/345/206/214/350/207/252/345/212/250/347/273/221/345/256/232Owner/347/232/204E2E/351/252/214/350/257/201/344/273/243/347/240/201.md +196 -0
  6. package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.1.md +2 -2
  7. package/_packed_docs/sdk/0.5.24-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +401 -0
  8. package/_packed_docs/sdk/0.5.24-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +354 -0
  9. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +17 -7
  10. package/_packed_docs/sdk/INDEX.md +30 -6
  11. package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/2272.1.md +49 -2
  12. 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 +123 -72
  13. 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 +173 -96
  14. package/dist/agent-md.d.ts +2 -1
  15. package/dist/agent-md.js +52 -22
  16. package/dist/agent-md.js.map +1 -1
  17. package/dist/aid-store.d.ts +1 -0
  18. package/dist/aid-store.js +34 -12
  19. package/dist/aid-store.js.map +1 -1
  20. package/dist/auth.d.ts +1 -0
  21. package/dist/auth.js +44 -10
  22. package/dist/auth.js.map +1 -1
  23. package/dist/client/delivery.d.ts +3 -0
  24. package/dist/client/delivery.js +197 -47
  25. package/dist/client/delivery.js.map +1 -1
  26. package/dist/client/rpc-pipeline.js +10 -0
  27. package/dist/client/rpc-pipeline.js.map +1 -1
  28. package/dist/client/v2-e2ee.js +17 -5
  29. package/dist/client/v2-e2ee.js.map +1 -1
  30. package/dist/client.d.ts +10 -10
  31. package/dist/client.js +158 -119
  32. package/dist/client.js.map +1 -1
  33. package/dist/group-fs.js +5 -0
  34. package/dist/group-fs.js.map +1 -1
  35. package/dist/index.d.ts +1 -1
  36. package/dist/keystore/aid-db.d.ts +1 -8
  37. package/dist/keystore/aid-db.js +46 -204
  38. package/dist/keystore/aid-db.js.map +1 -1
  39. package/dist/keystore/index.d.ts +0 -15
  40. package/dist/keystore/local-token-store.d.ts +1 -6
  41. package/dist/keystore/local-token-store.js +0 -15
  42. package/dist/keystore/local-token-store.js.map +1 -1
  43. package/dist/ownership-v21.d.ts +4 -2
  44. package/dist/ownership-v21.js +86 -42
  45. package/dist/ownership-v21.js.map +1 -1
  46. package/dist/ownership-workflow.d.ts +30 -59
  47. package/dist/ownership-workflow.js +260 -1667
  48. package/dist/ownership-workflow.js.map +1 -1
  49. package/dist/tools/cross-sdk-agent.d.ts +1 -2
  50. package/dist/tools/cross-sdk-agent.js +7 -14
  51. package/dist/tools/cross-sdk-agent.js.map +1 -1
  52. package/dist/version.d.ts +1 -1
  53. package/dist/version.js +1 -1
  54. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -6,6 +6,68 @@
6
6
 
7
7
  ---
8
8
 
9
+ ## 0.5.25 — 未发布
10
+
11
+ > 基线:已提交的 `0.5.24`(`47c59687`);本节整理截至 2026-10-25 工作区的 Node.js SDK 增量。
12
+
13
+ ### 修复
14
+
15
+ #### 消息拉取与实时交付
16
+
17
+ - Pull 成功但水位无进展、且没有待 ACK 或恢复工作时暂停后台重试,等待新 Push/hint 或显式拉取;保留在途更高 head 和未知上界通知,避免连续空 Pull。
18
+ - 已被耐久游标和服务端 ACK 覆盖的持久 Push 不再触发重复补拉;已覆盖的群 unread hint 只补未完成的 ACK。达到已知服务端 head 后,即使返回满页也停止续拉;仅同时缺少 `has_more` 和 head 的旧响应保留满页续拉兼容。
19
+ - 完整 P2P volatile Push 直接解密、交付并 ACK,减少不必要的 Pull 和持久游标初始化;继续检查发送者、接收者、设备、slot 和身份代际。
20
+ - 本人 `group.unblock` 成功后恢复目标群消息与事件拉取,隔离解除前迟到的 blocked 响应,避免旧失败重新停止已恢复的群。
21
+ - 仅从没有普通消息消费者变为首个消费者时刷新 peer 目录;追加消息监听仍唤醒已有拉取需求,不重复查询目录。
22
+
23
+ #### Ownership 与 agent.md
24
+
25
+ - Ownership 先读取权威 `storage.head_object`,SHA-256 与 revision 未变时复用已校验正文;相同文档及证书材料复用静态验签结果,仍核对当前证书、用途、有效期和吊销状态。
26
+ - 合并相同 Ownership 证书取证并短期复用有效证据,缓存按 Gateway、AID、指纹、用途、信任根和 epoch 隔离,并受 OCSP 与当前状态观察窗口约束。
27
+ - 同一观察版本的 `agent.md` 自动下载失败后退避 60 秒并合并请求;新观察和显式下载可立即重试,旧版本、旧目录或旧身份的迟到结果不覆盖当前缓存与退避状态。
28
+ - Gateway 候选按规范化 issuer domain 分别缓存,外域发现不覆盖本域连接地址;切换身份或关闭客户端时清理缓存,外域 Name Service 回退不误用本域配置。
29
+
30
+ #### GroupFS 错误兼容
31
+
32
+ - GroupFS 下载完整性校验失败时,将缓存层 `EHASH` 映射为既有 `ECONFLICT`,保持群文件 API 的错误契约;Storage API 继续返回 `EHASH`。
33
+
34
+ ### 版本统一
35
+
36
+ - 包配置、锁文件、运行时 `VERSION` 和 V2 envelope 的 `sdk_version` 统一为 `0.5.25`。
37
+
38
+ ## 0.5.24 — 未发布
39
+
40
+ > 基线:npm 已发布的 `@agentunion/fastaun@0.5.23` 编译产物;本节整理截至 2026-10-24 工作区的 SDK 增量。
41
+
42
+ ### 新功能
43
+
44
+ #### 本地子 agent 绑定与转移
45
+ - 新增 `bindLocalSubaid(subClient)` 与 `transferLocalSubaid(subClient, newOwnerClient)`:分别使用 owner/sub 两份、原 owner/sub/新 owner 三份本地身份材料,直接签署并条件提交本人文件,由 NS 验收,不发送 P2P 审批消息。转移先发布原 owner 授权,目标共识成立后按对象版本清理原授权。
46
+ - Facade 自动为参与身份建立专属 `ownership-UUID` slot 的短连接,完成认证,关闭后台同步和自动重连,结束时关闭连接;传入的业务 client 无须预先连接。仅支持不同的普通 `agent` 身份及已验证的 NS 名片,human owner 继续使用人工确认流程。
47
+
48
+ ### 变更
49
+
50
+ #### Ownership 由文件和 NS 权威状态驱动
51
+ - 删除 Ownership 任务状态机、任务持久化、任务 inbox/outbox、审批记录、任务 CAS 和连接后自动恢复,不引入 WAL 或额外 decisions 请求。仅保留当次调用内存上下文及已认证请求索引;accept/reject 缺少内存请求时可从普通消息历史查找原请求,找不到则返回 `operation_not_found`。
52
+ - 绑定由发起方先上传自己的 `agent.md` 或 `owner.md` 并通知对端;同意方提交本方文件并触发 NS 验收。转移先由原 owner 发布指定目标、版本和期限的授权再通知,sub 与新 owner 分别提交本人文件,不要求同时在线或固定确认顺序。
53
+ - 冲突依据当前候选和 NS 归属事实判断,保留 NS ETag、Storage `expected_version` 和关系版本。未锁定前 sub 可条件替换 owner 声明,以最后成功提交者为准;拒绝仅发送反馈,不回滚已上传的候选。锁定后的 accept 只能确认相同目标关系,reject 不能改变归属,须走释放或合法转移。
54
+ - 注册时指定 owner,改为在本次注册调用内以专属短连接发起绑定,不再保存等待下次连接执行的绑定恢复意图。初始名片上传失败会返回失败并保留已注册身份;成功发起请求不代表 owner 已确认。
55
+
56
+ ### 修复
57
+
58
+ - 本地编排在异步读取、签名及上传前后检查源身份;参与 client 切换身份时停止后续副作用,避免沿用旧身份材料。
59
+ - 转移支持读取 NS Stage 候选,兼容候选正文配合旧 active 锁或已晋升目标锁的响应;继续核对 Stage 能力、原签名字节、ETag、版本、授权期限和 CAS,最终成功以普通 active 共识为准。首次绑定仍要求 `pending/unlocked`,重试不能覆盖已替换的候选。
60
+ - 名片观察有 ETag 时只按 ETag 判断内容变化,无 ETag 才使用 Last-Modified。`resolve` 的 Ownership 快照还须匹配当前展示名片的 sub、ETag 和摘要;`forceRefresh` 不再单独强制 Ownership 检查,同 ETag 可复用既有快照,显式 `ownershipTtlMs <= 0` 仍可绕过快照。
61
+ - 普通消息入口隔离消费不可重试的非法 Ownership 控制消息,避免旧非法消息阻塞整页;直接调用 workflow 仍严格报错,合法请求后续的 NS/Storage 故障继续传播,不提前 ACK。
62
+
63
+ ### 兼容性与验证边界
64
+
65
+ - 保留绑定、确认、拒绝、释放、转移和共识查询 API、`aun.ownership.sdk.v1` 控制格式及双文件签名格式;删除 `resetOwnershipTask()` 和 `OwnershipTaskResetResult` 导出。旧持久任务不再读取或恢复,故障后须查询 NS 并显式重新发起。
66
+ - `OwnershipTaskResult` 名称保留,但普通流程的 `completed`/`step=local_actions` 只表示本次动作完成,最终归属须查询 `checkOwnershipConsensus()`;`ownership.completed` 仅在观测到共识时发出。旧 `getOwner()` 返回 `null`,`getOwnershipStatus()` 返回 `legacy_unbound` 兼容壳,不可作为归属权威。
67
+ - 完整的新语义需配套 NS:旧 2.1 NS 的普通绑定和文件已齐的 local 正常路径可用,但 sub 先接受转移、Stage 交错及同一归属事实重签等边界依赖服务端更新。普通名片上传仍须保留已有关系材料,group/org 专属生命周期不受本次任务删除影响。
68
+ - 包配置、锁文件、运行时 `VERSION` 和 V2 envelope 的 `sdk_version` 统一为 `0.5.24`。证书/凭证缓存、撤销小时补拉和 peer 名片已验正文缓存已在 `0.5.23`,不重复计为本次新增。
69
+ - 扩展无持久任务、故障后重发、候选替换、锁后重复处理、异步转移、双/三身份 local 编排、专属 slot、身份切换和快照一致性测试,补充 [local E2E](tests/e2e/ownership-local-live.test.ts)。执行证据与四端边界见 [parity 文档](../python/CHANGES_FOR_PARITY.md),不以用例存在代替全量通过结论。
70
+
9
71
  ## 0.5.22 — 未发布
10
72
 
11
73
  > 基线:已发布的 `0.5.21`;本节整理截至 2026-10-23 工作区的 SDK 增量。
@@ -6,6 +6,68 @@
6
6
 
7
7
  ---
8
8
 
9
+ ## 0.5.25 — 未发布
10
+
11
+ > 基线:已提交的 `0.5.24`(`47c59687`);本节整理截至 2026-10-25 工作区的 Node.js SDK 增量。
12
+
13
+ ### 修复
14
+
15
+ #### 消息拉取与实时交付
16
+
17
+ - Pull 成功但水位无进展、且没有待 ACK 或恢复工作时暂停后台重试,等待新 Push/hint 或显式拉取;保留在途更高 head 和未知上界通知,避免连续空 Pull。
18
+ - 已被耐久游标和服务端 ACK 覆盖的持久 Push 不再触发重复补拉;已覆盖的群 unread hint 只补未完成的 ACK。达到已知服务端 head 后,即使返回满页也停止续拉;仅同时缺少 `has_more` 和 head 的旧响应保留满页续拉兼容。
19
+ - 完整 P2P volatile Push 直接解密、交付并 ACK,减少不必要的 Pull 和持久游标初始化;继续检查发送者、接收者、设备、slot 和身份代际。
20
+ - 本人 `group.unblock` 成功后恢复目标群消息与事件拉取,隔离解除前迟到的 blocked 响应,避免旧失败重新停止已恢复的群。
21
+ - 仅从没有普通消息消费者变为首个消费者时刷新 peer 目录;追加消息监听仍唤醒已有拉取需求,不重复查询目录。
22
+
23
+ #### Ownership 与 agent.md
24
+
25
+ - Ownership 先读取权威 `storage.head_object`,SHA-256 与 revision 未变时复用已校验正文;相同文档及证书材料复用静态验签结果,仍核对当前证书、用途、有效期和吊销状态。
26
+ - 合并相同 Ownership 证书取证并短期复用有效证据,缓存按 Gateway、AID、指纹、用途、信任根和 epoch 隔离,并受 OCSP 与当前状态观察窗口约束。
27
+ - 同一观察版本的 `agent.md` 自动下载失败后退避 60 秒并合并请求;新观察和显式下载可立即重试,旧版本、旧目录或旧身份的迟到结果不覆盖当前缓存与退避状态。
28
+ - Gateway 候选按规范化 issuer domain 分别缓存,外域发现不覆盖本域连接地址;切换身份或关闭客户端时清理缓存,外域 Name Service 回退不误用本域配置。
29
+
30
+ #### GroupFS 错误兼容
31
+
32
+ - GroupFS 下载完整性校验失败时,将缓存层 `EHASH` 映射为既有 `ECONFLICT`,保持群文件 API 的错误契约;Storage API 继续返回 `EHASH`。
33
+
34
+ ### 版本统一
35
+
36
+ - 包配置、锁文件、运行时 `VERSION` 和 V2 envelope 的 `sdk_version` 统一为 `0.5.25`。
37
+
38
+ ## 0.5.24 — 未发布
39
+
40
+ > 基线:npm 已发布的 `@agentunion/fastaun@0.5.23` 编译产物;本节整理截至 2026-10-24 工作区的 SDK 增量。
41
+
42
+ ### 新功能
43
+
44
+ #### 本地子 agent 绑定与转移
45
+ - 新增 `bindLocalSubaid(subClient)` 与 `transferLocalSubaid(subClient, newOwnerClient)`:分别使用 owner/sub 两份、原 owner/sub/新 owner 三份本地身份材料,直接签署并条件提交本人文件,由 NS 验收,不发送 P2P 审批消息。转移先发布原 owner 授权,目标共识成立后按对象版本清理原授权。
46
+ - Facade 自动为参与身份建立专属 `ownership-UUID` slot 的短连接,完成认证,关闭后台同步和自动重连,结束时关闭连接;传入的业务 client 无须预先连接。仅支持不同的普通 `agent` 身份及已验证的 NS 名片,human owner 继续使用人工确认流程。
47
+
48
+ ### 变更
49
+
50
+ #### Ownership 由文件和 NS 权威状态驱动
51
+ - 删除 Ownership 任务状态机、任务持久化、任务 inbox/outbox、审批记录、任务 CAS 和连接后自动恢复,不引入 WAL 或额外 decisions 请求。仅保留当次调用内存上下文及已认证请求索引;accept/reject 缺少内存请求时可从普通消息历史查找原请求,找不到则返回 `operation_not_found`。
52
+ - 绑定由发起方先上传自己的 `agent.md` 或 `owner.md` 并通知对端;同意方提交本方文件并触发 NS 验收。转移先由原 owner 发布指定目标、版本和期限的授权再通知,sub 与新 owner 分别提交本人文件,不要求同时在线或固定确认顺序。
53
+ - 冲突依据当前候选和 NS 归属事实判断,保留 NS ETag、Storage `expected_version` 和关系版本。未锁定前 sub 可条件替换 owner 声明,以最后成功提交者为准;拒绝仅发送反馈,不回滚已上传的候选。锁定后的 accept 只能确认相同目标关系,reject 不能改变归属,须走释放或合法转移。
54
+ - 注册时指定 owner,改为在本次注册调用内以专属短连接发起绑定,不再保存等待下次连接执行的绑定恢复意图。初始名片上传失败会返回失败并保留已注册身份;成功发起请求不代表 owner 已确认。
55
+
56
+ ### 修复
57
+
58
+ - 本地编排在异步读取、签名及上传前后检查源身份;参与 client 切换身份时停止后续副作用,避免沿用旧身份材料。
59
+ - 转移支持读取 NS Stage 候选,兼容候选正文配合旧 active 锁或已晋升目标锁的响应;继续核对 Stage 能力、原签名字节、ETag、版本、授权期限和 CAS,最终成功以普通 active 共识为准。首次绑定仍要求 `pending/unlocked`,重试不能覆盖已替换的候选。
60
+ - 名片观察有 ETag 时只按 ETag 判断内容变化,无 ETag 才使用 Last-Modified。`resolve` 的 Ownership 快照还须匹配当前展示名片的 sub、ETag 和摘要;`forceRefresh` 不再单独强制 Ownership 检查,同 ETag 可复用既有快照,显式 `ownershipTtlMs <= 0` 仍可绕过快照。
61
+ - 普通消息入口隔离消费不可重试的非法 Ownership 控制消息,避免旧非法消息阻塞整页;直接调用 workflow 仍严格报错,合法请求后续的 NS/Storage 故障继续传播,不提前 ACK。
62
+
63
+ ### 兼容性与验证边界
64
+
65
+ - 保留绑定、确认、拒绝、释放、转移和共识查询 API、`aun.ownership.sdk.v1` 控制格式及双文件签名格式;删除 `resetOwnershipTask()` 和 `OwnershipTaskResetResult` 导出。旧持久任务不再读取或恢复,故障后须查询 NS 并显式重新发起。
66
+ - `OwnershipTaskResult` 名称保留,但普通流程的 `completed`/`step=local_actions` 只表示本次动作完成,最终归属须查询 `checkOwnershipConsensus()`;`ownership.completed` 仅在观测到共识时发出。旧 `getOwner()` 返回 `null`,`getOwnershipStatus()` 返回 `legacy_unbound` 兼容壳,不可作为归属权威。
67
+ - 完整的新语义需配套 NS:旧 2.1 NS 的普通绑定和文件已齐的 local 正常路径可用,但 sub 先接受转移、Stage 交错及同一归属事实重签等边界依赖服务端更新。普通名片上传仍须保留已有关系材料,group/org 专属生命周期不受本次任务删除影响。
68
+ - 包配置、锁文件、运行时 `VERSION` 和 V2 envelope 的 `sdk_version` 统一为 `0.5.24`。证书/凭证缓存、撤销小时补拉和 peer 名片已验正文缓存已在 `0.5.23`,不重复计为本次新增。
69
+ - 扩展无持久任务、故障后重发、候选替换、锁后重复处理、异步转移、双/三身份 local 编排、专属 slot、身份切换和快照一致性测试,补充 [local E2E](tests/e2e/ownership-local-live.test.ts)。执行证据与四端边界见 [parity 文档](../python/CHANGES_FOR_PARITY.md),不以用例存在代替全量通过结论。
70
+
9
71
  ## 0.5.22 — 未发布
10
72
 
11
73
  > 基线:已发布的 `0.5.21`;本节整理截至 2026-10-23 工作区的 SDK 增量。
@@ -12,6 +12,8 @@
12
12
  | [0.5.21 SDK 开发与移植指南](sdk/0.5.21-SDK开发与移植指南.md) | 四端公开契约、peer 水位、流控与提交边界、frontmatter/共识缓存、原 CAS 和旧任务、checkpoint、语言差异及验收顺序 |
13
13
  | [0.5.22 SDK 应用集成指南](sdk/0.5.22-SDK应用集成指南.md) / [注册自动绑定 Owner E2E](TS注册自动绑定Owner的E2E验证代码.md) | TypeScript 接入、消息订阅、两种绑定与审批恢复、resolve 展示、60 秒读缓存与刷新、撤销同步和组织完整成员包 |
14
14
  | [0.5.22 SDK 开发与移植指南](sdk/0.5.22-SDK开发与移植指南.md) | 后台退避、群状态、两种绑定与 Stage/CAS、消息内部消费、撤销同步、组织恢复及配套服务修复、默认读缓存、Rust 移植与验收 |
15
+ | [0.5.24 SDK 应用集成指南](sdk/0.5.24-SDK应用集成指南.md) | 当前身份与消息接入、无持久任务 Ownership、双/三身份 local 编排、展示与文件缓存、凭证组织及升级验收 |
16
+ | [0.5.24 SDK 开发与移植指南](sdk/0.5.24-SDK开发与移植指南.md) | 当前 peer/batch 提交、NS 事实与远端 CAS、local 短连接、观察与 PKI 缓存、持久化边界、语言差异及移植验收 |
15
17
  | [aun测试运行指南](aun测试运行指南.md) | `agentid.pub/agentid.cn` 双域本地单实例、MySQL 命名卷/bind 核验、独立固定材料与 Tester、Go 1.24、断网 cross-SDK、缓存专项首失败续跑、三文件线上镜像替换包、开箱默认配置、一次性初始化辅助包及单节点部署 |
16
18
  | [aun公网测试运行指南](aun公网测试运行指南.md) | 可配置 issuer domain 的 Python SDK 公网 integration/E2E runner、独立身份/运行目录、TLS 与服务端公网验收衔接 |
17
19
  | [aun分布式测试运行指南](aun分布式测试运行指南.md) | 当前worktree三节点/双域、固定身份runner和Storage OSS;P0授权启动/TLS/单活放置、Tester新pycache与C2续跑;MinIO双healthy/原marker重建读回通过,旧87a09263镜像及AIO04/pool05续跑通过,双形态历史六项C2分轮累计及恢复后最终完整六项C2通过;五app正常停启持久恢复与NS材料匹配/错误0已有证;第二轮5project全15容器停用、10依赖/control/新desired/worker恢复及SQL-before-app/before-SDK一致及旧事实/继续写/post SQL已证,恢复后schema/身份材料/最终完整C2及readiness收敛已证;MinIO原marker及最终日志已通过;新e294两域升级/旧87a回滚/恢复、SQL退休、最终C2各6项、持久v3→v4读写/正ACK及MinIO/诊断通过;fresh10005两域V2/签名状态/SQL/清理及pool重复confirm闭环通过,旧日志不倒推且全窗非0;原Pool Org/Cred首FAIL及历史10004/10006证据缺口保留;57d4双形态回滚恢复/局部重启、独立SDK最终C2/持久v4→v5、03默认1DH路径/清理/严格对账与配置持久化已证,最终日志已分类并保留来源缺口,P0默认1DH有限范围本地技术验收通过,Git/线上待;本轮有限清单真实失败已修复,历史参数/来源缺口旁列;群七天保留/物理清理后续另验、当前未实施;P0 C7部署撤回/保留数据及peer ACK恢复门禁,未签收、P1—P9未开始 |
@@ -33,9 +35,9 @@
33
35
  | [E2EE V2 消息通信时序图](sdk/E2EE_V2消息通信时序图.md) | 当前 V2-only P2P / Group 明文与加密主链路、设备密钥注册和 pull/ack 时序 |
34
36
  | [ProtectedHeaders 用法专题](sdk/ProtectedHeaders用法专题.md) | 四 SDK `protected_headers` API、E2EE V2 元数据 HMAC、自动字段和接收信任边界 |
35
37
  | [Ownership 协议定义 2.1](protocol/Ownership协议定义2.1.md) | agent.md/owner.md 关系、原格式兼容、release/清理/重绑版本、Header 投影、普通 agent.md 独立及旧 SDK 兼容;非权威 P2P 编排与 Group/Org 专属生命周期、实体主签、owner token 上传与可选附签和实体证书代际 |
36
- | [Ownership SDK 编排指南 2.1](sdk/Ownership-SDK编排指南2.1.md) | 七 Facade、审批、普通加密 P2P、本地事件、按角色完成证据与恢复契约 |
37
- | [Ownership 2.1 SDK 应用集成指南](sdk/Ownership2.1-SDK应用集成指南.md) | 应用侧 TS 接线与审批;sub-first/owner-first 绑定、释放、三方转移和重连恢复流程图,任务与当前共识分开判断 |
38
- | [Ownership 2.1 SDK 开发与移植指南](sdk/Ownership2.1-SDK开发与移植指南.md) | SDK 内部 TS 接口;严格文件签验、NS fresh 共识、Storage 同会话发布、收件持久化和原 CAS 恢复流程图 |
38
+ | [Ownership SDK 编排指南 2.1](sdk/Ownership-SDK编排指南2.1.md) | 历史编排方案;持久任务、自动恢复及一次性决定已由当前两份指南中的无状态流程替代 |
39
+ | [Ownership 2.1 SDK 应用集成指南](sdk/Ownership2.1-SDK应用集成指南.md) | 应用侧 TS 接线与审批;双向绑定、释放、转移、两个 local 编排及显式重试的流程图与示例,以 NS 当前归属为准 |
40
+ | [Ownership 2.1 SDK 开发与移植指南](sdk/Ownership2.1-SDK开发与移植指南.md) | SDK 内部签验、NS 验收、Storage 条件发布、消息处理、两/三身份本地编排及文件 CAS;不维护 Ownership 任务或 WAL |
39
41
  | [凭证与组织服务 SDK 应用集成指南](sdk/凭证与组织服务SDK应用集成指南.md) | TS 示例与凭证登记/验证、成员申请/邀请、续期、撤销同步和组织 rekey/finalize 转让流程图 |
40
42
  | [凭证与组织服务 SDK 开发与移植指南](sdk/凭证与组织服务SDK开发与移植指南.md) | TS 内部示例与 Verify、双层请求摘要、登记最终化、撤销快照和实体 checkpoint 流程图;跨语言契约与验收 |
41
43
  | [凭证服务 RPC 手册](sdk/09-凭证服务RPC手册.md) | Credential Service 实际注册 RPC、状态 proof、登记、吊销和吊销列表 |
@@ -64,7 +66,7 @@
64
66
  | [SDK 文档索引](sdk/INDEX.md) | SDK 使用手册、P2P peer 能力/游标、完整 pending peers/快照、need_render、50k 内存去重/应用持久幂等、四端门面、RPC、E2EE、Storage VFS、Group FS 和 Collab 的子索引 |
65
67
  | [SDK 查阅指南](sdk/AUN_DOCS_GUIDE.md) | SDK 文档按行区间渐进式查阅方法 |
66
68
  | [AUN SDK 0.5.6 更新日志](sdk/CHANGELOG-0.5.6.md) | 以 0.5.5 为基线的四 SDK 发布汇总;覆盖首次签名者回源、下载提交前验签、消息窗口、显式 change-seed 和语言能力边界 |
67
- | [四 SDK 版本对齐变更清单](../python/CHANGES_FOR_PARITY.md) | 以 Python 实现为主线的 v0.3.3 至 v0.5.22 跨语言对齐清单;0.5.22 覆盖后台退避、Ownership 2.1、撤销同步、组织恢复与配套服务修复、默认读缓存及已对齐分支,区分发布基线、专项回归和联网矩阵验证边界 |
69
+ | [四 SDK 版本对齐变更清单](../python/CHANGES_FOR_PARITY.md) | 以 Python 实现为主线的 v0.3.3 至 v0.5.24 跨语言对齐清单;0.5.24 覆盖 Ownership 无持久任务/WAL、两个 local 编排、快照一致性及语言边界,区分三端发布 0.5.23/Go 指定 0.5.22 基线与已有验证证据 |
68
70
  | [AUN CLI 手册](cli/CLI手册.md) | Python CLI 源码位置、安装运行入口、全局选项、profile 配置和主要命令集 |
69
71
  | [AUN CLI 设计文档](cli/AUN-CLI设计文档.md) | `python/src/aun_cli` 当前实现架构、命令注册面、配置解析、SDK 桥接和实现边界 |
70
72
  | [AUN Storage 架构设计](<aun-fs/AUN Storage架构设计.md>) | Storage SDK VFS、控制面/数据面分离、下载 ticket / AID Bearer 边界、当前 access token getter、类 Linux 权限、mount/symlink、服务端分层和 direct backend 上传下载 |
@@ -127,10 +129,12 @@
127
129
  - 0.5.21 SDK 开发者的分层、peer/batch 提交、共识缓存、原件恢复、持久化和跨语言验收 → [开发与移植指南](sdk/0.5.21-SDK开发与移植指南.md)
128
130
  - 0.5.22 应用接入、两种绑定与审批恢复、resolve、60 秒读缓存与刷新、撤销同步及完整成员包 → [应用集成指南](sdk/0.5.22-SDK应用集成指南.md)
129
131
  - 0.5.22 后台退避、群状态、两种绑定与 Stage/CAS、消息订阅及内部消费、撤销同步、组织恢复与配套服务修复、默认读缓存和 Rust 移植 → [开发与移植指南](sdk/0.5.22-SDK开发与移植指南.md)
132
+ - 0.5.24 应用接入、消息持久处理、Ownership 文件验收和两个 local 场景、resolve 与文件缓存、凭证组织和升级 → [应用集成指南](sdk/0.5.24-SDK应用集成指南.md)
133
+ - 0.5.24 SDK 分层、消息提交、Ownership/Stage/CAS、local 身份隔离、缓存新鲜度、跨端差异及 Rust 核查 → [开发与移植指南](sdk/0.5.24-SDK开发与移植指南.md)
130
134
  - Python / TS / Go / JS SDK 使用手册,P2P peer 能力、共享 seq/隔离游标、轻量 pending peers/可选整体估计快照、目录/Pull逐页next_pending_seq持续提示/每N次FIFO、peer ACK/slot 公共 S、need_render/页内渲染计数、50k 内存去重/应用持久幂等,以及 Python PushFacade → [SDK 文档索引](sdk/INDEX.md)、[Message RPC](sdk/09-message-rpc-manual.md)、[服务协议](protocol/06-服务协议.md#63-点对点消息-message)
131
135
  - Ownership 2.1 agent.md/owner.md 关系、原格式兼容、普通 agent.md 独立、release 保持当前版本、清理后版本投影为 0/重绑默认 1、响应 Header 只投影校验结果、普通 agent owner 可选及旧 SDK 隔离兼容 → [协议定义 2.1](protocol/Ownership协议定义2.1.md)、[详细设计](sdk/Ownership2.1详细设计.md)
132
- - Ownership 2.1 应用接入:双向绑定、释放、转移、审批和恢复的 TS 示例/流程图 → [应用集成指南](sdk/Ownership2.1-SDK应用集成指南.md)
133
- - Ownership 2.1 SDK 移植:文件签验、fresh 共识、权威发布、消息持久化和三类 CAS 恢复 → [开发与移植指南](sdk/Ownership2.1-SDK开发与移植指南.md)
136
+ - Ownership 2.1 应用接入:双向绑定、释放、转移、两个 local 编排、审批和显式重试的 TS 示例/流程图 → [应用集成指南](sdk/Ownership2.1-SDK应用集成指南.md)
137
+ - Ownership 2.1 SDK 移植:文件签验、NS 验收、条件发布、通用消息交付、本地编排和文件 CAS → [开发与移植指南](sdk/Ownership2.1-SDK开发与移植指南.md)
134
138
  - Credential/Org 应用接入:凭证登记验证、成员入组/续期、撤销同步和组织转让的 TS 示例/流程图 → [应用集成指南](sdk/凭证与组织服务SDK应用集成指南.md)
135
139
  - Credential/Org SDK 移植:共同签验、两层请求摘要、登记最终化、撤销快照及实体恢复 → [开发与移植指南](sdk/凭证与组织服务SDK开发与移植指南.md)
136
140
  - Credential Service 服务端 RPC、签名状态 proof 和吊销列表 → [凭证服务 RPC 手册](sdk/09-凭证服务RPC手册.md)
@@ -139,12 +143,12 @@
139
143
  - legacy 应用接入与旧 SDK 自动编排 → [Ownership SDK 集成指南](sdk/Ownership-SDK集成指南.md)
140
144
  - legacy proof/escrow、metadata 和 rekey 移植记录 → [Ownership SDK 实现指南](sdk/Ownership-SDK实现指南.md)
141
145
  - legacy `aun.ownership.v1` wire 格式和 owner 上传授权 → [Ownership 协议定义](protocol/Ownership协议定义.md)
142
- - Ownership 2.1 恢复 agent.md/owner.md 及原控制格式、无参数 reset、绑定容错和历史任务兼容 → [第二十二节](audit/Ownership2.1代码审查报告.md#二十二2026-10-18-恢复发布格式与历史兼容更正)、[编排第 8 节](sdk/Ownership-SDK编排指南2.1.md#8-崩溃与响应丢失后的恢复)
146
+ - Ownership 2.1 历史格式更正、reset 与任务恢复记录 → [第二十二节](audit/Ownership2.1代码审查报告.md#二十二2026-10-18-恢复发布格式与历史兼容更正)、[旧编排第 8 节](sdk/Ownership-SDK编排指南2.1.md#8-崩溃与响应丢失后的恢复);当前无任务/WAL,以[应用指南](sdk/Ownership2.1-SDK应用集成指南.md)为准
143
147
  - 四 SDK 当前 access token getter、缓存快照语义和外部 HTTP 数据面下载凭据生命周期 → [连接与认证](sdk/04-连接与认证.md)、[API 手册](sdk/06-API手册.md)、[Storage RPC 手册](sdk/09-storage-rpc-manual.md)、[AUN Storage 架构设计](<aun-fs/AUN Storage架构设计.md>)
144
148
  - 四 SDK resolve 的 opts/输入输出、frontmatter 全字段与类型、按需 ownership 共识及 owner.md 缓存 → [resolve 规格](sdk/06-API手册.md#resolve-输入与输出)、[连接与认证](sdk/04-连接与认证.md)
145
149
  - 按主题和行区间查 SDK 文档 → [SDK 查阅指南](sdk/AUN_DOCS_GUIDE.md)
146
150
  - 四 SDK 0.5.6 发布摘要、首次签名者回源、可信缓存提交、消息窗口、语言能力边界 → [AUN SDK 0.5.6 更新日志](sdk/CHANGELOG-0.5.6.md)
147
- - 四 SDK 0.5.22 相对发布 0.5.21 的后台退避、Ownership 2.1、撤销同步、组织恢复与配套服务修复、默认读缓存已对齐分支、专项回归及联网矩阵边界 → [四 SDK 版本对齐变更清单](../python/CHANGES_FOR_PARITY.md)
151
+ - 四 SDK 0.5.24 的 Ownership 简化、本地双/三身份编排、resolve 快照修复、语言与服务端兼容边界、真实发布基线及验证证据;旧 0.5.22 记录保留为历史快照 → [四 SDK 版本对齐变更清单](../python/CHANGES_FOR_PARITY.md)
148
152
  - Python CLI 源码位置、安装运行入口、全局选项、profile 配置、身份/消息/群组/Storage/Group FS/Collab/诊断等命令用法 → [AUN CLI 手册](cli/CLI手册.md)
149
153
  - Python CLI 当前实现架构、`main.py` 命令注册、`CLISession` SDK 桥接、配置解析和实现边界 → [AUN CLI 设计文档](cli/AUN-CLI设计文档.md)
150
154
  - Storage SDK VFS、控制面/数据面分离、下载 ticket / AID Bearer 边界、当前 access token getter、类 Linux 权限、mount/symlink、direct backend 上传下载和服务端分层 → [AUN Storage 架构设计](<aun-fs/AUN Storage架构设计.md>)
@@ -332,6 +336,14 @@ TypeScript 身份与消息接线、Ownership 审批恢复、resolve、默认缓
332
336
 
333
337
  定义后台退避、群状态、Ownership Stage/CAS、内部消费、撤销与续期、缓存后端及失效契约;列出服务依赖、语言修复、Rust 定位和验收入口。
334
338
 
339
+ ### 0.5.24 SDK 应用集成指南
340
+
341
+ 按当前代码说明身份与消息接入、持久处理后 ACK、无任务/WAL 的 Ownership、双/三身份 local 编排、resolve 展示与文件缓存、证书和凭证查询复用、组织恢复及升级。保留关键 TypeScript 示例与流程图,区分动作完成与 NS 当前归属。
342
+
343
+ ### 0.5.24 SDK 开发与移植指南
344
+
345
+ 定义三主体分层、peer/batch 提交、后台退避、Ownership 文件与 NS 事实、远端两类 CAS、Stage 转移、专属 slot 短连接和身份代际。覆盖观察快照、文件与 PKI/Credential 缓存新鲜度、组织 checkpoint、跨语言差异和分层验收;Rust 仅列核查项。
346
+
335
347
  ### SDK 文档索引
336
348
 
337
349
  `docs/sdk/INDEX.md` 是 SDK 手册的三层子索引,覆盖快速开始、连接认证、E2EE V2、P2P 共享 seq/peer 游标、pending peers/统计快照、need_render、50k 内存去重/应用持久幂等、device/TTL volatile、Group 成员控制与两阶段群主转让、Storage、Group FS、Collab 和各类 RPC 手册。peer 模式本期限定单 Message 实例,设备级密钥安全证明可缺省。
@@ -350,17 +362,17 @@ TypeScript 身份与消息接线、Ownership 审批恢复、resolve、默认缓
350
362
 
351
363
  ### Ownership SDK 编排指南 2.1
352
364
 
353
- 定义七 Facade、sub-first Stage/owner-first 直接提交及无锁预检、明确审批、普通加密 P2P 载荷、公共 local_roles 与请求身份、本地事件、按角色核对完成证据和新鲜权威恢复;冻结重复发起复用、错误与任务状态分别记录、时间整数边界,文件保存、关系完成与清理分别跟踪;整体 30 秒从首次 GET 前计时,接收方固定授权摘要/期限,无控制消息也按精确本人历史同意恢复清理。
365
+ 保留七 Facade、Stage、P2P、持久任务及一次性决定的历史设计。当前实现已移除 Ownership 任务、WAL、后台恢复和 decisions 接口,以两份现行 SDK 指南中的文件提交、NS 事实验收和显式重试为准。
354
366
 
355
367
  Group/Org 作为 sub 时不进入这些通用任务或审批;以其为 sub 误调用直接 not_applicable,符合普通 owner 规则时仍可作为 owner_aid。实体 owner 创建自动建立、解散自动解除,专属转移强制 rekey,名片由实体主签、owner token 上传,可选 owner 附签不改变当前授权。
356
368
 
357
369
  ### Ownership 2.1 SDK 应用集成指南
358
370
 
359
- 按身份准备、发起、审批、核验和恢复组织内容;提供短 TS 示例及 sub-first/owner-first、release、三方转移和重连图。保留普通消息订阅、持久任务、六态、Group/Org 与 legacy 边界。
371
+ 按身份准备、发起、审批、核验和显式重试组织内容;保留并更新双向绑定、release、三方转移及故障处理图,补充两个 local 编排的图与 TS 示例。区分本次动作完成与 NS 权威归属,说明普通消息订阅及 human、Group/Org、legacy 边界。
360
372
 
361
373
  ### Ownership 2.1 SDK 开发与移植指南
362
374
 
363
- 聚焦 SDK 内部实现:严格签验、当前证书、NS fresh 复读、Storage 原子发布、消息保存先于 ACK,以及原任务/原字节/原 CAS 恢复。图示关键边界,协议字段和历史细节链接原规范。
375
+ 聚焦 SDK 内部实现:严格签验、NS 权威复核、Storage 条件发布、通用消息交付与 ACK、Stage 和两/三身份本地编排。移除任务状态机、WAL、租约和自动恢复要求,保留文件 CAS、关系版本、显式重试及关键图与代码。
364
376
 
365
377
  ### Ownership 2.1 详细设计
366
378
 
@@ -372,15 +384,15 @@ Group/Org 作为 sub 时不进入这些通用任务或审批;以其为 sub 误
372
384
 
373
385
  ### Ownership 2.1 代码审查报告
374
386
 
375
- 当前格式与兼容更正见[第二十二节](audit/Ownership2.1代码审查报告.md#二十二2026-10-18-恢复发布格式与历史兼容更正):继续使用 agent.md/owner.md 和原控制字段;普通正文保留关系材料且不以前置 Ownership 共识为条件;保留 reset、绑定容错与 0.5.19 及更早任务兼容。第十六至二十一节保留阶段记录,其中独立资源、显式迁移及资源标记契约已经撤销,原通过计数不能作为恢复后专项、现场部署或全平台验收结论。
387
+ 保留[第二十二节](audit/Ownership2.1代码审查报告.md#二十二2026-10-18-恢复发布格式与历史兼容更正)等历史审查和兼容记录;其中任务恢复、reset 和一次性决定不作为当前接入要求。当前无状态流程见两份 SDK 指南;历史通过计数不能代替现场部署或全平台验收。
376
388
 
377
389
  ### Ownership SDK 集成指南
378
390
 
379
- 保留 2026-10-09 legacy TypeScript 应用接入及 proof、escrow、代上传流程。当前七 Facade、审批与新鲜共识见 [2.1 应用集成指南](sdk/Ownership2.1-SDK应用集成指南.md)。
391
+ 保留 2026-10-09 legacy TypeScript 应用接入及 proof、escrow、代上传流程。当前 Facade、审批、本地编排与共识判断见 [2.1 应用集成指南](sdk/Ownership2.1-SDK应用集成指南.md)。
380
392
 
381
393
  ### Ownership SDK 实现指南
382
394
 
383
- 保留 legacy proof/escrow、metadata 和 rekey 移植记录。当前双文件、持久任务、权威条件发布和恢复见 [2.1 开发与移植指南](sdk/Ownership2.1-SDK开发与移植指南.md)。
395
+ 保留 legacy proof/escrow、metadata 和 rekey 移植记录。当前双文件、权威条件发布、本地编排和显式重试见 [2.1 开发与移植指南](sdk/Ownership2.1-SDK开发与移植指南.md)。
384
396
 
385
397
  ### Ownership 协议定义
386
398
 
@@ -406,7 +418,7 @@ Group/Org 作为 sub 时不进入这些通用任务或审批;以其为 sub 误
406
418
 
407
419
  ### 四 SDK 版本对齐变更清单
408
420
 
409
- `python/CHANGES_FOR_PARITY.md` 以 Python SDK 历史实现为主线记录 Go / TypeScript / JavaScript 的对齐要求。v0.5.22 以已发布 v0.5.21 为基线,覆盖后台退避、Ownership 2.1 两种绑定与 CAS、撤销同步、组织恢复及配套服务修复、默认读缓存和 owner.md 读取边界;记录缺省 TTL 与权限查询分支的对齐、四端专项回归及 TS/JS 类型检查,保留 16×4 联网矩阵、真实浏览器和其它未执行范围,区分源码、发布产物和服务部署证据。
421
+ `python/CHANGES_FOR_PARITY.md` 以 Python SDK 历史实现为主线记录 Go / TypeScript / JavaScript 的对齐要求。v0.5.24 对照 Python/TS/JS 已发布 0.5.23,Go 按指定对照 0.5.22 提交,覆盖移除 Ownership 任务与恢复、两个 local API 的专属 slot 短连接、注册当次绑定、NS 事实与 Stage/CAS、resolve 快照一致性、返回值及兼容接口差异。三端已发布的证书/Credential 缓存不重记为新增,Go 较早基线增量另列;核验四端 local、交互、cross33 断点及六项边界的已有证据,不等同全量发布回归。旧 0.5.22 及更早记录保留为历史快照。
410
422
 
411
423
  ### AUN CLI 手册
412
424
 
@@ -8,20 +8,20 @@ AUN SDK Core 文档在 `docs/` 下。根级索引为 `docs/INDEX.md`,SDK API
8
8
 
9
9
  ### Step 1:先读根级 Layer 1
10
10
 
11
- - `docs/INDEX.md` L7-94:根级文档地图。
11
+ - `docs/INDEX.md` L7-96:根级文档地图。
12
12
 
13
13
  ### Step 2:按主题读根级 Layer 2
14
14
 
15
- - 测试与 E2E:`docs/INDEX.md` L99-119。
16
- - 服务端 Go 化重构审查:`docs/INDEX.md` L120-123。
17
- - SDK 使用与协议:`docs/INDEX.md` L124-171。
18
- - Service Proxy 与服务暴露:`docs/INDEX.md` L172-178。
19
- - 诊断与可观测性:`docs/INDEX.md` L179-187。
20
- - E2EE 与跨语言一致性:`docs/INDEX.md` L188-194。
15
+ - 测试与 E2E:`docs/INDEX.md` L101-121。
16
+ - 服务端 Go 化重构审查:`docs/INDEX.md` L122-125。
17
+ - SDK 使用与协议:`docs/INDEX.md` L126-175。
18
+ - Service Proxy 与服务暴露:`docs/INDEX.md` L176-182。
19
+ - 诊断与可观测性:`docs/INDEX.md` L183-191。
20
+ - E2EE 与跨语言一致性:`docs/INDEX.md` L192-198。
21
21
 
22
22
  ### Step 3:需要判断文档价值时读 Layer 3 摘要
23
23
 
24
- - `docs/INDEX.md` L197-465:重点文档摘要。
24
+ - `docs/INDEX.md` L201-481:重点文档摘要。
25
25
 
26
26
  ### Step 4:再读目标文档章节
27
27
 
@@ -34,25 +34,28 @@ AUN SDK Core 文档在 `docs/` 下。根级索引为 `docs/INDEX.md`,SDK API
34
34
  | 0.5.21 应用开发者:TypeScript 接入、消息入库、resolve/owner、凭证组织、诊断和升级 | `docs/sdk/0.5.21-SDK应用集成指南.md` 1. L7-20;2. L21-79;3. L80-175;4. L176-228;5. L229-263;6. L264-311;7. L312-334;8. L335-356;9. L357-368 |
35
35
  | 0.5.21 SDK 开发者:peer/batch 提交、元数据与共识缓存、原件恢复、语言差异和验收 | `docs/sdk/0.5.21-SDK开发与移植指南.md` 1. L7-21;2. L22-45;3. L46-96;4. L97-156;5. L157-212;6. L213-228;7. L229-265;8. L266-295;9. L296-303;10. L304-319;11. L320-332;12. L333-350 |
36
36
  | 0.5.22 应用集成:TypeScript 接线、审批恢复、resolve、缓存及凭证组织 | `docs/sdk/0.5.22-SDK应用集成指南.md` 1. L5-13;2. L14-35;3. L36-54;4. L55-104;5. L105-127;6. L128-164;7. L165-200;8. L201-212 |
37
- | TypeScript 注册自动绑定 Owner E2E 代码 | [代码 L9-172、运行 L174-192、实测 L194-196](TS注册自动绑定Owner的E2E验证代码.md):注册意图、connect 自动 bind.request、owner 审批、NS/Storage 校验 |
37
+ | TypeScript 注册绑定 Owner 的历史 E2E 代码 | [代码 L9-172、运行 L174-192、实测 L194-196](TS注册自动绑定Owner的E2E验证代码.md);当前为注册当次通知,见 `docs/sdk/Ownership2.1-SDK应用集成指南.md` §3.5 |
38
38
  | 0.5.22 SDK 移植:同步、Stage/CAS、撤销续期、缓存、语言修复及 Rust | `docs/sdk/0.5.22-SDK开发与移植指南.md` 1. L5-8;2. L9-29;3. L30-39;4. L40-83;5. L84-118;6. L119-171;7. L172-188;8. L189-199 |
39
+ | 0.5.24 应用集成:当前消息、无任务 Ownership、两个 local 编排、缓存及凭证组织 | `docs/sdk/0.5.24-SDK应用集成指南.md` 1. L5-20;2. L21-75;3. L76-132;4. L133-168;5. L169-298;6. L299-321;7. L322-366;8. L367-385;9. L386-401;local bind L227-245、local transfer L246-267 |
40
+ | 0.5.24 SDK 移植:提交/ACK、NS 事实与 CAS、local 身份隔离、缓存新鲜度与语言差异 | `docs/sdk/0.5.24-SDK开发与移植指南.md` 1. L5-17;2. L18-31;3. L32-84;4. L85-92;5. L93-122;6. L123-217;7. L218-245;8. L246-261;9. L262-297;10. L298-325;11. L326-339;12. L340-354 |
39
41
  | Ownership 2.1 agent.md/owner.md、普通名片边界、原格式与 Header | `docs/protocol/Ownership协议定义2.1.md` 1. L11-61;2. L62-202;3. L203-266;4. L267-634;5. L635-642;6. L643-669 |
40
- | Ownership 2.1 七 Facade、sub-first/owner-first 简化、三类 CAS 冲突、reset 与旧任务恢复 | `docs/sdk/Ownership-SDK编排指南2.1.md` 1. L9-40;2. L41-243;3. L244-277;4. L278-381;5. L382-415;6. L416-545;7. L546-717;8. L718-782;9. L783-824;10. L825-939 |
41
- | Ownership 2.1 应用 TS 接线、双向绑定/释放/转移与恢复图 | `docs/sdk/Ownership2.1-SDK应用集成指南.md` 1. L7-18;2. L19-25;3. L26-139;4. L140-155;5. L156-167;6. L168-253;7. L254-275;8. L276-292;9. L293-305;10. L306-312 |
42
- | Ownership 2.1 SDK 移植:签验、共识、Storage、收件与恢复图 | `docs/sdk/Ownership2.1-SDK开发与移植指南.md` 1. L5-12;2. L13-35;3. L36-48;4. L49-81;5. L82-95;6. L96-125;7. L126-151;8. L152-167;9. L168-204;10. L205-262;11. L263-301;12. L302-309;13. L310-322 |
43
- | AIDStore.sign/verify 与完整文件多签 | `docs/sdk/Ownership2.1-SDK应用集成指南.md` L129-139;`docs/sdk/Ownership2.1-SDK开发与移植指南.md` L68-81、L96-125 |
42
+ | Ownership 2.1 历史编排、任务恢复、reset 与三类 CAS 设计 | `docs/sdk/Ownership-SDK编排指南2.1.md` L9-939;仅作历史参考,当前流程见下面两份指南 |
43
+ | Ownership 多设备归属冲突、最后上传候选与锁后保护;无独立 decisions | `docs/sdk/Ownership2.1-SDK应用集成指南.md` L171-201、L326-342;旧编排 L941-986 的一次性决定方案已撤销 |
44
+ | Ownership 2.1 应用 TS 接线、双向绑定/释放/转移、local 编排与显式重试图 | `docs/sdk/Ownership2.1-SDK应用集成指南.md` 1. L7-20;2. L21-27;3. L28-140;4. L141-158;5. L159-168;6. L169-303;7. L304-325;8. L326-342;9. L343-354;10. L355-363;local bind L257-278、local transfer L279-303 |
45
+ | Ownership 2.1 SDK 移植:签验、NS 验收、Storage、消息与本地编排图 | `docs/sdk/Ownership2.1-SDK开发与移植指南.md` 1. L5-14;2. L15-38;3. L39-51;4. L52-84;5. L85-98;6. L99-128;7. L129-153;8. L154-173;9. L174-209;10. L210-253;11. L254-374;12. L375-383;13. L384-399;local bind L297-335、local transfer L336-374 |
46
+ | AIDStore.sign/verify 与完整文件多签 | `docs/sdk/Ownership2.1-SDK应用集成指南.md` L130-140;`docs/sdk/Ownership2.1-SDK开发与移植指南.md` L71-84、L99-128 |
44
47
  | Ownership 2.1 双文件持久化、普通名片非回归矩阵与组件职责 | `docs/sdk/Ownership2.1详细设计.md` 1. L9-78;2. L79-130;3. L131-166;4. L167-210;5. L211-241;6. L242-305;7. L306-398;8. L399-437;9. L438-471;10. L472-484 |
45
48
  | Ownership 2.1 历史分阶段计划、冻结契约与验收,Group/Org 另查专属边界 | `docs/sdk/Ownership2.1-TDD分阶段实施计划.md` 1. L7-53;2. L54-80;3. L81-103;4. L104-136;5. L137-165;6. L166-205;7. L206-237;8. L238-283;9. L284-318;10. L319-351;11. L352-370;12. L371-391;13. L392-708 |
46
49
  | Group/Org 实体主签、owner token 上传、可选附签、旧 V2 兼容、权威分类与恢复 | `docs/protocol/Ownership协议定义2.1.md` L52-61、L183-202;`docs/sdk/09-group-rpc-manual.md` L168-419 |
47
- | release 保持 v、清理后 0/重绑默认 1 与 sub 清理授权 | `docs/sdk/Ownership2.1-SDK应用集成指南.md` L199-222;`docs/sdk/Ownership2.1-SDK开发与移植指南.md` L288-291、L296-301 |
48
- | 旧 SDK 隔离兼容、普通名片保留关系及原任务恢复;legacy proof wire | `docs/protocol/Ownership协议定义2.1.md` L220-242;`docs/sdk/Ownership2.1详细设计.md` L438-471;`docs/sdk/Ownership-SDK编排指南2.1.md` L718-782;`docs/protocol/Ownership协议定义.md` L159-321 |
50
+ | release 保持 v、清理后 0/重绑默认 1 与通知触发的 sub 清理 | `docs/sdk/Ownership2.1-SDK应用集成指南.md` L202-223;`docs/sdk/Ownership2.1-SDK开发与移植指南.md` L279-296 |
51
+ | 旧 SDK 隔离兼容、普通名片保留关系及历史任务恢复;legacy proof wire | `docs/protocol/Ownership协议定义2.1.md` L220-242;历史恢复见旧编排 L718-782;当前兼容与显式重试见 `docs/sdk/Ownership2.1-SDK应用集成指南.md` L326-363;legacy wire 见 `docs/protocol/Ownership协议定义.md` L159-321 |
49
52
  | legacy Ownership 2.0 的 agent.md/owner.md 声明、共识及撤销契约 | `docs/agent.md/SCHEMA.md` L1-6、L159-233;`docs/protocol/Ownership协议定义2.0.md`;更早 1.0 副本 `docs/protocol/agent.md/SCHEMA.md` L1-5 |
50
53
  | legacy Ownership 应用快速接入、TypeScript 示例、审批和状态查询 | `docs/sdk/Ownership-SDK集成指南.md` L1-154 |
51
54
  | legacy Ownership 自动 proof、identity 托管、代上传、解绑和恢复流程图 | `docs/sdk/Ownership-SDK集成指南.md` L156-270 |
52
55
  | legacy Ownership 实现/移植、proof 验签、escrow、metadata 和 rekey 恢复 | `docs/sdk/Ownership-SDK实现指南.md` L1-154;验收入口 L156-169 |
53
56
  | legacy Ownership wire schema、agent.md、identity escrow 和 owner 授权头 | `docs/protocol/Ownership协议定义.md` L9-401;本地事件/状态与校验 L402-445 |
54
57
  | legacy 四端 ownership API、proof、托管、代上传、release 与恢复记录 | `docs/sdk/Ownership管理专题.md` L1-559 |
55
- | Ownership 2.1 当前格式更正、reset、历史兼容与验证边界 | `docs/audit/Ownership2.1代码审查报告.md` L1431-1470;第十六至二十一节保留阶段记录 |
58
+ | Ownership 2.1 历史格式更正、reset、任务兼容与验证记录 | `docs/audit/Ownership2.1代码审查报告.md` L1431-1470;当前不再维护 Ownership 任务/WAL,接入见两份现行指南 |
56
59
  | Credential/Org 应用 TS 与登记、入组、续期、撤销、转让图 | `docs/sdk/凭证与组织服务SDK应用集成指南.md` 1. L5-10;2. L11-14;3. L15-74;4. L75-172;5. L173-214;6. L215-247;7. L248-257;8. L258-263;9. L264-266 |
57
60
  | Credential/Org 移植 TS 与 Verify、请求摘要、持久状态/实体恢复图 | `docs/sdk/凭证与组织服务SDK开发与移植指南.md` 1. L5-15;2. L16-44;3. L45-76;4. L77-144;5. L145-186;6. L187-213;7. L214-225;8. L226-231;9. L232-242 |
58
61
  | Credential Service 实际 RPC、请求绑定、登记/吊销、持久幂等结果恢复和签名状态证明 | `docs/sdk/09-凭证服务RPC手册.md` L1-73 |
@@ -100,7 +103,7 @@ AUN SDK Core 文档在 `docs/` 下。根级索引为 `docs/INDEX.md`,SDK API
100
103
  | E2EE V2 1DH/per-AID wrap 方案 | `docs/design/E2EE_V2简化为1DH加Per-AID_Wrap方案.md` |
101
104
  | E2EE V2 当前 P2P/Group 主链路 | `docs/sdk/E2EE_V2消息通信时序图.md` |
102
105
  | `protected_headers` / ProtectedHeaders 四端用法、E2EE V2 元数据 HMAC 和接收信任边界 | `docs/sdk/ProtectedHeaders用法专题.md` L1-299 |
103
- | Ownership 2.1 owner.md 同会话发布、条件删除与三类 CAS 恢复 | `docs/sdk/Ownership2.1-SDK开发与移植指南.md` L126-151、L253-262 |
106
+ | Ownership 2.1 owner.md 同会话发布、条件删除、两类远端 CAS 与显式重试 | `docs/sdk/Ownership2.1-SDK开发与移植指南.md` L129-153、L210-253 |
104
107
  | legacy Ownership proof、托管持久化、owner 代签与代上传历史记录 | `docs/sdk/Ownership管理专题.md` L1-559 |
105
108
  | 服务端消息通信诊断总体方案 | `docs/design/AUN服务端消息通信诊断面板方案.md` L3-47 |
106
109
  | 服务端消息通信 P0 诊断面板 | `docs/design/服务端消息通信诊断面板P0方案.md` L3-73 |
@@ -118,7 +121,7 @@ AUN SDK Core 文档在 `docs/` 下。根级索引为 `docs/INDEX.md`,SDK API
118
121
  | 离线 Push Service 当前发布结论与强制发布门 | `docs/AUN离线推送服务运维与发布指南.md` L5-23 |
119
122
  | 离线 Push Service 运行依赖、诊断和告警判断 | `docs/AUN离线推送服务运维与发布指南.md` L25-81 |
120
123
  | 离线 Push Service 性能基线、安全边界、隔离 PoC 灰度、回滚和已知限制 | `docs/AUN离线推送服务运维与发布指南.md` L83-141 |
121
- | group.index 签名索引、`_meta.group_indexes`、CAS 更新和服务端缓存注入 | `docs/design/群索引版本提示与附件引用方案.md` L1-348、`docs/INDEX.md` L62、L168、L315-318 |
124
+ | group.index 签名索引、`_meta.group_indexes`、CAS 更新和服务端缓存注入 | `docs/design/群索引版本提示与附件引用方案.md` L1-348、`docs/INDEX.md` L65、L174、L319-322 |
122
125
  | AUN Service Proxy 总体架构、参考项目与边界 | `docs/design/AUN反向代理服务方案与TDD实施计划.md` L3-127 |
123
126
  | AUN Service Proxy URL、注册、隧道协议和 Web 边界 | `docs/design/AUN反向代理服务方案与TDD实施计划.md` L129-384 |
124
127
  | AUN Service Proxy 服务列表注册、双注册和 wakeup 路由 | `docs/sdk/09-proxy-rpc-manual.md` L1-226、`docs/protocol/06-服务协议.md` L43-204 |
@@ -147,7 +150,7 @@ AUN SDK Core 文档在 `docs/` 下。根级索引为 `docs/INDEX.md`,SDK API
147
150
  | 四 SDK Storage / Group FS 默认读缓存、省略策略或 TTL 默认 60 秒、显式限制、SHA 无正文免计次与 owner.md 普通/权威读取 | `docs/sdk/09-storage-rpc-manual.md` L129-170;`docs/sdk/06-API手册.md` L497-510;`docs/sdk/09-group-rpc-manual.md` L1586-1620 |
148
151
  | 四 SDK 当前 access token getter、缓存快照语义和外部 HTTP 数据面下载凭据生命周期 | `docs/sdk/04-连接与认证.md` L96-125、`docs/sdk/06-API手册.md` L327-346、`docs/sdk/09-storage-rpc-manual.md` L690-734、`docs/sdk/09-group-rpc-manual.md` L1612-1618、`docs/aun-fs/AUN Storage架构设计.md` L153-166 |
149
152
  | 四 SDK 0.5.6 发布摘要、验签缓存、消息窗口与语言能力边界 | `docs/sdk/CHANGELOG-0.5.6.md` L1-73 |
150
- | 四 SDK 0.5.22 相对发布 0.5.21 的 Ownership 2.1、撤销快照、组织恢复及配套服务修复、默认读缓存已对齐分支和专项回归/联网矩阵边界 | `python/CHANGES_FOR_PARITY.md` L11-168 |
153
+ | 四 SDK 0.5.24 的无持久任务 Ownership、两个 local 编排、快照修复、语言/NS 边界及已有验证记录;三端对照发布 0.5.23,Go 对照指定 0.5.22 | `python/CHANGES_FOR_PARITY.md` L13-147;旧 0.5.22 历史记录 L150-305,读缓存与测试块⑦/⑧ L235-305 |
151
154
  | 群 `mention_mode` 提及过滤、Agent 自主行为、SDK group.index facade 和 CAS 冲突处理 | `docs/protocol/10-Group-子协议.md`、`docs/protocol/13-Agent行为规范.md`、`docs/sdk/09-group-rpc-manual.md`、`docs/sdk/07-错误处理.md` |
152
155
  | AUN Python CLI 源码位置、安装入口、全局选项、profile 配置和主要命令集 | `docs/cli/CLI手册.md` L3-333 |
153
156
  | AUN Python CLI 当前实现架构、命令注册、SDK 桥接和实现边界 | `docs/cli/AUN-CLI设计文档.md` L3-265 |
@@ -0,0 +1,196 @@
1
+ # TypeScript 注册自动绑定 Owner 的 E2E 验证
2
+
3
+ 下面的脚本验证 `store.register(aid, { type: 'agent', owner })` 的完整流程:注册并保存绑定意图、连接后由 sub 自动发送 `bind.request`、owner 审批、NS 形成锁定共识,以及 Storage 保存 `agent.md` 副本。
4
+
5
+ 脚本使用 TS SDK 的编译产物,以 Node.js ESM JavaScript 运行。目标环境是 `agentid.cn` Docker;需要已运行的 `ownpull-cn-20261023-ts` 容器、当前 TS SDK 的 `dist`,以及容器中已注入的 `AUN_TEST_ENCRYPTION_SEED`。依赖预先安装,业务测试期间不下载依赖。
6
+
7
+ 每次执行会创建两个新的测试 AID,将身份材料保存在容器的独立 `/tmp/aun-e2e-*` 目录并保留。注册意图读取和最终原文验签使用 SDK 私有探针 `_tokenStore`、`_getOwnershipFiles()`,仅用于本用例的内部断言。
8
+
9
+ ## 验证代码
10
+
11
+ ```javascript
12
+ import { createHash } from 'node:crypto';
13
+ import { AIDStore, AUNClient } from './dist/index.js';
14
+
15
+ const seed = String(process.env.AUN_TEST_ENCRYPTION_SEED ?? '');
16
+ if (!seed) throw new Error('容器缺少 AUN_TEST_ENCRYPTION_SEED');
17
+ const stamp = Date.now();
18
+ const ownerAid = `e2eown${stamp}.agentid.cn`;
19
+ const subAid = `e2esub${stamp}.agentid.cn`;
20
+ const ownerPath = `/tmp/aun-e2e-owner-${stamp}`;
21
+ const subPath = `/tmp/aun-e2e-sub-${stamp}`;
22
+
23
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
24
+ const sha256 = (data) => createHash('sha256').update(data).digest('hex');
25
+
26
+ function assert(condition, message) {
27
+ if (!condition) throw new Error(message);
28
+ }
29
+
30
+ function dataOf(result, label) {
31
+ if (!result.ok || result.data === undefined) {
32
+ throw new Error(`${label}: ${result.error?.message ?? 'unknown error'}`);
33
+ }
34
+ return result.data;
35
+ }
36
+
37
+ async function withTimeout(promise, ms, label) {
38
+ let timer;
39
+ try {
40
+ return await Promise.race([
41
+ promise,
42
+ new Promise((_, reject) => { timer = setTimeout(() => reject(new Error(`${label} timeout`)), ms); }),
43
+ ]);
44
+ } finally {
45
+ clearTimeout(timer);
46
+ }
47
+ }
48
+
49
+ let ownerClient;
50
+ let subClient;
51
+ let ownerStore;
52
+ let subStore;
53
+
54
+ try {
55
+ console.log(JSON.stringify({ owner_aid: ownerAid, sub_aid: subAid, ownerPath, subPath }));
56
+ ownerStore = new AIDStore({
57
+ aunPath: ownerPath,
58
+ encryptionSeed: seed,
59
+ verifySsl: false,
60
+ });
61
+ dataOf(await ownerStore.register(ownerAid, { type: 'agent' }), 'owner register');
62
+ ownerClient = new AUNClient(dataOf(ownerStore.load(ownerAid), 'owner load').aid);
63
+
64
+ let resolveRequest;
65
+ const request = new Promise((resolve) => { resolveRequest = resolve; });
66
+
67
+ // message.received/message.batch 会使后台 P2P Pull 门禁开启;ownership.request 捕获审批任务。
68
+ for (const event of ['message.received', 'message.recalled', 'message.batch', 'ownership.request']) {
69
+ ownerClient.on(event, (payload) => {
70
+ if (event === 'ownership.request' && payload?.sub_aid === subAid && payload.owner_aid === ownerAid) {
71
+ console.log('owner 收到 ownership.request', payload.operation_id);
72
+ resolveRequest(payload);
73
+ }
74
+ });
75
+ }
76
+ await ownerClient.connect({ auto_reconnect: false, background_sync: true });
77
+
78
+ subStore = new AIDStore({
79
+ aunPath: subPath,
80
+ encryptionSeed: seed,
81
+ verifySsl: false,
82
+ });
83
+ dataOf(await subStore.register(subAid, { type: 'agent', owner: ownerAid }), 'sub register');
84
+
85
+ // registration_intent 是 SDK 本地持久状态;这里用于确认 connect 前仍是 pending。
86
+ const intent = subStore._tokenStore.loadMetadata(subAid)?.registration_intent;
87
+ assert(intent?.protocol === '2.1', 'registration intent protocol is not 2.1');
88
+ assert(intent?.owner === ownerAid && intent.pending === true, 'registration intent is not pending');
89
+ assert(/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(intent.operation_id), 'registration operation_id is not UUIDv4');
90
+ console.log('注册意图已保存', intent.operation_id);
91
+
92
+ subClient = new AUNClient(dataOf(subStore.load(subAid), 'sub load').aid);
93
+ for (const event of ['message.received', 'message.recalled', 'message.batch']) {
94
+ subClient.on(event, () => {});
95
+ }
96
+ await subClient.connect({ auto_reconnect: false, background_sync: true });
97
+
98
+ const ownerRequest = await withTimeout(request, 60_000, 'ownership.request');
99
+ assert(ownerRequest.operation_id === intent.operation_id, 'bind.request operation_id differs from registration intent');
100
+ assert(ownerRequest.requester_aid === subAid, 'ownership.request requester is not the sub AID');
101
+
102
+ const accepted = await ownerClient.acceptOwnershipRequest(intent.operation_id);
103
+ assert(accepted.operation_id === intent.operation_id, 'owner acceptance operation_id differs');
104
+ assert(!['error', 'stopped', 'rejected'].includes(accepted.status), 'owner acceptance failed');
105
+ console.log('owner 已确认', accepted.operation_id);
106
+
107
+ let ownerConsensus;
108
+ let subConsensus;
109
+ for (let i = 0; i < 40; i += 1) {
110
+ try { ownerConsensus = await ownerClient.checkOwnershipConsensus(subAid); } catch { ownerConsensus = undefined; }
111
+ try { subConsensus = await subClient.checkOwnershipConsensus(subAid); } catch { subConsensus = undefined; }
112
+ console.log('共识检查', i + 1, ownerConsensus?.status, subConsensus?.status);
113
+ if (
114
+ ownerConsensus?.status === 'consensus' && ownerConsensus.lock === 'locked' && ownerConsensus.relation_version === 1
115
+ && subConsensus?.status === 'consensus' && subConsensus.lock === 'locked' && subConsensus.relation_version === 1
116
+ ) break;
117
+ await sleep(1_500);
118
+ }
119
+
120
+ assert(ownerConsensus?.status === 'consensus', 'owner did not observe consensus');
121
+ assert(subConsensus?.status === 'consensus', 'sub did not observe consensus');
122
+ assert(ownerConsensus.lock === 'locked' && subConsensus.lock === 'locked', 'ownership lock is not locked');
123
+ assert(ownerConsensus.relation_version === 1 && subConsensus.relation_version === 1, 'relation version is not 1');
124
+ assert(ownerConsensus.owner_aid === ownerAid && subConsensus.owner_aid === ownerAid, 'owner AID mismatch');
125
+ assert(ownerConsensus.sub_aid === subAid && subConsensus.sub_aid === subAid, 'sub AID mismatch');
126
+ assert(ownerConsensus.agent_md_sha256 === subConsensus.agent_md_sha256, 'agent.md observations differ');
127
+ assert(ownerConsensus.owner_md_sha256 === subConsensus.owner_md_sha256, 'owner.md observations differ');
128
+
129
+ const pending = subStore._tokenStore.loadMetadata(subAid)?.registration_intent?.pending;
130
+ assert(pending === false, 'registration intent remains pending after completion');
131
+
132
+ const files = subClient._getOwnershipFiles();
133
+ const nsAgent = await files.readAgent(subAid);
134
+ const ownerFile = await files.readOwner(ownerAid, subAid);
135
+ assert(nsAgent.exists && ownerFile.exists, 'ownership file is missing');
136
+ await files.verifyFile(nsAgent.content, 'agent', subAid);
137
+ await files.verifyFile(ownerFile.content, 'owner', subAid, ownerAid);
138
+ assert(ownerFile.sha256 === ownerConsensus.owner_md_sha256, 'Storage owner.md SHA differs from consensus');
139
+
140
+ // NS 到 Storage 的副本同步允许短暂延迟,等待副本追上已验证的共识摘要。
141
+ let storageAgentMd;
142
+ for (let i = 0; i < 40; i += 1) {
143
+ try { storageAgentMd = await subClient.storage.readBytes('/agent.md', { owner: subAid, noCache: true }); } catch { storageAgentMd = undefined; }
144
+ if (storageAgentMd && sha256(storageAgentMd) === ownerConsensus.agent_md_sha256) break;
145
+ await sleep(1_500);
146
+ }
147
+ assert(storageAgentMd, 'Storage agent.md is missing');
148
+ assert(sha256(storageAgentMd) === ownerConsensus.agent_md_sha256, 'Storage agent.md SHA differs from consensus');
149
+ assert(new TextDecoder('utf-8', { fatal: true }).decode(storageAgentMd) === nsAgent.content, 'NS/Storage agent.md bodies differ');
150
+ assert(sha256(new TextEncoder().encode(ownerFile.content)) === ownerConsensus.owner_md_sha256, 'owner.md SHA differs from consensus');
151
+
152
+ console.log(JSON.stringify({
153
+ result: 'PASS',
154
+ owner_aid: ownerAid,
155
+ sub_aid: subAid,
156
+ operation_id: intent.operation_id,
157
+ status: subConsensus.status,
158
+ lock: subConsensus.lock,
159
+ relation_version: subConsensus.relation_version,
160
+ agent_md_sha256: subConsensus.agent_md_sha256,
161
+ owner_md_sha256: subConsensus.owner_md_sha256,
162
+ storage_agent_md_matches: true,
163
+ }));
164
+ } finally {
165
+ await Promise.allSettled([
166
+ subClient?.close(),
167
+ ownerClient?.close(),
168
+ ]);
169
+ subStore?.close();
170
+ ownerStore?.close();
171
+ }
172
+ ```
173
+
174
+ ## 容器内运行
175
+
176
+ 在项目根目录 `D:\modelunion\kite` 用 PowerShell 7(UTF-8 管道编码)执行。第一条命令进行当前 SDK 的完整编译;后续命令直接提取本文的 JavaScript 代码块送入容器,不需要额外保存脚本文件。
177
+
178
+ ```powershell
179
+ docker exec -w /workspace/ts ownpull-cn-20261023-ts node --jitless node_modules/typescript/bin/tsc --pretty false
180
+ if ($LASTEXITCODE -ne 0) { throw 'TS SDK 编译失败' }
181
+ $ownerE2eDoc = Get-Content -LiteralPath 'aun-sdk-core\docs\TS注册自动绑定Owner的E2E验证代码.md' -Raw -Encoding utf8
182
+ $ownerE2eCode = [regex]::Match($ownerE2eDoc, '(?s)```javascript\r?\n(.*?)\r?\n```').Groups[1].Value
183
+ if (-not $ownerE2eCode) { throw '未找到 E2E JavaScript 代码块' }
184
+ $ownerE2eCode | docker exec -i -w /workspace/ts ownpull-cn-20261023-ts node --max-opt=0 --input-type=module
185
+ if ($LASTEXITCODE -ne 0) { throw 'E2E 验证失败' }
186
+ ```
187
+
188
+ 通过标准是进程退出码为 `0`、输出 `result: "PASS"`,并同时满足 `status: "consensus"`、`lock: "locked"`、`relation_version: 1`。`storage_agent_md_matches` 为 `true` 表示 Storage 的 `/agent.md` 正文及 SHA 与 fresh NS 观察结果一致。任一断言失败会立即退出当前用例。
189
+
190
+ 这组 Node 启动参数在当前容器会使 SDK 使用本地 transport 回退;本用例验证注册、自动绑定、审批和材料一致性,未覆盖 Worker transport。完整编译使用 `--jitless` 规避当前容器曾出现的 TypeScript 编译器内部错误;业务脚本使用 `--max-opt=0`。
191
+
192
+ 本验证不调用 `bindOwneraid()` 或其他手动绑定入口;绑定请求必须由 `connect()` 对本地 `registration_intent` 的恢复逻辑自动产生。
193
+
194
+ ## 实测结果
195
+
196
+ 2026-10-23 23:58(北京时间),直接提取本文代码在 `agentid.cn` Docker 环境运行通过,退出码为 `0`。操作 ID:`ef35d48b-243c-434e-9265-1462acf469e3`。双方返回 `consensus / locked / relation_version=1`,两文件验签和 NS/Storage 副本校验通过。