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.
Files changed (182) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +141 -0
  3. package/config.example.json +32 -0
  4. package/dist/agent-id.d.ts +9 -0
  5. package/dist/agent-id.js +118 -0
  6. package/dist/agent-id.js.map +1 -0
  7. package/dist/agent-id.test.d.ts +1 -0
  8. package/dist/agent-id.test.js +36 -0
  9. package/dist/agent-id.test.js.map +1 -0
  10. package/dist/canonical.d.ts +5 -0
  11. package/dist/canonical.js +35 -0
  12. package/dist/canonical.js.map +1 -0
  13. package/dist/canonical.test.d.ts +1 -0
  14. package/dist/canonical.test.js +33 -0
  15. package/dist/canonical.test.js.map +1 -0
  16. package/dist/capability-test.d.ts +1 -0
  17. package/dist/capability-test.js +108 -0
  18. package/dist/capability-test.js.map +1 -0
  19. package/dist/chat.d.ts +1 -0
  20. package/dist/chat.js +166 -0
  21. package/dist/chat.js.map +1 -0
  22. package/dist/contacts-test.d.ts +1 -0
  23. package/dist/contacts-test.js +225 -0
  24. package/dist/contacts-test.js.map +1 -0
  25. package/dist/crypto.d.ts +11 -0
  26. package/dist/crypto.js +103 -0
  27. package/dist/crypto.js.map +1 -0
  28. package/dist/crypto.test.d.ts +1 -0
  29. package/dist/crypto.test.js +40 -0
  30. package/dist/crypto.test.js.map +1 -0
  31. package/dist/discovery.d.ts +36 -0
  32. package/dist/discovery.js +291 -0
  33. package/dist/discovery.js.map +1 -0
  34. package/dist/envelope.d.ts +42 -0
  35. package/dist/envelope.js +58 -0
  36. package/dist/envelope.js.map +1 -0
  37. package/dist/gateway.d.ts +44 -0
  38. package/dist/gateway.js +255 -0
  39. package/dist/gateway.js.map +1 -0
  40. package/dist/index.d.ts +33 -0
  41. package/dist/index.js +75 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/integration-test.d.ts +1 -0
  44. package/dist/integration-test.js +206 -0
  45. package/dist/integration-test.js.map +1 -0
  46. package/dist/key-store.d.ts +10 -0
  47. package/dist/key-store.js +81 -0
  48. package/dist/key-store.js.map +1 -0
  49. package/dist/manifest.d.ts +35 -0
  50. package/dist/manifest.js +24 -0
  51. package/dist/manifest.js.map +1 -0
  52. package/dist/mdns-test.d.ts +1 -0
  53. package/dist/mdns-test.js +93 -0
  54. package/dist/mdns-test.js.map +1 -0
  55. package/dist/relay-peer-test.d.ts +1 -0
  56. package/dist/relay-peer-test.js +220 -0
  57. package/dist/relay-peer-test.js.map +1 -0
  58. package/dist/relay-test.d.ts +1 -0
  59. package/dist/relay-test.js +92 -0
  60. package/dist/relay-test.js.map +1 -0
  61. package/dist/relay.d.ts +60 -0
  62. package/dist/relay.js +277 -0
  63. package/dist/relay.js.map +1 -0
  64. package/dist/src/agent-id.d.ts +9 -0
  65. package/dist/src/agent-id.js +44 -0
  66. package/dist/src/agent-id.js.map +1 -0
  67. package/dist/src/agent-id.test.d.ts +1 -0
  68. package/dist/src/agent-id.test.js +36 -0
  69. package/dist/src/agent-id.test.js.map +1 -0
  70. package/dist/src/canonical.d.ts +5 -0
  71. package/dist/src/canonical.js +37 -0
  72. package/dist/src/canonical.js.map +1 -0
  73. package/dist/src/canonical.test.d.ts +1 -0
  74. package/dist/src/canonical.test.js +33 -0
  75. package/dist/src/canonical.test.js.map +1 -0
  76. package/dist/src/capabilities.d.ts +3 -0
  77. package/dist/src/capabilities.js +39 -0
  78. package/dist/src/capabilities.js.map +1 -0
  79. package/dist/src/config.d.ts +35 -0
  80. package/dist/src/config.js +3 -0
  81. package/dist/src/config.js.map +1 -0
  82. package/dist/src/contacts.d.ts +28 -0
  83. package/dist/src/contacts.js +118 -0
  84. package/dist/src/contacts.js.map +1 -0
  85. package/dist/src/crypto.d.ts +11 -0
  86. package/dist/src/crypto.js +83 -0
  87. package/dist/src/crypto.js.map +1 -0
  88. package/dist/src/crypto.test.d.ts +1 -0
  89. package/dist/src/crypto.test.js +40 -0
  90. package/dist/src/crypto.test.js.map +1 -0
  91. package/dist/src/discovery.d.ts +39 -0
  92. package/dist/src/discovery.js +317 -0
  93. package/dist/src/discovery.js.map +1 -0
  94. package/dist/src/envelope.d.ts +55 -0
  95. package/dist/src/envelope.js +95 -0
  96. package/dist/src/envelope.js.map +1 -0
  97. package/dist/src/gateway.d.ts +78 -0
  98. package/dist/src/gateway.js +540 -0
  99. package/dist/src/gateway.js.map +1 -0
  100. package/dist/src/index.d.ts +22 -0
  101. package/dist/src/index.js +81 -0
  102. package/dist/src/index.js.map +1 -0
  103. package/dist/src/key-rotation.d.ts +27 -0
  104. package/dist/src/key-rotation.js +41 -0
  105. package/dist/src/key-rotation.js.map +1 -0
  106. package/dist/src/key-store.d.ts +10 -0
  107. package/dist/src/key-store.js +81 -0
  108. package/dist/src/key-store.js.map +1 -0
  109. package/dist/src/logger.d.ts +9 -0
  110. package/dist/src/logger.js +18 -0
  111. package/dist/src/logger.js.map +1 -0
  112. package/dist/src/manifest.d.ts +37 -0
  113. package/dist/src/manifest.js +24 -0
  114. package/dist/src/manifest.js.map +1 -0
  115. package/dist/src/mcp-server.d.ts +38 -0
  116. package/dist/src/mcp-server.js +408 -0
  117. package/dist/src/mcp-server.js.map +1 -0
  118. package/dist/src/net-utils.d.ts +3 -0
  119. package/dist/src/net-utils.js +71 -0
  120. package/dist/src/net-utils.js.map +1 -0
  121. package/dist/src/registry/cache.d.ts +12 -0
  122. package/dist/src/registry/cache.js +45 -0
  123. package/dist/src/registry/cache.js.map +1 -0
  124. package/dist/src/registry/client.d.ts +43 -0
  125. package/dist/src/registry/client.js +245 -0
  126. package/dist/src/registry/client.js.map +1 -0
  127. package/dist/src/registry/config.d.ts +32 -0
  128. package/dist/src/registry/config.js +79 -0
  129. package/dist/src/registry/config.js.map +1 -0
  130. package/dist/src/registry/db.d.ts +10 -0
  131. package/dist/src/registry/db.js +97 -0
  132. package/dist/src/registry/db.js.map +1 -0
  133. package/dist/src/registry/index.d.ts +5 -0
  134. package/dist/src/registry/index.js +22 -0
  135. package/dist/src/registry/index.js.map +1 -0
  136. package/dist/src/registry/service.d.ts +45 -0
  137. package/dist/src/registry/service.js +802 -0
  138. package/dist/src/registry/service.js.map +1 -0
  139. package/dist/src/relay.d.ts +69 -0
  140. package/dist/src/relay.js +399 -0
  141. package/dist/src/relay.js.map +1 -0
  142. package/dist/src/task-manager.d.ts +55 -0
  143. package/dist/src/task-manager.js +150 -0
  144. package/dist/src/task-manager.js.map +1 -0
  145. package/dist/src/trust-store.d.ts +24 -0
  146. package/dist/src/trust-store.js +144 -0
  147. package/dist/src/trust-store.js.map +1 -0
  148. package/dist/src/webhook-client.d.ts +30 -0
  149. package/dist/src/webhook-client.js +78 -0
  150. package/dist/src/webhook-client.js.map +1 -0
  151. package/dist/start-mcp.d.ts +2 -0
  152. package/dist/start-mcp.js +126 -0
  153. package/dist/start-mcp.js.map +1 -0
  154. package/dist/start-registry.d.ts +2 -0
  155. package/dist/start-registry.js +33 -0
  156. package/dist/start-registry.js.map +1 -0
  157. package/dist/start-relay.d.ts +1 -0
  158. package/dist/start-relay.js +35 -0
  159. package/dist/start-relay.js.map +1 -0
  160. package/dist/start.d.ts +1 -0
  161. package/dist/start.js +364 -0
  162. package/dist/start.js.map +1 -0
  163. package/dist/task-manager.d.ts +55 -0
  164. package/dist/task-manager.js +145 -0
  165. package/dist/task-manager.js.map +1 -0
  166. package/dist/task-test.d.ts +1 -0
  167. package/dist/task-test.js +188 -0
  168. package/dist/task-test.js.map +1 -0
  169. package/dist/test-auth.d.ts +1 -0
  170. package/dist/test-auth.js +166 -0
  171. package/dist/test-auth.js.map +1 -0
  172. package/dist/test-key-rotation.d.ts +2 -0
  173. package/dist/test-key-rotation.js +114 -0
  174. package/dist/test-key-rotation.js.map +1 -0
  175. package/dist/test-registry.d.ts +2 -0
  176. package/dist/test-registry.js +123 -0
  177. package/dist/test-registry.js.map +1 -0
  178. package/dist/trust-store.d.ts +23 -0
  179. package/dist/trust-store.js +111 -0
  180. package/dist/trust-store.js.map +1 -0
  181. package/package.json +96 -0
  182. 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
+ [![npm version](https://img.shields.io/npm/v/adp-agent.svg?style=flat-square)](https://www.npmjs.com/package/adp-agent)
14
+ [![GitHub license](https://img.shields.io/github/license/mengzhuowei/AgentDiscoveryProtocol.svg?style=flat-square)](https://github.com/mengzhuowei/AgentDiscoveryProtocol/blob/main/LICENSE)
15
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.4%2B-blue.svg?style=flat-square)](https://www.typescriptlang.org/)
16
+ [![protocol version](https://img.shields.io/badge/protocol-adp%2F0.2-orange.svg?style=flat-square)](docs/README.md)
17
+ [![MCP Compatible](https://img.shields.io/badge/MCP-compatible-green.svg?style=flat-square)](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;
@@ -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,5 @@
1
+ export declare function canonicalize(obj: unknown): string;
2
+ export declare function testVectors(): {
3
+ input: unknown;
4
+ expected: string;
5
+ }[];
@@ -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 {};