@agentunion/fastaun-browser 0.3.6 → 0.4.1

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 (75) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/_packed_docs/AUN_SDK_/351/207/215/346/236/204/345/256/236/346/226/275/350/256/241/345/210/222.md +596 -0
  3. package/_packed_docs/AUN_SDK_/351/207/215/346/236/204/350/256/276/350/256/241/346/226/271/346/241/210_v3.md +1697 -0
  4. package/_packed_docs/CHANGELOG.md +24 -0
  5. package/_packed_docs/INDEX.md +17 -11
  6. package/_packed_docs/KITE_DOCS_GUIDE.md +11 -10
  7. package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +134 -158
  8. package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +11 -7
  9. package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +98 -119
  10. package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +147 -374
  11. package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +153 -153
  12. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +168 -1383
  13. package/_packed_docs/sdk/07-/351/224/231/350/257/257/345/244/204/347/220/206.md +71 -91
  14. package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +76 -63
  15. package/_packed_docs/sdk/09-custody-api-manual.md +7 -6
  16. package/_packed_docs/sdk/09-meta-rpc-manual.md +13 -14
  17. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +37 -49
  18. package/_packed_docs/sdk/INDEX.md +72 -98
  19. package/_packed_docs/sdk/README.md +85 -266
  20. package/dist/aid-store.d.ts +125 -0
  21. package/dist/aid-store.d.ts.map +1 -0
  22. package/dist/aid-store.js +841 -0
  23. package/dist/aid-store.js.map +1 -0
  24. package/dist/aid.d.ts +56 -0
  25. package/dist/aid.d.ts.map +1 -0
  26. package/dist/aid.js +112 -0
  27. package/dist/aid.js.map +1 -0
  28. package/dist/auth.js +1 -1
  29. package/dist/auth.js.map +1 -1
  30. package/dist/bundle.js +1630 -1901
  31. package/dist/cert-utils.d.ts +26 -0
  32. package/dist/cert-utils.d.ts.map +1 -0
  33. package/dist/cert-utils.js +221 -0
  34. package/dist/cert-utils.js.map +1 -0
  35. package/dist/client.d.ts +89 -60
  36. package/dist/client.d.ts.map +1 -1
  37. package/dist/client.js +568 -160
  38. package/dist/client.js.map +1 -1
  39. package/dist/config.d.ts +0 -2
  40. package/dist/config.d.ts.map +1 -1
  41. package/dist/config.js +0 -2
  42. package/dist/config.js.map +1 -1
  43. package/dist/error-codes.d.ts +25 -0
  44. package/dist/error-codes.d.ts.map +1 -0
  45. package/dist/error-codes.js +31 -0
  46. package/dist/error-codes.js.map +1 -0
  47. package/dist/errors.d.ts +4 -0
  48. package/dist/errors.d.ts.map +1 -1
  49. package/dist/errors.js +4 -0
  50. package/dist/errors.js.map +1 -1
  51. package/dist/index.d.ts +6 -6
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +5 -5
  54. package/dist/index.js.map +1 -1
  55. package/dist/keystore/index.d.ts +1 -1
  56. package/dist/keystore/index.d.ts.map +1 -1
  57. package/dist/result.d.ts +19 -0
  58. package/dist/result.d.ts.map +1 -0
  59. package/dist/result.js +10 -0
  60. package/dist/result.js.map +1 -0
  61. package/dist/transport.d.ts +3 -0
  62. package/dist/transport.d.ts.map +1 -1
  63. package/dist/transport.js +16 -1
  64. package/dist/transport.js.map +1 -1
  65. package/dist/types.d.ts +13 -2
  66. package/dist/types.d.ts.map +1 -1
  67. package/dist/types.js +22 -0
  68. package/dist/types.js.map +1 -1
  69. package/dist/v2/e2ee/encrypt-p2p.js +1 -1
  70. package/dist/v2/e2ee/encrypt-p2p.js.map +1 -1
  71. package/dist/version.d.ts +2 -0
  72. package/dist/version.d.ts.map +1 -0
  73. package/dist/version.js +5 -0
  74. package/dist/version.js.map +1 -0
  75. package/package.json +2 -1
@@ -1,172 +1,151 @@
1
- # AUN SDK Python - 核心概念
1
+ # AUN SDK - 核心概念
2
2
 
3
3
  ---
4
4
 
5
- ## AID (Agent Identity)
5
+ ## AID
6
6
 
