@agentunion/fastaun-browser 0.3.6 → 0.4.0
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/_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
- 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 +1633 -0
- package/_packed_docs/INDEX.md +17 -11
- package/_packed_docs/KITE_DOCS_GUIDE.md +11 -10
- package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +134 -158
- package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +11 -7
- package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +98 -119
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +147 -374
- package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +153 -153
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +163 -1383
- package/_packed_docs/sdk/07-/351/224/231/350/257/257/345/244/204/347/220/206.md +71 -91
- package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +76 -63
- package/_packed_docs/sdk/09-custody-api-manual.md +7 -6
- package/_packed_docs/sdk/09-meta-rpc-manual.md +13 -14
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +37 -49
- package/_packed_docs/sdk/INDEX.md +72 -98
- package/_packed_docs/sdk/README.md +85 -266
- package/dist/aid-store.d.ts +64 -0
- package/dist/aid-store.d.ts.map +1 -0
- package/dist/aid-store.js +855 -0
- package/dist/aid-store.js.map +1 -0
- package/dist/aid.d.ts +50 -0
- package/dist/aid.d.ts.map +1 -0
- package/dist/aid.js +106 -0
- package/dist/aid.js.map +1 -0
- package/dist/auth.js +1 -1
- package/dist/auth.js.map +1 -1
- package/dist/bundle.js +1626 -1885
- package/dist/cert-utils.d.ts +26 -0
- package/dist/cert-utils.d.ts.map +1 -0
- package/dist/cert-utils.js +221 -0
- package/dist/cert-utils.js.map +1 -0
- package/dist/client.d.ts +89 -60
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +558 -154
- package/dist/client.js.map +1 -1
- package/dist/error-codes.d.ts +25 -0
- package/dist/error-codes.d.ts.map +1 -0
- package/dist/error-codes.js +31 -0
- package/dist/error-codes.js.map +1 -0
- package/dist/errors.d.ts +4 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +4 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/keystore/index.d.ts +1 -1
- package/dist/keystore/index.d.ts.map +1 -1
- package/dist/result.d.ts +19 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +10 -0
- package/dist/result.js.map +1 -0
- package/dist/transport.d.ts +3 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +16 -1
- package/dist/transport.js.map +1 -1
- package/dist/types.d.ts +13 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +22 -0
- package/dist/types.js.map +1 -1
- package/dist/v2/e2ee/encrypt-p2p.js +1 -1
- package/dist/v2/e2ee/encrypt-p2p.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,172 +1,151 @@
|
|
|
1
|
-
# AUN SDK
|
|
1
|
+
# AUN SDK - 核心概念
|
|
2
2
|
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
## AID
|
|
5
|
+
## AID
|
|
6
6
|
|
|
7
|
-
AID 是 Agent
|
|
7
|
+
AID 是 Agent 的全局唯一身份,格式为域名形式,例如 `alice.agentid.pub`。
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
特点:
|
|
10
10
|
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
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
|
-
|
|
20
|
-
MY_AID = f"alice-{random.randint(1000,9999)}.agentid.pub"
|
|
19
|
+
store = AIDStore(aun_path="~/.aun/myapp", encryption_seed="")
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
registered = await store.register("alice.agentid.pub")
|
|
22
|
+
loaded = store.load("alice.agentid.pub")
|
|
23
|
+
me = loaded["data"]["aid"]
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
[*] -->
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
| `
|
|
51
|
-
| `
|
|
52
|
-
| `
|
|
53
|
-
| `
|
|
54
|
-
| `
|
|
55
|
-
| `
|
|
56
|
-
| `
|
|
57
|
-
| `
|
|
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)
|
|
63
|
-
print(client.
|
|
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
|
|
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
|
-
|
|
80
|
-
Gateway
|
|
81
|
-
|
|
82
|
-
Client->>
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
Client
|
|
86
|
-
Gateway
|
|
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
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
117
|
+
默认加密套件为 `P256_HKDF_SHA256_AES_256_GCM`:
|
|
114
118
|
|
|
115
|
-
-
|
|
116
|
-
-
|
|
117
|
-
-
|
|
118
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
133
|
+
## RPC 与事件
|
|
146
134
|
|
|
147
|
-
|
|
135
|
+
业务能力统一通过 `client.call(method, params)` 调用:
|
|
148
136
|
|
|
149
|
-
```
|
|
150
|
-
{
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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
|
-
|
|
172
|
-
- 旧 prekey 私钥本地保留 7 天,确保在途消息可解密
|
|
151
|
+
RPC 方法参数见 `09-message-rpc-manual.md`、`09-group-rpc-manual.md`、`09-storage-rpc-manual.md` 等专项手册。
|