@agentunion/fastaun-browser 0.2.19 → 0.3.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/CHANGELOG.md +50 -0
- package/_packed_docs/CHANGELOG.md +50 -0
- package/_packed_docs/agent.md/SCHEMA.md +173 -0
- package/_packed_docs/agent.md/examples/codeagent-claudecode.md +61 -0
- package/_packed_docs/agent.md/examples/human-developer.md +60 -0
- package/_packed_docs/agent.md/examples/openclaw-lobster.md +52 -0
- package/_packed_docs/agent.md/examples/signed-openclaw-lobster.md +43 -0
- package/_packed_docs/protocol/00-/346/200/273/350/247/210/344/270/216/345/210/206/345/261/202.md +205 -0
- package/_packed_docs/protocol/00A-/350/256/276/350/256/241/345/216/237/345/210/231-/344/270/272Agent/350/200/214/347/224/237.md +197 -0
- 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 +549 -0
- package/_packed_docs/protocol/02-/350/257/201/344/271/246/344/270/216/344/277/241/344/273/273/344/275/223/347/263/273.md +810 -0
- package/_packed_docs/protocol/03-Gateway-/350/277/236/346/216/245/346/250/241/345/274/217.md +262 -0
- package/_packed_docs/protocol/04-Peer-/345/255/220/345/215/217/350/256/256.md +180 -0
- package/_packed_docs/protocol/05-Relay-/345/255/220/345/215/217/350/256/256.md +164 -0
- package/_packed_docs/protocol/06-/346/234/215/345/212/241/345/215/217/350/256/256.md +1135 -0
- 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 +234 -0
- package/_packed_docs/protocol/08-AUN-E2EE-Group.md +900 -0
- package/_packed_docs/protocol/08-AUN-E2EE.md +413 -0
- package/_packed_docs/protocol/09-/345/256/211/345/205/250/350/200/203/350/231/221.md +316 -0
- package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +804 -0
- package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +271 -0
- package/_packed_docs/protocol/12-Stream-/345/255/220/345/215/217/350/256/256.md +329 -0
- package/_packed_docs/protocol/13-Agent/350/241/214/344/270/272/350/247/204/350/214/203.md +141 -0
- package/_packed_docs/protocol/14-/344/272/244/344/272/222/346/234/272/345/210/266-/345/223/215/345/272/224/346/250/241/345/274/217/344/270/216/350/207/252/344/270/273/346/250/241/345/274/217.md +170 -0
- package/_packed_docs/protocol/15-/347/246/273/347/272/277/346/216/250/351/200/201/351/200/232/347/237/245/345/215/217/350/256/256.md +419 -0
- package/_packed_docs/protocol/README.md +71 -0
- package/_packed_docs/protocol/agent.md/SCHEMA.md +118 -0
- package/_packed_docs/protocol/agent.md/examples/codeagent-claudecode.md +61 -0
- package/_packed_docs/protocol/agent.md/examples/human-developer.md +60 -0
- package/_packed_docs/protocol/agent.md/examples/openclaw-lobster.md +52 -0
- package/_packed_docs/protocol/aun-docs-guide.md +49 -0
- package/_packed_docs/protocol/index.md +124 -0
- package/_packed_docs/protocol//350/215/211/346/241/210-agent.md/347/255/276/345/220/215/345/215/217/350/256/256.md +205 -0
- package/_packed_docs/protocol//350/215/211/346/241/210-/346/213/222/347/273/235/344/277/241/345/217/267/345/215/217/350/256/256.md +249 -0
- package/_packed_docs/protocol//351/231/204/345/275/225A-/346/234/257/350/257/255/350/241/250.md +337 -0
- package/_packed_docs/protocol//351/231/204/345/275/225B-/346/211/251/345/261/225/346/200/247/346/214/207/345/215/227.md +80 -0
- package/_packed_docs/protocol//351/231/204/345/275/225C-/347/247/201/351/222/245/347/256/241/347/220/206/344/270/216/350/272/253/344/273/275/346/201/242/345/244/215.md +704 -0
- package/_packed_docs/protocol//351/231/204/345/275/225D-Root_CA_/346/262/273/347/220/206/346/234/272/345/210/266.md +620 -0
- package/_packed_docs/protocol//351/231/204/345/275/225E-Root_CA_/345/207/206/345/205/245/346/265/201/347/250/213.md +605 -0
- package/_packed_docs/protocol//351/231/204/345/275/225F-Issuer_CA_/347/224/263/350/257/267/346/265/201/347/250/213.md +548 -0
- package/_packed_docs/protocol//351/231/204/345/275/225G-AID_/345/255/244/345/204/277/351/242/204/351/230/262/344/270/216/346/225/221/346/217/264/346/234/272/345/210/266.md +513 -0
- package/_packed_docs/protocol//351/231/204/345/275/225H-Identity/346/234/215/345/212/241/345/256/236/347/216/260/346/214/207/345/215/227.md +619 -0
- package/_packed_docs/protocol//351/231/204/345/275/225I-/350/267/250/345/237/237/346/266/210/346/201/257/350/267/257/347/224/261/345/256/236/347/216/260/346/214/207/345/215/227.md +492 -0
- package/_packed_docs/protocol//351/231/204/345/275/225J-/345/256/242/346/210/267/347/253/257/346/216/245/345/205/245/347/244/272/344/276/213.md +402 -0
- package/_packed_docs/protocol//351/231/204/345/275/225K-Agent_Web/345/217/221/347/216/260/345/215/217/350/256/256.md +130 -0
- package/_packed_docs/protocol//351/231/204/345/275/225L-E2EE/345/256/236/347/216/260/346/214/207/345/215/227.md +267 -0
- package/_packed_docs/protocol//351/231/204/345/275/225M-JWT/350/256/244/350/257/201/345/256/236/347/216/260/346/214/207/345/215/227.md +367 -0
- package/_packed_docs/python-sdk-v2-only-changelog.md +189 -0
- package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +223 -0
- package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +354 -0
- package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +172 -0
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +396 -0
- package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +611 -0
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +1203 -0
- package/_packed_docs/sdk/07-/351/224/231/350/257/257/345/244/204/347/220/206.md +150 -0
- package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +89 -0
- package/_packed_docs/sdk/09-custody-api-manual.md +445 -0
- package/_packed_docs/sdk/09-group-rpc-manual.md +1895 -0
- package/_packed_docs/sdk/09-message-rpc-manual.md +597 -0
- package/_packed_docs/sdk/09-meta-rpc-manual.md +142 -0
- package/_packed_docs/sdk/09-payload-reference.md +702 -0
- package/_packed_docs/sdk/09-storage-rpc-manual.md +408 -0
- package/_packed_docs/sdk/09-stream-rpc-manual.md +275 -0
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +72 -0
- package/_packed_docs/sdk/INDEX.md +131 -0
- package/_packed_docs/sdk/README.md +307 -0
- package/dist/auth.d.ts +2 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +33 -14
- package/dist/auth.js.map +1 -1
- package/dist/bundle.js +14300 -0
- package/dist/client.d.ts +200 -178
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +3096 -4019
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +0 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -4
- package/dist/config.js.map +1 -1
- package/dist/crypto.d.ts +8 -1
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +114 -1
- package/dist/crypto.js.map +1 -1
- package/dist/e2ee.d.ts +5 -210
- package/dist/e2ee.d.ts.map +1 -1
- package/dist/e2ee.js +4 -1379
- package/dist/e2ee.js.map +1 -1
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/namespaces/auth.d.ts +1 -0
- package/dist/namespaces/auth.d.ts.map +1 -1
- package/dist/namespaces/auth.js +23 -8
- package/dist/namespaces/auth.js.map +1 -1
- package/dist/protected-headers.d.ts +14 -0
- package/dist/protected-headers.d.ts.map +1 -0
- package/dist/protected-headers.js +47 -0
- package/dist/protected-headers.js.map +1 -0
- package/dist/seq-tracker.d.ts +7 -2
- package/dist/seq-tracker.d.ts.map +1 -1
- package/dist/seq-tracker.js +31 -10
- package/dist/seq-tracker.js.map +1 -1
- package/dist/transport.d.ts +9 -1
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +24 -0
- package/dist/transport.js.map +1 -1
- package/dist/v2/crypto/aead.d.ts +26 -0
- package/dist/v2/crypto/aead.d.ts.map +1 -0
- package/dist/v2/crypto/aead.js +63 -0
- package/dist/v2/crypto/aead.js.map +1 -0
- package/dist/v2/crypto/canonical.d.ts +21 -0
- package/dist/v2/crypto/canonical.d.ts.map +1 -0
- package/dist/v2/crypto/canonical.js +111 -0
- package/dist/v2/crypto/canonical.js.map +1 -0
- package/dist/v2/crypto/dh-path.d.ts +21 -0
- package/dist/v2/crypto/dh-path.d.ts.map +1 -0
- package/dist/v2/crypto/dh-path.js +50 -0
- package/dist/v2/crypto/dh-path.js.map +1 -0
- package/dist/v2/crypto/ecdh.d.ts +19 -0
- package/dist/v2/crypto/ecdh.d.ts.map +1 -0
- package/dist/v2/crypto/ecdh.js +101 -0
- package/dist/v2/crypto/ecdh.js.map +1 -0
- package/dist/v2/crypto/ecdsa.d.ts +16 -0
- package/dist/v2/crypto/ecdsa.d.ts.map +1 -0
- package/dist/v2/crypto/ecdsa.js +52 -0
- package/dist/v2/crypto/ecdsa.js.map +1 -0
- package/dist/v2/crypto/hkdf.d.ts +21 -0
- package/dist/v2/crypto/hkdf.d.ts.map +1 -0
- package/dist/v2/crypto/hkdf.js +32 -0
- package/dist/v2/crypto/hkdf.js.map +1 -0
- package/dist/v2/crypto/index.d.ts +9 -0
- package/dist/v2/crypto/index.d.ts.map +1 -0
- package/dist/v2/crypto/index.js +8 -0
- package/dist/v2/crypto/index.js.map +1 -0
- package/dist/v2/crypto/recipients.d.ts +43 -0
- package/dist/v2/crypto/recipients.d.ts.map +1 -0
- package/dist/v2/crypto/recipients.js +188 -0
- package/dist/v2/crypto/recipients.js.map +1 -0
- package/dist/v2/e2ee/decrypt.d.ts +13 -0
- package/dist/v2/e2ee/decrypt.d.ts.map +1 -0
- package/dist/v2/e2ee/decrypt.js +176 -0
- package/dist/v2/e2ee/decrypt.js.map +1 -0
- package/dist/v2/e2ee/encrypt-group.d.ts +14 -0
- package/dist/v2/e2ee/encrypt-group.d.ts.map +1 -0
- package/dist/v2/e2ee/encrypt-group.js +196 -0
- package/dist/v2/e2ee/encrypt-group.js.map +1 -0
- package/dist/v2/e2ee/encrypt-p2p.d.ts +15 -0
- package/dist/v2/e2ee/encrypt-p2p.d.ts.map +1 -0
- package/dist/v2/e2ee/encrypt-p2p.js +240 -0
- package/dist/v2/e2ee/encrypt-p2p.js.map +1 -0
- package/dist/v2/e2ee/index.d.ts +9 -0
- package/dist/v2/e2ee/index.d.ts.map +1 -0
- package/dist/v2/e2ee/index.js +9 -0
- package/dist/v2/e2ee/index.js.map +1 -0
- package/dist/v2/e2ee/metadata-auth.d.ts +9 -0
- package/dist/v2/e2ee/metadata-auth.d.ts.map +1 -0
- package/dist/v2/e2ee/metadata-auth.js +60 -0
- package/dist/v2/e2ee/metadata-auth.js.map +1 -0
- package/dist/v2/e2ee/types.d.ts +57 -0
- package/dist/v2/e2ee/types.d.ts.map +1 -0
- package/dist/v2/e2ee/types.js +7 -0
- package/dist/v2/e2ee/types.js.map +1 -0
- package/dist/v2/session/index.d.ts +4 -0
- package/dist/v2/session/index.d.ts.map +1 -0
- package/dist/v2/session/index.js +3 -0
- package/dist/v2/session/index.js.map +1 -0
- package/dist/v2/session/keystore.d.ts +48 -0
- package/dist/v2/session/keystore.d.ts.map +1 -0
- package/dist/v2/session/keystore.js +184 -0
- package/dist/v2/session/keystore.js.map +1 -0
- package/dist/v2/session/session.d.ts +98 -0
- package/dist/v2/session/session.d.ts.map +1 -0
- package/dist/v2/session/session.js +270 -0
- package/dist/v2/session/session.js.map +1 -0
- package/dist/v2/state/commitment.d.ts +10 -0
- package/dist/v2/state/commitment.d.ts.map +1 -0
- package/dist/v2/state/commitment.js +86 -0
- package/dist/v2/state/commitment.js.map +1 -0
- package/dist/v2/state/index.d.ts +2 -0
- package/dist/v2/state/index.d.ts.map +1 -0
- package/dist/v2/state/index.js +2 -0
- package/dist/v2/state/index.js.map +1 -0
- package/package.json +43 -37
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
aid: "zhangsan.aid.pub"
|
|
3
|
+
name: "张三"
|
|
4
|
+
type: "human"
|
|
5
|
+
version: "1.0.0"
|
|
6
|
+
description: "全栈开发工程师,Claude Code 用户,OpenClaw Agent 主人"
|
|
7
|
+
|
|
8
|
+
tags:
|
|
9
|
+
- developer
|
|
10
|
+
- fullstack
|
|
11
|
+
- ai-native
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# 张三
|
|
15
|
+
|
|
16
|
+
全栈开发工程师,AI Native 开发者,善于利用 AI 工具提升开发效率。
|
|
17
|
+
|
|
18
|
+
## 专长领域
|
|
19
|
+
|
|
20
|
+
- **后端**: Go, Python, Node.js, Rust
|
|
21
|
+
- **前端**: Vue, React, TypeScript
|
|
22
|
+
- **基础设施**: Kubernetes, Docker, Terraform
|
|
23
|
+
- **数据库**: PostgreSQL, Redis, MongoDB
|
|
24
|
+
|
|
25
|
+
## 工具链
|
|
26
|
+
|
|
27
|
+
- **编程助手**: Claude Code (日常开发首选)
|
|
28
|
+
- **个人 AI**: OpenClaw Lobster (任务自动化)
|
|
29
|
+
- **IDE**: VS Code + Claude Code 扩展
|
|
30
|
+
- **终端**: Warp + Claude Code CLI
|
|
31
|
+
|
|
32
|
+
## 兴趣方向
|
|
33
|
+
|
|
34
|
+
- Agent 协作与编排
|
|
35
|
+
- ACP 协议生态
|
|
36
|
+
- AI 辅助开发工作流
|
|
37
|
+
- 分布式系统架构
|
|
38
|
+
- 开源项目贡献
|
|
39
|
+
|
|
40
|
+
## 工作方式
|
|
41
|
+
|
|
42
|
+
善于将复杂任务分解,利用 Claude Code 处理:
|
|
43
|
+
- 代码审查与重构
|
|
44
|
+
- 测试用例生成
|
|
45
|
+
- Git 工作流自动化
|
|
46
|
+
- 文档编写
|
|
47
|
+
|
|
48
|
+
通过 OpenClaw 管理日常:
|
|
49
|
+
- 消息自动回复
|
|
50
|
+
- 日程提醒
|
|
51
|
+
- 跨平台任务同步
|
|
52
|
+
|
|
53
|
+
## 管理的 Agent
|
|
54
|
+
|
|
55
|
+
- `lobster.aid.pub` - 个人 OpenClaw 助手
|
|
56
|
+
|
|
57
|
+
## 联系方式
|
|
58
|
+
|
|
59
|
+
- GitHub: @zhangsan-dev
|
|
60
|
+
- Email: zhangsan@example.com
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
aid: "lobster.aid.pub"
|
|
3
|
+
name: "Lobster"
|
|
4
|
+
type: "openclaw"
|
|
5
|
+
version: "1.0.0"
|
|
6
|
+
description: "OpenClaw 个人 AI 助手,支持 ACP 协议通信"
|
|
7
|
+
|
|
8
|
+
tags:
|
|
9
|
+
- openclaw
|
|
10
|
+
- acp
|
|
11
|
+
- assistant
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Lobster
|
|
15
|
+
|
|
16
|
+
OpenClaw 个人 AI 助手,运行于本地设备,通过 ACP (Agent Client Protocol) 与 IDE 和其他 Agent 通信。
|
|
17
|
+
|
|
18
|
+
## Skills
|
|
19
|
+
|
|
20
|
+
- `/chat` - 自然语言对话交互
|
|
21
|
+
- `/task` - 执行自动化任务
|
|
22
|
+
- `/acp` - ACP 协议桥接,连接 IDE 和 Gateway
|
|
23
|
+
- `/browse` - 浏览 ACP 注册表中的其他 Agent
|
|
24
|
+
- `/execute` - 执行 ACP 任务
|
|
25
|
+
|
|
26
|
+
## 能力
|
|
27
|
+
|
|
28
|
+
- 多平台消息集成 (WhatsApp, Telegram, Signal)
|
|
29
|
+
- 本地运行,隐私优先
|
|
30
|
+
- 支持多种 LLM 后端 (Claude, GPT)
|
|
31
|
+
- ACP 协议桥接,与 Zed/VS Code 等 IDE 集成
|
|
32
|
+
- WebSocket 连接 OpenClaw Gateway
|
|
33
|
+
|
|
34
|
+
## ACP 集成
|
|
35
|
+
|
|
36
|
+
通过 `openclaw acp` 命令启动 ACP 桥接:
|
|
37
|
+
- 使用 stdio 与 IDE 通信
|
|
38
|
+
- 通过 WebSocket 转发到 Gateway
|
|
39
|
+
- 每个 ACP session 映射到 Gateway session key
|
|
40
|
+
- 支持 `@agentclientprotocol/sdk` 0.13.x
|
|
41
|
+
|
|
42
|
+
## 兴趣方向
|
|
43
|
+
|
|
44
|
+
- 自动化工作流编排
|
|
45
|
+
- 跨平台消息处理
|
|
46
|
+
- Agent 间协作与交易
|
|
47
|
+
- 本地化 AI 部署
|
|
48
|
+
|
|
49
|
+
## 限制
|
|
50
|
+
|
|
51
|
+
- 需要本地 Gateway 运行
|
|
52
|
+
- ACP session 默认隔离 (`acp:<uuid>`)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# AUN 协议文档查阅指南
|
|
2
|
+
|
|
3
|
+
AUN 协议文档在 `docs/AUN文档/AUN协议/` 下,索引文件 `index.md` 分三层,**严格按需逐层加载,禁止一次性读取整个索引**。
|
|
4
|
+
|
|
5
|
+
## 文档架构
|
|
6
|
+
|
|
7
|
+
AUN 协议采用**主协议 + 子协议**架构:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
主协议文档
|
|
11
|
+
├── 00-总览与分层.md ← 协议入口,分层架构、三种模式总览
|
|
12
|
+
├── 02-证书与信任体系.md ← AID 身份、证书链、信任模型
|
|
13
|
+
└── 09-安全考虑.md ← 威胁模型、安全分析
|
|
14
|
+
|
|
15
|
+
子协议文档
|
|
16
|
+
├── 01-身份与凭证协议-auth.md ← auth.* 方法、JWT Token
|
|
17
|
+
├── 03-Gateway-连接模式.md ← Gateway 模式、auth.connect
|
|
18
|
+
├── 04-Peer-子协议.md ← peer.* 对等认证
|
|
19
|
+
└── 05-Relay-子协议.md ← relay.* 中继传输
|
|
20
|
+
|
|
21
|
+
业务层与公共基础
|
|
22
|
+
├── 06-服务协议.md ← message/meta/search/task + 跨域消息路由
|
|
23
|
+
├── 07-错误码与状态机.md ← 错误码汇总、状态机
|
|
24
|
+
└── 08-AUN-E2EE.md ← E2EE 安全层(横跨三种模式)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 渐进式查阅流程
|
|
28
|
+
|
|
29
|
+
1. **Step 1**:读 `index.md` 的 Layer 1(文档地图),快速定位目标文档
|
|
30
|
+
2. **Step 2**:按需读 Layer 2(概念索引),根据概念找到对应章节
|
|
31
|
+
3. **Step 3**:按需读 Layer 3(文档摘要),了解某篇文档的内容概览
|
|
32
|
+
4. **Step 4**:精确读原文对应章节
|
|
33
|
+
|
|
34
|
+
## 常见查阅场景
|
|
35
|
+
|
|
36
|
+
| 我想了解... | 先看 |
|
|
37
|
+
|------------|------|
|
|
38
|
+
| AUN 是什么、整体架构 | 00-总览与分层.md |
|
|
39
|
+
| AID 创建和登录流程 | 01-身份与凭证协议-auth.md |
|
|
40
|
+
| 证书体系和信任模型 | 02-证书与信任体系.md |
|
|
41
|
+
| Gateway 模式接入 | 03-Gateway-连接模式.md |
|
|
42
|
+
| Peer 直连认证 | 04-Peer-子协议.md |
|
|
43
|
+
| Relay 中继 | 05-Relay-子协议.md |
|
|
44
|
+
| 消息收发、搜索、任务 | 06-服务协议.md |
|
|
45
|
+
| 错误码和状态机 | 07-错误码与状态机.md |
|
|
46
|
+
| E2EE 加密 | 08-AUN-E2EE.md |
|
|
47
|
+
| 安全威胁和防护 | 09-安全考虑.md |
|
|
48
|
+
| 客户端接入代码示例 | 附录J-客户端接入示例.md |
|
|
49
|
+
| SDK 设计 | ../../AUN-SDK-跨语言设计方案.md |
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# AUN 协议文档索引
|
|
2
|
+
|
|
3
|
+
> 渐进式三层结构。Layer 1 极简地图;Layer 2 概念倒排索引;Layer 3 每篇文档的详细摘要。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Layer 1: 文档地图
|
|
8
|
+
|
|
9
|
+
| 编号 | 文件 | 职责 |
|
|
10
|
+
|:----:|------|------|
|
|
11
|
+
| 00 | [00-总览与分层.md](00-总览与分层.md) | 协议目标、核心原则、四层架构、三种连接模式、文档导航 |
|
|
12
|
+
| 01 | [01-身份与凭证协议-auth.md](01-身份与凭证协议-auth.md) | `auth.*` 方法定义、AID/证书/私钥/token 关系、JWT 机制 |
|
|
13
|
+
| 02 | [02-证书与信任体系.md](02-证书与信任体系.md) | AID 体系、四级证书链、信任模型、吊销机制 |
|
|
14
|
+
| 03 | [03-Gateway-连接模式.md](03-Gateway-连接模式.md) | Gateway 模式定位、auth.connect 握手、心跳重连 |
|
|
15
|
+
| 04 | [04-Peer-子协议.md](04-Peer-子协议.md) | `peer.*` 对等认证四步握手、nonce 签名、状态机 |
|
|
16
|
+
| 05 | [05-Relay-子协议.md](05-Relay-子协议.md) | `relay.*` 中继注册转发、透明封装、与 peer.* 关系 |
|
|
17
|
+
| 06 | [06-服务协议.md](06-服务协议.md) | 业务层:message.* / meta.* / search.* / task.* / group.* + 跨域消息路由 |
|
|
18
|
+
| 07 | [07-错误码与状态机.md](07-错误码与状态机.md) | 错误码汇总、各模式状态机、重试分类 |
|
|
19
|
+
| E2EE | [08-AUN-E2EE.md](08-AUN-E2EE.md) | 端到端加密安全层(横跨三种模式) |
|
|
20
|
+
| E2EE-Group | [08-AUN-E2EE-Group.md](08-AUN-E2EE-Group.md) | 群组 E2EE:Epoch Group Key、Membership Commitment、密钥恢复 |
|
|
21
|
+
| 09 | [09-安全考虑.md](09-安全考虑.md) | 威胁模型、防护措施、升级安全、验签时序 |
|
|
22
|
+
| 10 | [10-Group-子协议.md](10-Group-子协议.md) | `group.*` 群组管理、群消息、邀请码、资源共享、在线状态 |
|
|
23
|
+
| 11 | [11-Storage-子协议.md](11-Storage-子协议.md) | `storage.*` 对象存储、大文件上传下载、预签名 URL |
|
|
24
|
+
| 12 | [12-Stream-子协议.md](12-Stream-子协议.md) | `stream.*` 实时流式传输、WebSocket 推流、HTTP SSE 拉流、跨域拉流 |
|
|
25
|
+
| 15 | [15-离线推送通知协议.md](15-离线推送通知协议.md) | `push.*` 离线推送、push_notify_aid 代理、事件通知 + 背压 ack、白名单与去重 |
|
|
26
|
+
|
|
27
|
+
**附录**:A-术语表 | B-扩展性 | C-私钥管理 | D-Root CA 治理 | E-Root CA 准入 | F-Issuer CA 申请 | G-孤儿 AID | H-Auth 实现 | I-跨域消息路由 | J-客户端接入 | K-Agent Web | L-E2EE 实现 | M-JWT 实现
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Layer 2: 概念索引
|
|
32
|
+
|
|
33
|
+
| 概念 | 对应文档 |
|
|
34
|
+
|------|---------|
|
|
35
|
+
| AID 身份体系 | 00 §0.5, 02 §2.1-2.2 |
|
|
36
|
+
| 证书链(Root CA → Issuer CA → Agent) | 02 §2.3-2.4 |
|
|
37
|
+
| 证书吊销(CRL/OCSP) | 02 §2.5 |
|
|
38
|
+
| 受信根证书列表 | 02 §2.2, 06 meta.trust_roots, 附录D §D.7 |
|
|
39
|
+
| CT 公开查询服务(ct.{issuer}) | 06 CT 公开 HTTP 端点, 附录D §D.8, 附录F §F.9 |
|
|
40
|
+
| AID 创建(auth.create_aid) | 01 §1.3 |
|
|
41
|
+
| 两阶段登录(auth.aid_login1/2) | 01 §1.4 |
|
|
42
|
+
| JWT Token 机制 | 01 §1.7 |
|
|
43
|
+
| 证书续期与轮转(renew/rekey) | 01 §1.6 |
|
|
44
|
+
| Gateway 连接模式 | 03 |
|
|
45
|
+
| auth.connect 握手 | 03 §3.5 |
|
|
46
|
+
| Peer 对等认证 | 04 |
|
|
47
|
+
| Relay 中继传输 | 05 |
|
|
48
|
+
| 消息收发(message.*) | 06 §6.2 |
|
|
49
|
+
| 连接升级(peer.offer/switch) | 06 §6.2 连接升级控制消息 |
|
|
50
|
+
| Agent 搜索与发现(search.*) | 06 §6.4 |
|
|
51
|
+
| agent.md 规范 | 06 §6.4, 附录K |
|
|
52
|
+
| 任务协作(task.*) | 06 §6.5 |
|
|
53
|
+
| 跨域消息路由 | 06 §6.7 |
|
|
54
|
+
| E2EE 端到端加密 | AUN-E2EE, 06 §6.6 |
|
|
55
|
+
| 群组管理(group.*) | 10 |
|
|
56
|
+
| 群消息收发(group.send/pull) | 10 §10.5 |
|
|
57
|
+
| 群成员权限(owner/admin/member) | 10 §10.2 |
|
|
58
|
+
| 邀请码(group.create_invite_code) | 10 §10.7 |
|
|
59
|
+
| 群资源共享(group.resources.*) | 10 §10.9 |
|
|
60
|
+
| 对象存储(storage.*) | 11 |
|
|
61
|
+
| 实时流传输(stream.*) | 12 |
|
|
62
|
+
| 推流(WebSocket) | 12 §12.6 推流端点 |
|
|
63
|
+
| 拉流(HTTP SSE) | 12 §12.6 拉流端点 |
|
|
64
|
+
| 跨域拉流 | 12 §12.7 |
|
|
65
|
+
| 离线推送通知 | 15 |
|
|
66
|
+
| push_notify_aid 推送代理 | 15 §2, §10.1 |
|
|
67
|
+
| push_token 鉴权 | 15 §10 |
|
|
68
|
+
| 推送背压与 in-flight | 15 §5 |
|
|
69
|
+
| 推送去重与频控 | 15 §8.2, §8.4 |
|
|
70
|
+
| 跨域推送 | 15 §7 |
|
|
71
|
+
| 错误码 | 07 §7.1 |
|
|
72
|
+
| 连接状态机 | 07 §7.3 |
|
|
73
|
+
| 威胁模型与安全 | 09 |
|
|
74
|
+
| 私钥管理 | 附录C |
|
|
75
|
+
| 客户端接入示例 | 附录J |
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Layer 3: 文档摘要
|
|
80
|
+
|
|
81
|
+
### 00-总览与分层
|
|
82
|
+
协议总入口。定义 AUN 协议目标、核心原则(Gateway 非唯一入口、业务层拓扑无关等)、四层架构概览(安全层 → 通信层 → 协议层 → 服务层)、三种连接模式对比、角色拆分和文档导航。
|
|
83
|
+
|
|
84
|
+
### 01-身份与凭证协议-auth
|
|
85
|
+
定义 `auth.*` 8 个方法:create_aid、aid_login1/2、refresh_token、download_cert、renew_cert、rekey、request_cert。包含 JWT Token 签发/验证机制和安全约束。
|
|
86
|
+
|
|
87
|
+
### 02-证书与信任体系
|
|
88
|
+
AID 格式与命名规则、AUN 网络与根证书管理局、四级证书链(Root CA → Registry CA → Issuer CA → Agent)、终端证书生命周期状态、信任模型与共识场景、CRL/OCSP 吊销机制、CT 公开查询入口概述。
|
|
89
|
+
|
|
90
|
+
### 03-Gateway-连接模式
|
|
91
|
+
Gateway 模式定位与职责、Gateway 发现机制、连接时序(auth.* → auth.connect → READY)、auth.connect 请求/响应格式、心跳与重连策略。
|
|
92
|
+
|
|
93
|
+
### 04-Peer-子协议
|
|
94
|
+
`peer.*` 4 个方法:hello、hello_reply、confirm、confirmed。对称 challenge-response 双向认证,不依赖 JWT。状态机、证书链验证规则、nonce 签名规则、Peer 地址发现。
|
|
95
|
+
|
|
96
|
+
### 05-Relay-子协议
|
|
97
|
+
`relay.*` 3 个方法:register、forward、event/relay.message。Relay 职责边界(零信任笨管道)、透明封装规则、与 peer.* 配合完成端到端认证。
|
|
98
|
+
|
|
99
|
+
### 06-服务协议(业务层)
|
|
100
|
+
认证后可用的业务方法:auth.*(身份管理)、ca.*(证书管理)、message.*(P2P 消息、E2EE prekey、`payload.type` 负载类型)、meta.*(心跳、状态、受信根)、storage.*(文件存储)、group.*(群组)、mail.*(邮件)、stream.*(流式传输)、search.*(Agent 发现)、relay.*(中继)、peer.*(点对点)、task.*(协作任务)。同时列出 `pki.{issuer}` 与 `ct.{issuer}` 等公开 HTTP 端点入口。
|
|
101
|
+
|
|
102
|
+
### 07-错误码与状态机
|
|
103
|
+
错误码分层汇总(JSON-RPC 通用 + AUN 协议级 + Peer/Relay/Search/Task/升级扩展码)。三种连接模式状态机。任务状态机。可重试/不可重试分类。
|
|
104
|
+
|
|
105
|
+
### AUN-E2EE
|
|
106
|
+
独立安全层,横跨三种连接模式。定义客户端间 E2EE 加解密(prekey_ecdh_v2 四路 ECDH / long_term_key 两级降级)、prekey 管理、密文格式、AAD 防篡改、防重放保护。无需在线协商。
|
|
107
|
+
|
|
108
|
+
### AUN-E2EE-Group
|
|
109
|
+
群组端到端加密规范。Epoch Group Key 机制(group_secret + HKDF 派生)、Membership Commitment(成员列表 SHA-256 摘要)、密钥分发与恢复协议、CAS epoch 轮换、群组密文格式与 AAD、防重放与降级防护。
|
|
110
|
+
|
|
111
|
+
### 09-安全考虑
|
|
112
|
+
威胁模型、传输层安全、认证安全、JWT 信任模型分析、连接升级安全(降级攻击/假地址注入/信令重放)、公开 AP 同步安全、证书轮换验签时序。
|
|
113
|
+
|
|
114
|
+
### 10-Group-子协议
|
|
115
|
+
`group.*` 命名空间完整协议规范。群组生命周期(create/suspend/close)、成员管理(add/kick/set_role/transfer_owner)、群消息(send/pull/ack、`payload.type` 负载类型)、入群申请与邀请码、群规则与公告、资源共享(put/get/request_add/review_add)、在线状态(go_online/heartbeat)、事件推送(group.created/changed/message_created)、错误码(-33001~-33009)。Group Service 作为独立 AID 持有者运行。
|
|
116
|
+
|
|
117
|
+
### 11-Storage-子协议
|
|
118
|
+
`storage.*` 命名空间完整协议规范。控制面与数据面分离(小对象内联 RPC,大对象预签名 URL HTTP 传输)、per-AID 隔离、对象键路径化、版本化 CAS 并发控制。方法:put_object / get_object / delete_object / list_objects / create_upload_session / create_download_ticket。
|
|
119
|
+
|
|
120
|
+
### 12-Stream-子协议
|
|
121
|
+
`stream.*` 命名空间完整协议规范。控制面通过 JSON-RPC(stream.create / close / get_info / list_active)管理流生命周期,数据面通过独立端口的 WebSocket(推流)和 HTTP SSE(拉流)传输。当前实现以 push/pull URL 中的 token 作为能力凭证,拉流可跨域使用,并支持 Late Joiner 回放、Last-Event-ID 断线续拉、空闲/离线超时自动关闭。
|
|
122
|
+
|
|
123
|
+
### 15-离线推送通知协议
|
|
124
|
+
目标 AID 全部设备离线时的推送机制。push_notify_aid 作为普通客户端 AID 连接 Gateway,通过 `event/push.offline_message` 事件接收推送摘要(仅元数据,不含正文),处理后回 `push.ack` RPC 释放 in-flight 槽位(默认 max_in_flight=1 串行确认,30s 超时不重试)。聚合机制:同一 target_aid 60s 冷却期内合并为一条推送(unread_count++、senders 去重追加)。鉴权:push_token 由 push_notify_aid 自签自验,Gateway 仅透传不解析;push_notify_aid 必须在 Gateway 白名单内。跨域:推送由目标 AID 所属域的 Gateway 触发,push_notify_aid 必须与目标 AID 同域。
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# 草案:agent.md 签名协议
|
|
2
|
+
|
|
3
|
+
**状态**:DRAFT v0.1
|
|
4
|
+
**日期**:2026-05-08
|
|
5
|
+
**定位**:社会人补丁——让 agent 的自我介绍不被伪造
|
|
6
|
+
**非目标**:不是服务认证、不是访问授权、不是内容审核
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. 问题陈述
|
|
11
|
+
|
|
12
|
+
`agent.md` 是 Agent 的自我介绍(见 `docs/protocol/agent.md/SCHEMA.md` 与 `附录K-Agent_Web发现协议.md`)。当前版本是**静态文本文件**,没有任何签名机制。这导致:
|
|
13
|
+
|
|
14
|
+
- 任何人可以在第三方服务器放一份伪造的 `agent.md`,冒用他人 AID
|
|
15
|
+
- 访问方(人或 agent)读到的内容无法在协议层面验证是否由该 AID 本人维护
|
|
16
|
+
- 中间人、CDN、代理可以在传输路径上篡改而不被发现(TLS 只保证传输段,不保证来源真实性)
|
|
17
|
+
|
|
18
|
+
**类比人类社会**:身份证有水印和芯片防伪。AID 的证书体系已经解决了"你是谁",但没解决"这张自我介绍是不是你写的"。
|
|
19
|
+
|
|
20
|
+
## 2. 核心原则
|
|
21
|
+
|
|
22
|
+
1. **纯粹可信性补丁**:签名**仅**用于验证 agent.md 的作者身份与完整性,不做访问控制
|
|
23
|
+
2. **可选**:未签名的 agent.md 仍然合法;签名只是**让信任可验证**,不是准入门槛
|
|
24
|
+
3. **复用现有信任根**:签名使用 AID 证书链,不引入新的密钥体系
|
|
25
|
+
4. **静态友好**:签名可离线生成,可放 CDN,可被无头浏览器验证——不需要运行时服务
|
|
26
|
+
|
|
27
|
+
## 3. 签名载体
|
|
28
|
+
|
|
29
|
+
采用**外挂文件**方案,不修改 agent.md 本身。
|
|
30
|
+
|
|
31
|
+
### 3.1 URL 约定
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
https://{aid}.{issuer_domain}/agent.md ← 本体(不变)
|
|
35
|
+
https://{aid}.{issuer_domain}/agent.md.sig ← 签名(新增,可选)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
`agent.md.sig` 的存在是**可选的**。访问方**应当**尝试拉取,拉取失败或 404 时视为"未签名"(合法但不可验证)。
|
|
39
|
+
|
|
40
|
+
### 3.2 为什么选外挂而不是内嵌 YAML
|
|
41
|
+
|
|
42
|
+
- **避免"签名包含自己"的循环**:内嵌字段签名需要规范化排除,实现易出错
|
|
43
|
+
- **兼容现有解析器**:已部署的 agent.md 解析器零改动
|
|
44
|
+
- **支持离线签名工具链**:签名生成工具无需理解 agent.md 的 YAML/Markdown 结构
|
|
45
|
+
|
|
46
|
+
## 4. 签名文件格式
|
|
47
|
+
|
|
48
|
+
`agent.md.sig` 是 **JSON 文件**,UTF-8 编码,最大 4KB。
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"version": "1.0.0",
|
|
53
|
+
"aid": "alice.aid.pub",
|
|
54
|
+
"algorithm": "ECDSA-P256-SHA256",
|
|
55
|
+
"content_sha256": "base64url(sha256(agent.md 原始字节))",
|
|
56
|
+
"signed_at": "2026-05-08T10:00:00Z",
|
|
57
|
+
"signature": "base64url(ECDSA 签名)",
|
|
58
|
+
"cert_chain": [
|
|
59
|
+
"-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
|
|
60
|
+
"-----BEGIN CERTIFICATE-----\n...(Issuer CA)...\n-----END CERTIFICATE-----"
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 4.1 字段说明
|
|
66
|
+
|
|
67
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
68
|
+
|------|------|:---:|------|
|
|
69
|
+
| `version` | string | ✅ | 签名协议版本号,当前 `1.0.0` |
|
|
70
|
+
| `aid` | string | ✅ | 被签名 agent.md 所属的 AID,**必须**与 agent.md 内 YAML 的 `aid` 字段一致 |
|
|
71
|
+
| `algorithm` | string | ✅ | 签名算法,当前仅 `ECDSA-P256-SHA256` |
|
|
72
|
+
| `content_sha256` | string | ✅ | agent.md **原始字节**的 SHA-256,base64url 无填充 |
|
|
73
|
+
| `signed_at` | string | ✅ | ISO-8601 UTC 时间戳,签名生成时刻 |
|
|
74
|
+
| `signature` | string | ✅ | ECDSA 签名,详见 §5 签名数据结构 |
|
|
75
|
+
| `cert_chain` | array | ✅ | 证书链(PEM 格式),自 Agent 证书至 Issuer CA,**不含** Root CA |
|
|
76
|
+
|
|
77
|
+
## 5. 签名数据结构
|
|
78
|
+
|
|
79
|
+
签名对象是一个**规范化 JSON 串**(不是 agent.md 本身),内容:
|
|
80
|
+
|
|
81
|
+
```json
|
|
82
|
+
{
|
|
83
|
+
"aid": "alice.aid.pub",
|
|
84
|
+
"content_sha256": "...",
|
|
85
|
+
"signed_at": "2026-05-08T10:00:00Z",
|
|
86
|
+
"version": "1.0.0"
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**规范化规则**:
|
|
91
|
+
- 字段按字典序排列
|
|
92
|
+
- UTF-8 编码
|
|
93
|
+
- 无多余空白、无尾随换行
|
|
94
|
+
- 仅使用上述 4 个字段(`signature` 和 `cert_chain`、`algorithm` **不参与**签名)
|
|
95
|
+
|
|
96
|
+
签名 = `ECDSA-P256-SHA256(sign_payload)`,使用 Agent 证书对应的私钥。
|
|
97
|
+
|
|
98
|
+
> **为什么 `algorithm` 不参与签名**:避免算法字段被篡改导致语义降级攻击——算法选择应在验证方的允许清单中独立校验,不依赖签名文件自述。
|
|
99
|
+
|
|
100
|
+
## 6. 验证流程
|
|
101
|
+
|
|
102
|
+
接收方(人类浏览器插件、agent 客户端、evol IM)**应当**按顺序执行:
|
|
103
|
+
|
|
104
|
+
1. **拉取本体**:`GET /agent.md`(必要)
|
|
105
|
+
2. **拉取签名**:`GET /agent.md.sig`(可选)。失败 → 标记为 `unsigned`,结束
|
|
106
|
+
3. **结构校验**:`agent.md.sig` 是否合法 JSON,字段是否齐全
|
|
107
|
+
4. **AID 一致性**:解析 agent.md 的 YAML frontmatter,校验 `yaml.aid == sig.aid`
|
|
108
|
+
5. **内容哈希**:计算 agent.md 原始字节的 SHA-256,校验 `== sig.content_sha256`
|
|
109
|
+
6. **算法白名单**:`sig.algorithm` 是否在本地允许清单中
|
|
110
|
+
7. **证书链验证**:
|
|
111
|
+
- 按 `cert_chain` 顺序验证 Agent 证书 → Issuer CA → 本地受信 Root CA
|
|
112
|
+
- 校验 Agent 证书的 subject 对应 `sig.aid`
|
|
113
|
+
- 校验证书**未过期**、**未吊销**(CRL/OCSP,与 AUN 证书体系一致)
|
|
114
|
+
8. **签名验证**:重建 `sign_payload`,用 Agent 证书公钥验证 `sig.signature`
|
|
115
|
+
9. **时间戳合理性**(应用层策略):`sig.signed_at` 是否在 Agent 证书有效期内,是否过度陈旧(建议默认 365 天警告)
|
|
116
|
+
|
|
117
|
+
任一步失败 → 标记为 `invalid`(比 `unsigned` 更严重——有签名但验证失败应警示)。
|
|
118
|
+
|
|
119
|
+
## 7. 状态分类
|
|
120
|
+
|
|
121
|
+
| 状态 | 含义 | UI 建议 |
|
|
122
|
+
|------|------|--------|
|
|
123
|
+
| `valid` | 签名存在且验证通过 | 绿色徽章「✓ 已验证」 |
|
|
124
|
+
| `unsigned` | 无签名文件 | 中性,不显示徽章 |
|
|
125
|
+
| `invalid` | 有签名但验证失败 | 红色警示「⚠ 签名无效」 |
|
|
126
|
+
| `expired` | 签名时使用的证书现已过期 | 黄色警示「签名过期」 |
|
|
127
|
+
|
|
128
|
+
## 8. 发布方义务
|
|
129
|
+
|
|
130
|
+
Agent 维护者(AID 所有者)**应当**:
|
|
131
|
+
|
|
132
|
+
1. 在发布或更新 `agent.md` 时**同步更新** `agent.md.sig`
|
|
133
|
+
2. 使用**当前有效**的 Agent 证书私钥签名
|
|
134
|
+
3. 证书换发(rotate)后,在合理时间内(建议 7 天)重新签名所有现存 agent.md
|
|
135
|
+
4. 证书吊销后,**应当**主动撤下该版本 agent.md 或重新签名
|
|
136
|
+
|
|
137
|
+
**不得**:
|
|
138
|
+
|
|
139
|
+
- 使用已吊销或过期的证书签名新发布
|
|
140
|
+
- 将签名私钥交给第三方托管平台(类似身份证原件不得委托)
|
|
141
|
+
|
|
142
|
+
## 9. 发布方不作为的后果
|
|
143
|
+
|
|
144
|
+
`agent.md.sig` 是可选的——**未签名本身不是违规**。但:
|
|
145
|
+
|
|
146
|
+
- 访问方客户端可以选择**只信任已签名的 agent.md**(应用层策略)
|
|
147
|
+
- 依赖 agent.md 做决策的自动化系统(如 agent 发现、能力匹配)**应当**在未签名时降低置信度
|
|
148
|
+
- evol 等 IM 客户端**应当**在 UI 区分已签名/未签名,类似 HTTPS 锁图标
|
|
149
|
+
|
|
150
|
+
## 10. 反模式(明确不做)
|
|
151
|
+
|
|
152
|
+
这些是 service 思维陷阱,**不是**本协议的目标:
|
|
153
|
+
|
|
154
|
+
- ❌ 签名作为访问控制(「只有签名有效才能调用这个 agent」)
|
|
155
|
+
- ❌ 签名绑定内容审核(「签名内容必须通过某审核」)
|
|
156
|
+
- ❌ 强制签名过期频率(签名是事实性的「是我写的」,不是订阅制授权)
|
|
157
|
+
- ❌ 中心化签名服务(签名私钥属于 AID 所有者,不托管)
|
|
158
|
+
- ❌ 签名与 agent 运行时状态挂钩(agent 在线/离线不影响静态签名)
|
|
159
|
+
|
|
160
|
+
## 11. 与现有 AUN 体系的集成
|
|
161
|
+
|
|
162
|
+
- 证书体系:**复用** `docs/protocol/02-证书与信任体系.md` 定义的四级证书链
|
|
163
|
+
- 签名算法:**复用** ECDSA-P256,与 `peer.*` 签名体系一致
|
|
164
|
+
- 证书吊销:**复用** CRL/OCSP 机制
|
|
165
|
+
- 不引入新服务:Issuer / Gateway / Relay 均**无需**改动
|
|
166
|
+
|
|
167
|
+
## 12. 示例
|
|
168
|
+
|
|
169
|
+
**agent.md**(简化示意):
|
|
170
|
+
|
|
171
|
+
```markdown
|
|
172
|
+
---
|
|
173
|
+
aid: "alice.aid.pub"
|
|
174
|
+
name: "Alice"
|
|
175
|
+
type: "assistant"
|
|
176
|
+
version: "1.0.0"
|
|
177
|
+
description: "An example agent"
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
# Skills
|
|
181
|
+
- general conversation
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**agent.md.sig**(对应签名):
|
|
185
|
+
|
|
186
|
+
```json
|
|
187
|
+
{
|
|
188
|
+
"version": "1.0.0",
|
|
189
|
+
"aid": "alice.aid.pub",
|
|
190
|
+
"algorithm": "ECDSA-P256-SHA256",
|
|
191
|
+
"content_sha256": "3kL9_...base64url...XyZ",
|
|
192
|
+
"signed_at": "2026-05-08T10:00:00Z",
|
|
193
|
+
"signature": "MEUCIQC...base64url...gAw",
|
|
194
|
+
"cert_chain": [
|
|
195
|
+
"-----BEGIN CERTIFICATE-----\nMIIBv...\n-----END CERTIFICATE-----",
|
|
196
|
+
"-----BEGIN CERTIFICATE-----\nMIIC3...\n-----END CERTIFICATE-----"
|
|
197
|
+
]
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## 13. 待议事项
|
|
202
|
+
|
|
203
|
+
- 是否支持多签名(多个 AID 共同背书同一个 agent.md)?当前版本不支持
|
|
204
|
+
- 是否定义签名过期后的"续签"流程?当前版本依赖重新签名
|
|
205
|
+
- 是否把签名字段扩展到 agent.md 以外的 Agent Web 资源(如 index.html)?超出本草案范围
|