7
- AID 是 Agent 的全局唯一身份,格式为域名形式:`alice.agentid.pub`
7
+ AID 是 Agent 的全局唯一身份,格式为域名形式,例如 `alice.agentid.pub`。
8
8
 
9
- ### 特点
9
+ 特点:
10
10
 
11
- - **本地生成密钥对**:私钥永不离开本地
12
- - **Issuer / Auth 服务签发证书**:基于 X.509 PKI 体系,Gateway 主要负责接入和转发
13
- - **双向认证**:ECDSA 挑战-响应,防中间人攻击
14
- - **多 AID 支持**:一个 `aun_path` 可管理多个 AID,各自数据在 `{aun_path}/AIDs/{aid}/` 下隔离
11
+ - 私钥在本地生成并保存,不上传到服务端。
12
+ - 证书由 Issuer / Auth 服务基于 X.509 PKI 签发。
13
+ - AID 加载后是不可变值对象,续签或换钥通过 `AIDStore` 完成,调用方重新 `load()` 获取新对象。
14
+ - 一个 `aun_path` 可管理多个 AID,各自数据隔离在 `{aun_path}/AIDs/{aid}/`。
15
15
 
16
- ### 操作
16
+ 常用操作:
17
17
 
18
18
  ```python
19
- import random
20
- MY_AID = f"alice-{random.randint(1000,9999)}.agentid.pub"
19
+ store = AIDStore(aun_path="~/.aun/myapp", encryption_seed="")
21
20
 
22
- # 注册(仅首次)
23
- await client.auth.register_aid({"aid": MY_AID})
21
+ registered = await store.register("alice.agentid.pub")
22
+ loaded = store.load("alice.agentid.pub")
23
+ me = loaded["data"]["aid"]
24
24
 
25
- # 认证
26
- auth = await client.auth.authenticate({"aid": MY_AID})
25
+ assert me.is_cert_valid()
26
+ assert me.is_private_key_valid()
27
27
  ```
28
28
 
29
29
  ---
30
30
 
31
+ ## 三主体职责
32
+
33
+ | 主体 | 说明 | 是否持有连接 |
34
+ |------|------|--------------|
35
+ | `AIDStore` | keystore 管理器,负责注册、加载、列举、解析和证书运维 | 否 |
36
+ | `AID` | 身份值对象,负责签名、验签、agent.md 签验 | 否 |
37
+ | `AUNClient` | 会话对象,负责认证、连接、重连、事件和 RPC | 是 |
38
+
39
+ `AUNClient` 不再通过配置字典持有某个字符串 AID;它只接收已加载并校验过私钥的 AID 对象。
40
+
41
+ ---
42
+
31
43
  ## 连接状态机
32
44
 
33
45
  ```mermaid
34
46
  stateDiagram-v2
35
- [*] --> idle
36
- idle --> connecting: connect()
37
- connecting --> authenticating
38
- authenticating --> connected
39
- connected --> disconnected: 断线
40
- disconnected --> reconnecting: 自动重连
41
- reconnecting --> connecting: 重试
42
- reconnecting --> terminal_failed: 不可恢复
43
- connected --> closed: close()
44
- disconnected --> closed: close()
45
- closed --> [*]
47
+ [*] --> no_identity
48
+ no_identity --> standby: load_identity(AID)
49
+ [*] --> standby: AUNClient(AID)
50
+ standby --> authenticated: authenticate()
51
+ standby --> connecting: connect()
52
+ authenticated --> connecting: connect()
53
+ connecting --> ready: handshake ok
54
+ ready --> retry_backoff: transport lost
55
+ retry_backoff --> reconnecting: timer fired
56
+ reconnecting --> ready: reconnect ok
57
+ reconnecting --> connection_failed: unrecoverable
58
+ ready --> closed: close()
59
+ standby --> closed: close()
60
+ connection_failed --> closed: close()
61
+ closed --> standby: load_identity(AID)
46
62
  ```
47
63
 
