adp-agent 0.2.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/LICENSE +21 -0
- package/README.md +141 -0
- package/config.example.json +32 -0
- package/dist/agent-id.d.ts +9 -0
- package/dist/agent-id.js +118 -0
- package/dist/agent-id.js.map +1 -0
- package/dist/agent-id.test.d.ts +1 -0
- package/dist/agent-id.test.js +36 -0
- package/dist/agent-id.test.js.map +1 -0
- package/dist/canonical.d.ts +5 -0
- package/dist/canonical.js +35 -0
- package/dist/canonical.js.map +1 -0
- package/dist/canonical.test.d.ts +1 -0
- package/dist/canonical.test.js +33 -0
- package/dist/canonical.test.js.map +1 -0
- package/dist/capability-test.d.ts +1 -0
- package/dist/capability-test.js +108 -0
- package/dist/capability-test.js.map +1 -0
- package/dist/chat.d.ts +1 -0
- package/dist/chat.js +166 -0
- package/dist/chat.js.map +1 -0
- package/dist/contacts-test.d.ts +1 -0
- package/dist/contacts-test.js +225 -0
- package/dist/contacts-test.js.map +1 -0
- package/dist/crypto.d.ts +11 -0
- package/dist/crypto.js +103 -0
- package/dist/crypto.js.map +1 -0
- package/dist/crypto.test.d.ts +1 -0
- package/dist/crypto.test.js +40 -0
- package/dist/crypto.test.js.map +1 -0
- package/dist/discovery.d.ts +36 -0
- package/dist/discovery.js +291 -0
- package/dist/discovery.js.map +1 -0
- package/dist/envelope.d.ts +42 -0
- package/dist/envelope.js +58 -0
- package/dist/envelope.js.map +1 -0
- package/dist/gateway.d.ts +44 -0
- package/dist/gateway.js +255 -0
- package/dist/gateway.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.js +75 -0
- package/dist/index.js.map +1 -0
- package/dist/integration-test.d.ts +1 -0
- package/dist/integration-test.js +206 -0
- package/dist/integration-test.js.map +1 -0
- package/dist/key-store.d.ts +10 -0
- package/dist/key-store.js +81 -0
- package/dist/key-store.js.map +1 -0
- package/dist/manifest.d.ts +35 -0
- package/dist/manifest.js +24 -0
- package/dist/manifest.js.map +1 -0
- package/dist/mdns-test.d.ts +1 -0
- package/dist/mdns-test.js +93 -0
- package/dist/mdns-test.js.map +1 -0
- package/dist/relay-peer-test.d.ts +1 -0
- package/dist/relay-peer-test.js +220 -0
- package/dist/relay-peer-test.js.map +1 -0
- package/dist/relay-test.d.ts +1 -0
- package/dist/relay-test.js +92 -0
- package/dist/relay-test.js.map +1 -0
- package/dist/relay.d.ts +60 -0
- package/dist/relay.js +277 -0
- package/dist/relay.js.map +1 -0
- package/dist/src/agent-id.d.ts +9 -0
- package/dist/src/agent-id.js +44 -0
- package/dist/src/agent-id.js.map +1 -0
- package/dist/src/agent-id.test.d.ts +1 -0
- package/dist/src/agent-id.test.js +36 -0
- package/dist/src/agent-id.test.js.map +1 -0
- package/dist/src/canonical.d.ts +5 -0
- package/dist/src/canonical.js +37 -0
- package/dist/src/canonical.js.map +1 -0
- package/dist/src/canonical.test.d.ts +1 -0
- package/dist/src/canonical.test.js +33 -0
- package/dist/src/canonical.test.js.map +1 -0
- package/dist/src/capabilities.d.ts +3 -0
- package/dist/src/capabilities.js +39 -0
- package/dist/src/capabilities.js.map +1 -0
- package/dist/src/config.d.ts +35 -0
- package/dist/src/config.js +3 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/contacts.d.ts +28 -0
- package/dist/src/contacts.js +118 -0
- package/dist/src/contacts.js.map +1 -0
- package/dist/src/crypto.d.ts +11 -0
- package/dist/src/crypto.js +83 -0
- package/dist/src/crypto.js.map +1 -0
- package/dist/src/crypto.test.d.ts +1 -0
- package/dist/src/crypto.test.js +40 -0
- package/dist/src/crypto.test.js.map +1 -0
- package/dist/src/discovery.d.ts +39 -0
- package/dist/src/discovery.js +317 -0
- package/dist/src/discovery.js.map +1 -0
- package/dist/src/envelope.d.ts +55 -0
- package/dist/src/envelope.js +95 -0
- package/dist/src/envelope.js.map +1 -0
- package/dist/src/gateway.d.ts +78 -0
- package/dist/src/gateway.js +540 -0
- package/dist/src/gateway.js.map +1 -0
- package/dist/src/index.d.ts +22 -0
- package/dist/src/index.js +81 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/key-rotation.d.ts +27 -0
- package/dist/src/key-rotation.js +41 -0
- package/dist/src/key-rotation.js.map +1 -0
- package/dist/src/key-store.d.ts +10 -0
- package/dist/src/key-store.js +81 -0
- package/dist/src/key-store.js.map +1 -0
- package/dist/src/logger.d.ts +9 -0
- package/dist/src/logger.js +18 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/manifest.d.ts +37 -0
- package/dist/src/manifest.js +24 -0
- package/dist/src/manifest.js.map +1 -0
- package/dist/src/mcp-server.d.ts +38 -0
- package/dist/src/mcp-server.js +408 -0
- package/dist/src/mcp-server.js.map +1 -0
- package/dist/src/net-utils.d.ts +3 -0
- package/dist/src/net-utils.js +71 -0
- package/dist/src/net-utils.js.map +1 -0
- package/dist/src/registry/cache.d.ts +12 -0
- package/dist/src/registry/cache.js +45 -0
- package/dist/src/registry/cache.js.map +1 -0
- package/dist/src/registry/client.d.ts +43 -0
- package/dist/src/registry/client.js +245 -0
- package/dist/src/registry/client.js.map +1 -0
- package/dist/src/registry/config.d.ts +32 -0
- package/dist/src/registry/config.js +79 -0
- package/dist/src/registry/config.js.map +1 -0
- package/dist/src/registry/db.d.ts +10 -0
- package/dist/src/registry/db.js +97 -0
- package/dist/src/registry/db.js.map +1 -0
- package/dist/src/registry/index.d.ts +5 -0
- package/dist/src/registry/index.js +22 -0
- package/dist/src/registry/index.js.map +1 -0
- package/dist/src/registry/service.d.ts +45 -0
- package/dist/src/registry/service.js +802 -0
- package/dist/src/registry/service.js.map +1 -0
- package/dist/src/relay.d.ts +69 -0
- package/dist/src/relay.js +399 -0
- package/dist/src/relay.js.map +1 -0
- package/dist/src/task-manager.d.ts +55 -0
- package/dist/src/task-manager.js +150 -0
- package/dist/src/task-manager.js.map +1 -0
- package/dist/src/trust-store.d.ts +24 -0
- package/dist/src/trust-store.js +144 -0
- package/dist/src/trust-store.js.map +1 -0
- package/dist/src/webhook-client.d.ts +30 -0
- package/dist/src/webhook-client.js +78 -0
- package/dist/src/webhook-client.js.map +1 -0
- package/dist/start-mcp.d.ts +2 -0
- package/dist/start-mcp.js +126 -0
- package/dist/start-mcp.js.map +1 -0
- package/dist/start-registry.d.ts +2 -0
- package/dist/start-registry.js +33 -0
- package/dist/start-registry.js.map +1 -0
- package/dist/start-relay.d.ts +1 -0
- package/dist/start-relay.js +35 -0
- package/dist/start-relay.js.map +1 -0
- package/dist/start.d.ts +1 -0
- package/dist/start.js +364 -0
- package/dist/start.js.map +1 -0
- package/dist/task-manager.d.ts +55 -0
- package/dist/task-manager.js +145 -0
- package/dist/task-manager.js.map +1 -0
- package/dist/task-test.d.ts +1 -0
- package/dist/task-test.js +188 -0
- package/dist/task-test.js.map +1 -0
- package/dist/test-auth.d.ts +1 -0
- package/dist/test-auth.js +166 -0
- package/dist/test-auth.js.map +1 -0
- package/dist/test-key-rotation.d.ts +2 -0
- package/dist/test-key-rotation.js +114 -0
- package/dist/test-key-rotation.js.map +1 -0
- package/dist/test-registry.d.ts +2 -0
- package/dist/test-registry.js +123 -0
- package/dist/test-registry.js.map +1 -0
- package/dist/trust-store.d.ts +23 -0
- package/dist/trust-store.js +111 -0
- package/dist/trust-store.js.map +1 -0
- package/package.json +96 -0
- package/schema.sql +54 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ADP Working Group
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<h1>
|
|
3
|
+
<br>
|
|
4
|
+
<br>
|
|
5
|
+
🤖 Agent Discovery Protocol (ADP)
|
|
6
|
+
<br>
|
|
7
|
+
<br>
|
|
8
|
+
</h1>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<div align="center">
|
|
12
|
+
|
|
13
|
+
[](https://www.npmjs.com/package/adp-agent)
|
|
14
|
+
[](https://github.com/mengzhuowei/AgentDiscoveryProtocol/blob/main/LICENSE)
|
|
15
|
+
[](https://www.typescriptlang.org/)
|
|
16
|
+
[](docs/README.md)
|
|
17
|
+
[](https://modelcontextprotocol.io/)
|
|
18
|
+
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
<div align="center">
|
|
22
|
+
<strong>让智能体(Agent)能够互相发现、通信,无需中心化平台</strong>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<br>
|
|
26
|
+
|
|
27
|
+
<div align="center">
|
|
28
|
+
<a href="#-特性">特性</a> •
|
|
29
|
+
<a href="#-快速开始">快速开始</a> •
|
|
30
|
+
<a href="#-安装">安装</a> •
|
|
31
|
+
<a href="#-使用示例">示例</a> •
|
|
32
|
+
<a href="#-架构">架构</a> •
|
|
33
|
+
<a href="#-文档">文档</a>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
<br>
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 特性
|
|
41
|
+
|
|
42
|
+
- **自认证密码学身份** — Agent ID 嵌入 Ed25519 公钥,持有私钥即拥有 ID
|
|
43
|
+
- **去中心化优先** — 局域网 mDNS 零配置发现,Registry/Relay 可选
|
|
44
|
+
- **强制签名验证** — 所有消息 Ed25519 签名
|
|
45
|
+
- **模块化架构** — Gateway、Registry、Relay 独立部署
|
|
46
|
+
- **MCP 兼容** — 直接作为 MCP(Model Context Protocol)服务运行
|
|
47
|
+
- **开箱即用** — TypeScript 完整实现,含示例和测试
|
|
48
|
+
|
|
49
|
+
## 快速开始
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
git clone https://github.com/mengzhuowei/AgentDiscoveryProtocol.git
|
|
53
|
+
cd AgentDiscoveryProtocol
|
|
54
|
+
npm install
|
|
55
|
+
npm start agent1 # 终端 1
|
|
56
|
+
npm start agent2 # 终端 2,自动发现 agent1
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 安装
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npm install adp-agent # 作为库
|
|
63
|
+
npm install -g adp-agent # 全局安装,获得 adp 命令
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## 使用示例
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
import { Gateway, loadOrCreateIdentity } from 'adp-agent';
|
|
70
|
+
|
|
71
|
+
const { identity } = loadOrCreateIdentity('local', 'my-agent', 'My Agent');
|
|
72
|
+
const gateway = new Gateway({
|
|
73
|
+
port: 9900,
|
|
74
|
+
host: '0.0.0.0',
|
|
75
|
+
secretKey: identity.secretKey,
|
|
76
|
+
agentId: identity.agentId,
|
|
77
|
+
displayName: 'My Agent',
|
|
78
|
+
capabilities: ['adp:ping', 'adp:capability.query'],
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
详细的启动参数、配置、MCP Server 集成等见 [USAGE.md](USAGE.md)。
|
|
83
|
+
|
|
84
|
+
## 架构
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
┌───────────────────────────────────┐
|
|
88
|
+
│ 应用层 │
|
|
89
|
+
│ 自定义能力(视频生成、计算等) │
|
|
90
|
+
└──────────────┬────────────────────┘
|
|
91
|
+
│
|
|
92
|
+
┌──────────────▼────────────────────┐
|
|
93
|
+
│ 消息层 │
|
|
94
|
+
│ Envelope + Ed25519 签名 + 任务 │
|
|
95
|
+
└──────────────┬────────────────────┘
|
|
96
|
+
│
|
|
97
|
+
┌──────────────▼────────────────────┐
|
|
98
|
+
│ 传输层 │
|
|
99
|
+
│ WebSocket 直连 ── Relay 中继 │
|
|
100
|
+
└──────────────┬────────────────────┘
|
|
101
|
+
│
|
|
102
|
+
┌──────────────▼────────────────────┐
|
|
103
|
+
│ 发现层 │
|
|
104
|
+
│ mDNS ── Registry 目录(可选) │
|
|
105
|
+
└───────────────────────────────────┘
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## 开发
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
npm test # 核心测试
|
|
112
|
+
npm run test:integration # 集成测试
|
|
113
|
+
npm run relay # 启动 Relay
|
|
114
|
+
npm run registry # 启动 Registry
|
|
115
|
+
npm run build # 编译到 dist/
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 文档
|
|
119
|
+
|
|
120
|
+
| 文档 | 说明 |
|
|
121
|
+
|------|------|
|
|
122
|
+
| [Docker 部署指南](docs/docker.md) | 使用 Docker 部署 |
|
|
123
|
+
| [身份与 Manifest](docs/01-identity.md) | Agent ID、能力声明 |
|
|
124
|
+
| [消息格式](docs/02-message.md) | Envelope、签名、错误码 |
|
|
125
|
+
| [发现机制](docs/03-discovery.md) | mDNS、Registry |
|
|
126
|
+
| [传输层](docs/04-transport.md) | WebSocket、Relay |
|
|
127
|
+
| [安全与信任](docs/05-security.md) | TOFU、签名验证 |
|
|
128
|
+
| [实现检查清单](docs/implementation-checklist.md) | 协议合规性 |
|
|
129
|
+
|
|
130
|
+
## 路线图
|
|
131
|
+
|
|
132
|
+
- [x] **v0.2** — 自认证身份、签名验证、TOFU
|
|
133
|
+
- [x] **Registry** — 中心化目录服务
|
|
134
|
+
- [x] **MCP 集成** — 作为 MCP 服务运行
|
|
135
|
+
- [ ] **任务委派** — 跨 Agent 任务调度
|
|
136
|
+
- [ ] **端到端加密** — 可选 E2EE
|
|
137
|
+
- [ ] **更多语言实现** — Python、Rust
|
|
138
|
+
|
|
139
|
+
## 许可证
|
|
140
|
+
|
|
141
|
+
MIT © [ADP Working Group](https://github.com/mengzhuowei/AgentDiscoveryProtocol)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"port": 3000,
|
|
3
|
+
"host": "0.0.0.0",
|
|
4
|
+
"mysql": {
|
|
5
|
+
"host": "127.0.0.1",
|
|
6
|
+
"port": 3306,
|
|
7
|
+
"user": "root",
|
|
8
|
+
"password": "your-password",
|
|
9
|
+
"database": "adp_registry"
|
|
10
|
+
},
|
|
11
|
+
"redis": {
|
|
12
|
+
"host": "127.0.0.1",
|
|
13
|
+
"port": 6379
|
|
14
|
+
},
|
|
15
|
+
"registration": {
|
|
16
|
+
"ttlSeconds": 86400,
|
|
17
|
+
"maxAgents": 10000
|
|
18
|
+
},
|
|
19
|
+
"token": {
|
|
20
|
+
"enabled": false,
|
|
21
|
+
"tokens": {
|
|
22
|
+
"your-secret-token": {
|
|
23
|
+
"namespace": "home.io",
|
|
24
|
+
"capabilities": ["read", "write"]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"cors": {
|
|
29
|
+
"enabled": false,
|
|
30
|
+
"origins": ["*"]
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface ParsedAgentId {
|
|
2
|
+
publicKey: Uint8Array;
|
|
3
|
+
namespace: string;
|
|
4
|
+
agentName: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function parseAgentId(agentId: string): ParsedAgentId;
|
|
7
|
+
export declare function buildAgentId(publicKey: Uint8Array, namespace: string, agentName: string): string;
|
|
8
|
+
export declare function extractPublicKey(agentId: string): Uint8Array;
|
|
9
|
+
export declare function extractVisualCode(publicKey: Uint8Array): string;
|
package/dist/agent-id.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseAgentId = parseAgentId;
|
|
4
|
+
exports.buildAgentId = buildAgentId;
|
|
5
|
+
exports.extractPublicKey = extractPublicKey;
|
|
6
|
+
exports.extractVisualCode = extractVisualCode;
|
|
7
|
+
const crypto_1 = require("./crypto");
|
|
8
|
+
function parseAgentId(agentId) {
|
|
9
|
+
const match = agentId.match(/^adp:\/\/([^@]+)@([^/]+)\/(.+)$/);
|
|
10
|
+
if (!match) {
|
|
11
|
+
throw new Error('Invalid Agent ID format');
|
|
12
|
+
}
|
|
13
|
+
const [, pubkeyB64URL, namespace, agentName] = match;
|
|
14
|
+
if (pubkeyB64URL.length !== 43) {
|
|
15
|
+
throw new Error('Invalid public key length: must be 43 characters');
|
|
16
|
+
}
|
|
17
|
+
const publicKey = (0, crypto_1.decodeBase64URL)(pubkeyB64URL);
|
|
18
|
+
if (publicKey.length !== 32) {
|
|
19
|
+
throw new Error('Invalid public key: must decode to 32 bytes');
|
|
20
|
+
}
|
|
21
|
+
if (!/^[a-z0-9.-]+$/.test(namespace)) {
|
|
22
|
+
throw new Error('Invalid namespace: must be lowercase letters, digits, dots, and hyphens');
|
|
23
|
+
}
|
|
24
|
+
if (!/^[a-z0-9_-]{1,32}$/.test(agentName)) {
|
|
25
|
+
throw new Error('Invalid agent name: must be lowercase letters, digits, underscores, and hyphens, max 32 characters');
|
|
26
|
+
}
|
|
27
|
+
return { publicKey, namespace, agentName };
|
|
28
|
+
}
|
|
29
|
+
function buildAgentId(publicKey, namespace, agentName) {
|
|
30
|
+
if (publicKey.length !== 32) {
|
|
31
|
+
throw new Error('Public key must be 32 bytes');
|
|
32
|
+
}
|
|
33
|
+
const pubkeyB64URL = (0, crypto_1.encodeBase64URL)(publicKey);
|
|
34
|
+
return `adp://${pubkeyB64URL}@${namespace}/${agentName}`;
|
|
35
|
+
}
|
|
36
|
+
function extractPublicKey(agentId) {
|
|
37
|
+
return parseAgentId(agentId).publicKey;
|
|
38
|
+
}
|
|
39
|
+
function extractVisualCode(publicKey) {
|
|
40
|
+
const hash = blake2b(publicKey, 6);
|
|
41
|
+
return (0, crypto_1.encodeBase64URL)(hash);
|
|
42
|
+
}
|
|
43
|
+
function blake2b(data, outputBytes) {
|
|
44
|
+
const result = new Uint8Array(outputBytes);
|
|
45
|
+
const blockSize = 64;
|
|
46
|
+
const key = new Uint8Array(0);
|
|
47
|
+
const h = new Uint32Array([
|
|
48
|
+
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
|
|
49
|
+
0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,
|
|
50
|
+
]);
|
|
51
|
+
const sigma = [
|
|
52
|
+
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
|
53
|
+
14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,
|
|
54
|
+
11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,
|
|
55
|
+
7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,
|
|
56
|
+
9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,
|
|
57
|
+
2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,
|
|
58
|
+
12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,
|
|
59
|
+
13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,
|
|
60
|
+
6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,
|
|
61
|
+
10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,
|
|
62
|
+
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
|
63
|
+
14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,
|
|
64
|
+
];
|
|
65
|
+
const dataLength = data.length;
|
|
66
|
+
const blocks = Math.ceil((dataLength + key.length) / blockSize);
|
|
67
|
+
for (let blockIdx = 0; blockIdx < blocks; blockIdx++) {
|
|
68
|
+
const block = new Uint8Array(blockSize);
|
|
69
|
+
const offset = blockIdx * blockSize;
|
|
70
|
+
for (let i = 0; i < blockSize; i++) {
|
|
71
|
+
const dataIdx = offset - key.length + i;
|
|
72
|
+
if (dataIdx >= 0 && dataIdx < dataLength) {
|
|
73
|
+
block[i] = data[dataIdx];
|
|
74
|
+
}
|
|
75
|
+
else if (dataIdx < 0 && i < key.length) {
|
|
76
|
+
block[i] = key[i];
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
block[i] = 0;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const m = new Uint32Array(16);
|
|
83
|
+
for (let i = 0; i < 16; i++) {
|
|
84
|
+
m[i] = (block[i * 4 + 3] << 24) | (block[i * 4 + 2] << 16) | (block[i * 4 + 1] << 8) | block[i * 4];
|
|
85
|
+
}
|
|
86
|
+
const v = new Uint32Array(16);
|
|
87
|
+
for (let i = 0; i < 8; i++) {
|
|
88
|
+
v[i] = h[i];
|
|
89
|
+
v[i + 8] = 0xffffffff;
|
|
90
|
+
}
|
|
91
|
+
for (let round = 0; round < 12; round++) {
|
|
92
|
+
const s = sigma.slice(round * 16, (round + 1) * 16);
|
|
93
|
+
for (let i = 0; i < 16; i += 2) {
|
|
94
|
+
const a = s[i];
|
|
95
|
+
const b = s[i + 1];
|
|
96
|
+
v[a] = v[a] + v[b] + m[a];
|
|
97
|
+
v[b] = rot64(v[b] ^ v[a], 32);
|
|
98
|
+
v[a] = rot64(v[a], 24);
|
|
99
|
+
v[a] = v[a] + v[b];
|
|
100
|
+
v[b] = rot64(v[b] ^ v[a], 16);
|
|
101
|
+
v[a] = rot64(v[a], 63);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
for (let i = 0; i < 8; i++) {
|
|
105
|
+
h[i] = h[i] ^ v[i] ^ v[i + 8];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
for (let i = 0; i < outputBytes; i++) {
|
|
109
|
+
const idx = i >> 2;
|
|
110
|
+
const shift = (i & 3) * 8;
|
|
111
|
+
result[i] = (h[idx] >> shift) & 0xff;
|
|
112
|
+
}
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
function rot64(x, n) {
|
|
116
|
+
return ((x << n) | (x >>> (32 - n))) >>> 0;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=agent-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-id.js","sourceRoot":"","sources":["../src/agent-id.ts"],"names":[],"mappings":"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AAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QACpD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QACpD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QACpD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QACpD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;QACpD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACrD,CAAC;IAEF,MAAM,UAAU,GAAG,IAA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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const agent_id_1 = require("./agent-id");
|
|
4
|
+
const crypto_1 = require("./crypto");
|
|
5
|
+
describe('Agent ID', () => {
|
|
6
|
+
it('should parse valid agent ID', () => {
|
|
7
|
+
const keypair = (0, crypto_1.generateKeyPair)();
|
|
8
|
+
const pubkeyB64URL = (0, crypto_1.encodeBase64URL)(keypair.publicKey);
|
|
9
|
+
const agentId = `adp://${pubkeyB64URL}@home.io/claude`;
|
|
10
|
+
const parsed = (0, agent_id_1.parseAgentId)(agentId);
|
|
11
|
+
expect(parsed.publicKey).toEqual(keypair.publicKey);
|
|
12
|
+
expect(parsed.namespace).toBe('home.io');
|
|
13
|
+
expect(parsed.agentName).toBe('claude');
|
|
14
|
+
});
|
|
15
|
+
it('should build agent ID from parts', () => {
|
|
16
|
+
const keypair = (0, crypto_1.generateKeyPair)();
|
|
17
|
+
const namespace = 'example.com';
|
|
18
|
+
const agentName = 'hermes';
|
|
19
|
+
const agentId = (0, agent_id_1.buildAgentId)(keypair.publicKey, namespace, agentName);
|
|
20
|
+
expect(agentId).toMatch(/^adp:\/\/[A-Za-z0-9_-]{43}@example\.com\/hermes$/);
|
|
21
|
+
const parsed = (0, agent_id_1.parseAgentId)(agentId);
|
|
22
|
+
expect(parsed.publicKey).toEqual(keypair.publicKey);
|
|
23
|
+
});
|
|
24
|
+
it('should extract public key from agent ID', () => {
|
|
25
|
+
const keypair = (0, crypto_1.generateKeyPair)();
|
|
26
|
+
const agentId = (0, agent_id_1.buildAgentId)(keypair.publicKey, 'test.io', 'agent');
|
|
27
|
+
const extracted = (0, agent_id_1.extractPublicKey)(agentId);
|
|
28
|
+
expect(extracted).toEqual(keypair.publicKey);
|
|
29
|
+
});
|
|
30
|
+
it('should reject invalid agent ID', () => {
|
|
31
|
+
expect(() => (0, agent_id_1.parseAgentId)('invalid')).toThrow();
|
|
32
|
+
expect(() => (0, agent_id_1.parseAgentId)('adp://short@home.io/agent')).toThrow();
|
|
33
|
+
expect(() => (0, agent_id_1.parseAgentId)('adp://mLq3x9Z1KfR7tNwP2bVsQ8cJ5hG4mF6aY0dL3kX1yZIB@invalid domain/agent')).toThrow();
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=agent-id.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-id.test.js","sourceRoot":"","sources":["../src/agent-id.test.ts"],"names":[],"mappings":";;AAAA,yCAA0E;AAC1E,qCAA4D;AAE5D,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,OAAO,GAAG,IAAA,wBAAe,GAAE,CAAC;QAClC,MAAM,YAAY,GAAG,IAAA,wBAAe,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,SAAS,YAAY,iBAAiB,CAAC;QAEvD,MAAM,MAAM,GAAG,IAAA,uBAAY,EAAC,OAAO,CAAC,CAAC;QAErC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,OAAO,GAAG,IAAA,wBAAe,GAAE,CAAC;QAClC,MAAM,SAAS,GAAG,aAAa,CAAC;QAChC,MAAM,SAAS,GAAG,QAAQ,CAAC;QAE3B,MAAM,OAAO,GAAG,IAAA,uBAAY,EAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAEtE,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC;QAE5E,MAAM,MAAM,GAAG,IAAA,uBAAY,EAAC,OAAO,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,OAAO,GAAG,IAAA,wBAAe,GAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAA,uBAAY,EAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAEpE,MAAM,SAAS,GAAG,IAAA,2BAAgB,EAAC,OAAO,CAAC,CAAC;QAE5C,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,uBAAY,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAChD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,uBAAY,EAAC,2BAA2B,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAClE,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,uBAAY,EAAC,yEAAyE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAClH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.canonicalize = canonicalize;
|
|
4
|
+
exports.testVectors = testVectors;
|
|
5
|
+
function sortObjectKeys(obj) {
|
|
6
|
+
if (Array.isArray(obj)) {
|
|
7
|
+
return obj.map(sortObjectKeys);
|
|
8
|
+
}
|
|
9
|
+
if (obj && typeof obj === 'object' && obj !== null) {
|
|
10
|
+
const sorted = {};
|
|
11
|
+
const keys = Object.keys(obj).sort((a, b) => a.localeCompare(b, 'en', { sensitivity: 'base' }));
|
|
12
|
+
for (const key of keys) {
|
|
13
|
+
const value = obj[key];
|
|
14
|
+
if (value !== undefined) {
|
|
15
|
+
sorted[key] = sortObjectKeys(value);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return sorted;
|
|
19
|
+
}
|
|
20
|
+
return obj;
|
|
21
|
+
}
|
|
22
|
+
function canonicalize(obj) {
|
|
23
|
+
const sorted = sortObjectKeys(obj);
|
|
24
|
+
return JSON.stringify(sorted);
|
|
25
|
+
}
|
|
26
|
+
function testVectors() {
|
|
27
|
+
return [
|
|
28
|
+
{ input: { b: 2, a: 1 }, expected: '{"a":1,"b":2}' },
|
|
29
|
+
{ input: { z: { b: 2, a: 1 }, a: 1 }, expected: '{"a":1,"z":{"a":1,"b":2}}' },
|
|
30
|
+
{ input: [3, 1, 2], expected: '[3,1,2]' },
|
|
31
|
+
{ input: { key: 'value\nwith"quotes' }, expected: '{"key":"value\\nwith\\"quotes"}' },
|
|
32
|
+
{ input: { a: 1, b: null, c: 3 }, expected: '{"a":1,"b":null,"c":3}' },
|
|
33
|
+
];
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=canonical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":";;AAoBA,oCAGC;AAED,kCAQC;AAjCD,SAAS,cAAc,CAAC,GAAY;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACnD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAA8B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACrE,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAClD,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAI,GAA+B,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,YAAY,CAAC,GAAY;IACvC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,WAAW;IACzB,OAAO;QACL,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;QACpD,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,2BAA2B,EAAE;QAC7E,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE;QACzC,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,oBAAoB,EAAE,EAAE,QAAQ,EAAE,iCAAiC,EAAE;QACrF,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,wBAAwB,EAAE;KACvE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const canonical_1 = require("./canonical");
|
|
4
|
+
describe('Canonical JSON', () => {
|
|
5
|
+
it('should pass all test vectors', () => {
|
|
6
|
+
const vectors = (0, canonical_1.testVectors)();
|
|
7
|
+
for (const { input, expected } of vectors) {
|
|
8
|
+
const result = (0, canonical_1.canonicalize)(input);
|
|
9
|
+
expect(result).toBe(expected);
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
it('should sort object keys', () => {
|
|
13
|
+
const input = { z: 1, a: 2, m: 3 };
|
|
14
|
+
const result = (0, canonical_1.canonicalize)(input);
|
|
15
|
+
expect(result).toBe('{"a":2,"m":3,"z":1}');
|
|
16
|
+
});
|
|
17
|
+
it('should preserve array order', () => {
|
|
18
|
+
const input = { arr: [3, 1, 2] };
|
|
19
|
+
const result = (0, canonical_1.canonicalize)(input);
|
|
20
|
+
expect(result).toBe('{"arr":[3,1,2]}');
|
|
21
|
+
});
|
|
22
|
+
it('should handle nested objects', () => {
|
|
23
|
+
const input = { outer: { b: 2, a: 1 }, top: 0 };
|
|
24
|
+
const result = (0, canonical_1.canonicalize)(input);
|
|
25
|
+
expect(result).toBe('{"outer":{"a":1,"b":2},"top":0}');
|
|
26
|
+
});
|
|
27
|
+
it('should skip undefined values', () => {
|
|
28
|
+
const input = { a: 1, b: undefined, c: 3 };
|
|
29
|
+
const result = (0, canonical_1.canonicalize)(input);
|
|
30
|
+
expect(result).toBe('{"a":1,"c":3}');
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=canonical.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.test.js","sourceRoot":"","sources":["../src/canonical.test.ts"],"names":[],"mappings":";;AAAA,2CAAwD;AAExD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,OAAO,GAAG,IAAA,uBAAW,GAAE,CAAC;QAE9B,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,OAAO,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,IAAA,wBAAY,EAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,IAAA,wBAAY,EAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAAA,wBAAY,EAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,IAAA,wBAAY,EAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAA4C,CAAC;QACrF,MAAM,MAAM,GAAG,IAAA,wBAAY,EAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const src_1 = require("./src");
|
|
4
|
+
const crypto_1 = require("./src/crypto");
|
|
5
|
+
const agent_id_1 = require("./src/agent-id");
|
|
6
|
+
const crypto_2 = require("./src/crypto");
|
|
7
|
+
const canonical_1 = require("./src/canonical");
|
|
8
|
+
const envelope_1 = require("./src/envelope");
|
|
9
|
+
const src_2 = require("./src");
|
|
10
|
+
const capabilities_1 = require("./src/capabilities");
|
|
11
|
+
async function run() {
|
|
12
|
+
console.log('═══════════════════════════════════════');
|
|
13
|
+
console.log(' ADP — 自定义 Capability 测试');
|
|
14
|
+
console.log('═══════════════════════════════════════\n');
|
|
15
|
+
const PORT_A = 9870;
|
|
16
|
+
const PORT_B = 9871;
|
|
17
|
+
const kpA = (0, crypto_1.generateKeyPair)();
|
|
18
|
+
const agentAId = (0, agent_id_1.buildAgentId)(kpA.publicKey, 'test.local', 'agenta');
|
|
19
|
+
console.log(`🔑 Agent A: ${agentAId.slice(0, 50)}...`);
|
|
20
|
+
const kpB = (0, crypto_1.generateKeyPair)();
|
|
21
|
+
const agentBId = (0, agent_id_1.buildAgentId)(kpB.publicKey, 'test.local', 'agentb');
|
|
22
|
+
console.log(`🔑 Agent B: ${agentBId.slice(0, 50)}...\n`);
|
|
23
|
+
let echoResult = null;
|
|
24
|
+
let chatResult = null;
|
|
25
|
+
const gA = new src_1.Gateway({
|
|
26
|
+
port: PORT_A, host: 'localhost',
|
|
27
|
+
secretKey: kpA.secretKey, agentId: agentAId,
|
|
28
|
+
displayName: 'Agent A', capabilities: [...src_2.STANDARD_CAPABILITIES],
|
|
29
|
+
skipVerification: false,
|
|
30
|
+
});
|
|
31
|
+
gA.registerCapability('custom:echo', (0, capabilities_1.createEchoHandler)(agentAId, kpA.secretKey));
|
|
32
|
+
gA.registerCapability('custom:chat', (0, capabilities_1.createChatHandler)(agentAId, kpA.secretKey));
|
|
33
|
+
const gB = new src_1.Gateway({
|
|
34
|
+
port: PORT_B, host: 'localhost',
|
|
35
|
+
secretKey: kpB.secretKey, agentId: agentBId,
|
|
36
|
+
displayName: 'Agent B', capabilities: [...src_2.STANDARD_CAPABILITIES],
|
|
37
|
+
skipVerification: false,
|
|
38
|
+
});
|
|
39
|
+
await sleep(300);
|
|
40
|
+
console.log('--- Test 1: custom:echo (Agent B → Agent A) ---\n');
|
|
41
|
+
const ws = await (0, src_1.connectToAgent)(agentAId, `localhost:${PORT_A}`, agentBId);
|
|
42
|
+
console.log('✅ Agent B connected to A\n');
|
|
43
|
+
ws.on('message', (raw) => {
|
|
44
|
+
const env = JSON.parse(raw.toString());
|
|
45
|
+
if (env.action === 'custom:echo') {
|
|
46
|
+
echoResult = env.params;
|
|
47
|
+
}
|
|
48
|
+
if (env.action === 'custom:chat') {
|
|
49
|
+
chatResult = env.params;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
console.log('📤 Agent B → Agent A: custom:echo { word: "hello" }');
|
|
53
|
+
ws.send(JSON.stringify((0, crypto_2.signEnvelope)({
|
|
54
|
+
protocol: 'adp/0.2', id: (0, envelope_1.generateMessageId)(),
|
|
55
|
+
from: agentBId, to: agentAId,
|
|
56
|
+
action: 'custom:echo',
|
|
57
|
+
params: { word: 'hello' },
|
|
58
|
+
timestamp: new Date().toISOString(),
|
|
59
|
+
}, kpB.secretKey, canonical_1.canonicalize)));
|
|
60
|
+
await sleep(800);
|
|
61
|
+
console.log(`📩 Agent B received echo: ${JSON.stringify(echoResult)}`);
|
|
62
|
+
const echoPass = echoResult && echoResult.word === 'hello';
|
|
63
|
+
console.log(` ${echoPass ? '✅ PASS' : '❌ FAIL — expected {word:"hello"}'}\n`);
|
|
64
|
+
console.log('--- Test 2: custom:chat (Agent B → Agent A) ---\n');
|
|
65
|
+
console.log('📤 Agent B → Agent A: custom:chat { text: "你好" }');
|
|
66
|
+
ws.send(JSON.stringify((0, crypto_2.signEnvelope)({
|
|
67
|
+
protocol: 'adp/0.2', id: (0, envelope_1.generateMessageId)(),
|
|
68
|
+
from: agentBId, to: agentAId,
|
|
69
|
+
action: 'custom:chat',
|
|
70
|
+
params: { text: '你好' },
|
|
71
|
+
timestamp: new Date().toISOString(),
|
|
72
|
+
}, kpB.secretKey, canonical_1.canonicalize)));
|
|
73
|
+
await sleep(800);
|
|
74
|
+
console.log(`📩 Agent B received chat ACK: ${JSON.stringify(chatResult)}`);
|
|
75
|
+
const chatPass = chatResult && chatResult.ok === true;
|
|
76
|
+
console.log(` ${chatPass ? '✅ PASS' : '❌ FAIL — expected {ok:true}'}\n`);
|
|
77
|
+
console.log('--- Test 3: UNKNOWN_ACTION rejected ---\n');
|
|
78
|
+
echoResult = null;
|
|
79
|
+
ws.send(JSON.stringify((0, crypto_2.signEnvelope)({
|
|
80
|
+
protocol: 'adp/0.2', id: (0, envelope_1.generateMessageId)(),
|
|
81
|
+
from: agentBId, to: agentAId,
|
|
82
|
+
action: 'custom:nonexistent',
|
|
83
|
+
params: {},
|
|
84
|
+
timestamp: new Date().toISOString(),
|
|
85
|
+
}, kpB.secretKey, canonical_1.canonicalize)));
|
|
86
|
+
await sleep(800);
|
|
87
|
+
console.log(` Agent B saw echo: ${echoResult === null ? 'no (correctly rejected)' : 'yes (UNEXPECTED)'}`);
|
|
88
|
+
console.log('\n═══════════════════════════════════════');
|
|
89
|
+
if (echoPass && chatPass) {
|
|
90
|
+
console.log(' ✅ 自定义 Capability 测试全部通过!');
|
|
91
|
+
console.log(' ✅ custom:echo — 原样返回');
|
|
92
|
+
console.log(' ✅ custom:chat — ACK ok');
|
|
93
|
+
console.log(' ✅ UNKNOWN_ACTION — 正确拒绝');
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
console.log(' ❌ 部分测试失败');
|
|
97
|
+
}
|
|
98
|
+
console.log('═══════════════════════════════════════\n');
|
|
99
|
+
ws.close();
|
|
100
|
+
gA.close();
|
|
101
|
+
gB.close();
|
|
102
|
+
process.exit(0);
|
|
103
|
+
}
|
|
104
|
+
function sleep(ms) {
|
|
105
|
+
return new Promise(r => setTimeout(r, ms));
|
|
106
|
+
}
|
|
107
|
+
run().catch(err => { console.error('❌', err); process.exit(1); });
|
|
108
|
+
//# sourceMappingURL=capability-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-test.js","sourceRoot":"","sources":["../capability-test.ts"],"names":[],"mappings":"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"}
|
package/dist/chat.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|