48
- | 状态 | 说明 | 可用操作 |
49
- |------|------|----------|
50
- | `idle` | 初始状态 | `connect()` |
51
- | `connecting` | 建立 WebSocket | |
52
- | `authenticating` | 双向 ECDSA 认证 | |
53
- | `connected` | 正常工作 | `call()`, `ping()`, `close()` |
54
- | `disconnected` | 已断开 | 自动进入 reconnecting |
55
- | `reconnecting` | 正在重连 | 自动退避重试 |
56
- | `terminal_failed` | 重连不可恢复(如证书吊销) | 需重新 `connect()` |
57
- | `closed` | 已关闭 | 需重新 `connect()` |
64
+ | 状态 | 说明 | 典型可用操作 |
65
+ |------|------|--------------|
66
+ | `no_identity` | 尚未加载身份 | `load_identity()` |
67
+ | `standby` | 已加载身份,尚未认证或连接 | `authenticate()`, `connect()` |
68
+ | `authenticated` | 已取得 token,尚未建立会话 | `connect()` |
69
+ | `connecting` | 正在建立 WebSocket 和握手 | `close()` |
70
+ | `ready` | 会话可用 | `call()`, `disconnect()`, `close()` |
71
+ | `retry_backoff` | 断线后等待退避重连 | `close()` |
72
+ | `reconnecting` | 正在自动重连 | `close()` |
73
+ | `connection_failed` | 重连失败或不可恢复 | `connect()`, `close()` |
74
+ | `closed` | 已关闭 | `load_identity()` 后复用 |
58
75
 
59
- ### 状态查询
76
+ 状态查询:
60
77
 
61
78
  ```python
62
- print(client.state) # "connected"
63
- print(client.aid) # "alice.agentid.pub"
79
+ print(client.state) # ConnectionState.READY
80
+ print(client.current_aid) # AID 对象
81
+ print(client.aid) # "alice.agentid.pub"
82
+ print(client.can_send) # True / False
64
83
  ```
65
84
 
66
85
  ---
67
86
 
68
87
  ## 认证流程
69
88
 
70
- AUN 使用双向 ECDSA 挑战-响应认证,防止中间人攻击和重放攻击。
71
-
72
- ### 时序图
89
+ AUN 使用 ECDSA 挑战-响应证明 AID 私钥所有权,SDK 在 `connect()` 内部自动完成认证;需要只获取 token 时可显式调用 `authenticate()`。
73
90
 
74
91
  ```mermaid
75
92
  sequenceDiagram
76
93
  participant Client
77
94
  participant Gateway
78
-
79
- Client->>Gateway: WebSocket Connect
80
- Gateway->>Client: challenge (server_nonce)
81
-
82
- Client->>Gateway: auth.aid_login1 (client_nonce)
83
- Gateway->>Client: server_signature + cert_chain
84
-
85
- Client->>Gateway: auth.aid_login2 (client_signature)
86
- Gateway->>Client: access_token (JWT)
87
-
88
- Client->>Gateway: auth.connect (bearer auth)
89
- Gateway->>Client: session OK
95
+ participant Auth
96
+
97
+ Client->>Gateway: discover / WebSocket connect
98
+ Gateway->>Client: challenge
99
+ Client->>Auth: aid_login1
100
+ Auth->>Client: server signature + cert chain
101
+ Client->>Auth: aid_login2(client signature)
102
+ Auth->>Client: access token
103
+ Client->>Gateway: auth.connect(token)
104
+ Gateway->>Client: session ok
90
105
  ```
91
106
 
92
- ### 关键步骤
107
+ 关键点:
93
108
 
94
- 1. **WebSocket 握手**:建立传输层连接
95
- 2. **Challenge**:Gateway 发送会话 challenge nonce
96
- 3. **Login Phase 1**:Client 调用 `auth.aid_login1`,Auth 服务返回签名和 `auth_cert`
97
- 4. **证书验证**:Client 验证 Auth 服务证书链(含 CRL/OCSP 检查)
98
- 5. **Login Phase 2**:Client 对 Auth 服务返回的 nonce 签名,Auth 服务验证后返回 JWT
99
- 6. **Session 建立**:Client 用 JWT 调用 `auth.connect`,建立会话
100
-
101
- ### 令牌管理
102
-
103
- - **Access Token**:短期令牌(默认 1 小时),用于 RPC 调用
104
- - **Refresh Token**:长期令牌(默认 7 天),用于刷新 Access Token
105
- - **自动刷新**:SDK 在 Access Token 过期前 60 秒自动刷新
109
+ - 私钥不离开本地。
110
+ - SDK 校验证书链、服务端签名和 token 有效期。
111
+ - access token / refresh token 会写入本地 keystore 并在连接期间自动刷新。
106
112
 
107
113
  ---
108
114
 
109
- ## E2EE (端到端加密)
110
-
111
- ### 加密套件
115
+ ## E2EE
112
116
 
113
- **P256_HKDF_SHA256_AES_256_GCM**
117
+ 默认加密套件为 `P256_HKDF_SHA256_AES_256_GCM`:
114
118
 
115
- - **密钥协商**:ECDH (Elliptic Curve Diffie-Hellman)
116
- - **密钥派生**:HKDF-SHA256
117
- - **对称加密**:AES-256-GCM
118
- - **签名算法**:ECDSA-P256
119
+ - 密钥协商:ECDH
120
+ - 密钥派生:HKDF-SHA256
121
+ - 对称加密:AES-256-GCM
122
+ - 身份签名:ECDSA-P256
119
123
 
120
- ### 加密流程
124
+ 默认行为:
121
125
 
122
- 每条消息独立加密,一消息一密钥,无需在线协商:
126
+ - `message.send` 和 `group.send` 默认加密发送;显式 `encrypt=False` 才发送明文普通消息。
127
+ - `group.thought.put` 强制加密。
128
+ - SDK 自动上传 prekey、拉取对端 prekey、解密收到的 P2P / Group V2 消息。
129
+ - `protected_headers` 会参与消息签名保护,并只注入消息类和 thought 类 RPC。
123
130
 
124
- ```mermaid
125
- sequenceDiagram
126
- participant Sender
127
- participant Gateway
128
- participant Receiver
129
-
130
- Receiver->>Gateway: 上传 prekey(公钥 + 签名)
131
- Sender->>Gateway: 获取 Receiver 的 prekey 和证书
132
- Note over Sender: 验证 prekey 签名 → 临时 ECDH → message_key
133
- Sender->>Gateway: e2ee.encrypted (ciphertext + tag + AAD)
134
- Gateway->>Receiver: 推送或 pull
135
- Note over Receiver: 用 prekey 私钥 + 临时公钥 → ECDH → message_key → 解密
136
- ```
137
-
138
- ### 加密模式
139
-
140
- 1. **prekey_ecdh_v2**(优先):对方有 prekey → 四路 ECDH(ephemeral×prekey + ephemeral×identity + sender×prekey + sender×identity),前向安全
141
- 2. **long_term_key**(降级):对方无 prekey → 双路 ECDH(ephemeral×recipient_identity + sender×recipient_identity)+ HKDF 派生密钥,无严格前向安全
142
-
143
- > Python SDK 默认 `require_forward_secrecy=true`,无 prekey 时拒绝 long_term_key 降级。
131
+ ---
144
132
 
145
- ### AAD (Additional Authenticated Data)
133
+ ## RPC 与事件
146
134
 
147
- 每条加密消息的 AAD 包含:
135
+ 业务能力统一通过 `client.call(method, params)` 调用:
148
136
 
149
- ```json
150
- {
151
- "from": "alice.agentid.pub",
152
- "to": "bob.agentid.pub",
153
- "message_id": "uuid",
154
- "timestamp": 1234567890000,
155
- "encryption_mode": "prekey_ecdh_v2",
156
- "suite": "P256_HKDF_SHA256_AES_256_GCM",
157
- "ephemeral_public_key": "base64",
158
- "recipient_cert_fingerprint": "sha256:...",
159
- "sender_cert_fingerprint": "sha256:...",
160
- "prekey_id": "uuid"
161
- }
137
+ ```python
138
+ await client.call("message.send", {
139
+ "to": "bob.agentid.pub",
140
+ "payload": {"type": "text", "text": "hello"},
141
+ })
162
142
  ```
163
143
 
164
- ### 防重放
144
+ 事件通过 `client.on(event, handler)` 订阅:
165
145
 
166
- - **本地 seen set**:E2EEManager 内置,按 `{sender_aid}:{message_id}` 去重
167
- - **服务端 replay guard**:可选增强,跨进程持久化防重放
168
-
169
- ### Prekey 管理
146
+ ```python
147
+ client.on("connection.state", lambda e: print(e["state"]))
148
+ client.on("message.received", lambda e: print(e["payload"]))
149
+ ```
170
150
 
171
- - SDK 连接时自动上传 prekey,定时轮换(默认每小时)
172
- - 旧 prekey 私钥本地保留 7 天,确保在途消息可解密
151
+ RPC 方法参数见 `09-message-rpc-manual.md`、`09-group-rpc-manual.md`、`09-storage-rpc-manual.md` 等专项手册。