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
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.loadOrCreateIdentity = loadOrCreateIdentity;
37
+ exports.loadIdentity = loadIdentity;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const crypto_1 = require("./crypto");
41
+ const agent_id_1 = require("./agent-id");
42
+ const KEYS_DIR = process.env.ADP_KEY_DIR
43
+ || path.join(process.cwd(), '.adp', 'keys');
44
+ function ensureDir(dir) {
45
+ if (!fs.existsSync(dir)) {
46
+ fs.mkdirSync(dir, { recursive: true });
47
+ }
48
+ }
49
+ function loadOrCreateIdentity(namespace, agentName, tag = 'default') {
50
+ const keyFile = path.join(KEYS_DIR, `${tag}.key`);
51
+ if (fs.existsSync(keyFile)) {
52
+ const raw = fs.readFileSync(keyFile, 'utf-8').trim();
53
+ const secretKey = Buffer.from(raw, 'base64url');
54
+ const publicKey = secretKey.slice(32);
55
+ const agentId = (0, agent_id_1.buildAgentId)(publicKey, namespace, agentName);
56
+ return {
57
+ identity: { agentId, publicKey, secretKey },
58
+ isNew: false,
59
+ };
60
+ }
61
+ const keypair = (0, crypto_1.generateKeyPair)();
62
+ const agentId = (0, agent_id_1.buildAgentId)(keypair.publicKey, namespace, agentName);
63
+ ensureDir(KEYS_DIR);
64
+ fs.writeFileSync(keyFile, Buffer.from(keypair.secretKey).toString('base64url'), { mode: 0o600 });
65
+ return {
66
+ identity: { agentId, publicKey: keypair.publicKey, secretKey: keypair.secretKey },
67
+ isNew: true,
68
+ };
69
+ }
70
+ function loadIdentity(namespace, agentName, tag = 'default') {
71
+ const keyFile = path.join(KEYS_DIR, `${tag}.key`);
72
+ if (!fs.existsSync(keyFile)) {
73
+ return null;
74
+ }
75
+ const raw = fs.readFileSync(keyFile, 'utf-8').trim();
76
+ const secretKey = Buffer.from(raw, 'base64url');
77
+ const publicKey = secretKey.slice(32);
78
+ const agentId = (0, agent_id_1.buildAgentId)(publicKey, namespace, agentName);
79
+ return { agentId, publicKey, secretKey };
80
+ }
81
+ //# sourceMappingURL=key-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-store.js","sourceRoot":"","sources":["../src/key-store.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,oDA6BC;AAED,oCAiBC;AApED,uCAAyB;AACzB,2CAA6B;AAC7B,qCAA2C;AAC3C,yCAA0C;AAE1C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW;OACnC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAQ9C,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAgB,oBAAoB,CAClC,SAAiB,EACjB,SAAiB,EACjB,MAAc,SAAS;IAEvB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC;IAElD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,IAAA,uBAAY,EAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAE9D,OAAO;YACL,QAAQ,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE;YAC3C,KAAK,EAAE,KAAK;SACb,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,wBAAe,GAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAA,uBAAY,EAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAEtE,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpB,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEjG,OAAO;QACL,QAAQ,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE;QACjF,KAAK,EAAE,IAAI;KACZ,CAAC;AACJ,CAAC;AAED,SAAgB,YAAY,CAC1B,SAAiB,EACjB,SAAiB,EACjB,MAAc,SAAS;IAEvB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC;IAElD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAA,uBAAY,EAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAE9D,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,35 @@
1
+ export interface Capability {
2
+ capability: string;
3
+ description?: string;
4
+ input_modes?: string[];
5
+ output_modes?: string[];
6
+ input_schema?: unknown;
7
+ output_schema?: unknown;
8
+ }
9
+ export interface Route {
10
+ type: 'direct' | 'relay';
11
+ address?: string;
12
+ relay?: string;
13
+ session_id?: string;
14
+ }
15
+ export interface AgentInfo {
16
+ platform?: string;
17
+ runtime?: string;
18
+ heartbeat_interval?: number;
19
+ }
20
+ export interface Manifest {
21
+ protocol: string;
22
+ agent_id: string;
23
+ display_name: string;
24
+ description?: string;
25
+ capabilities: (string | Capability)[];
26
+ routes: Route[];
27
+ agent_info?: AgentInfo;
28
+ updated_at: string;
29
+ }
30
+ export declare function createManifest(agentId: string, displayName: string, capabilities: (string | Capability)[], routes: Route[], options?: {
31
+ description?: string;
32
+ agentInfo?: AgentInfo;
33
+ }): Manifest;
34
+ export declare function hasCapability(manifest: Manifest, capability: string): boolean;
35
+ export declare function getCapability(manifest: Manifest, capability: string): Capability | undefined;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createManifest = createManifest;
4
+ exports.hasCapability = hasCapability;
5
+ exports.getCapability = getCapability;
6
+ function createManifest(agentId, displayName, capabilities, routes, options) {
7
+ return {
8
+ protocol: 'adp/0.2',
9
+ agent_id: agentId,
10
+ display_name: displayName,
11
+ description: options?.description,
12
+ capabilities,
13
+ routes,
14
+ agent_info: options?.agentInfo,
15
+ updated_at: new Date().toISOString(),
16
+ };
17
+ }
18
+ function hasCapability(manifest, capability) {
19
+ return manifest.capabilities.some((cap) => typeof cap === 'string' ? cap === capability : cap.capability === capability);
20
+ }
21
+ function getCapability(manifest, capability) {
22
+ return manifest.capabilities.find((cap) => typeof cap !== 'string' && cap.capability === capability);
23
+ }
24
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":";;AAiCA,wCAoBC;AAED,sCAIC;AAED,sCAIC;AAhCD,SAAgB,cAAc,CAC5B,OAAe,EACf,WAAmB,EACnB,YAAqC,EACrC,MAAe,EACf,OAGC;IAED,OAAO;QACL,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,OAAO;QACjB,YAAY,EAAE,WAAW;QACzB,WAAW,EAAE,OAAO,EAAE,WAAW;QACjC,YAAY;QACZ,MAAM;QACN,UAAU,EAAE,OAAO,EAAE,SAAS;QAC9B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAAC,QAAkB,EAAE,UAAkB;IAClE,OAAO,QAAQ,CAAC,YAAY,CAAC,IAAI,CAC/B,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,UAAU,CACtF,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAAC,QAAkB,EAAE,UAAkB;IAClE,OAAO,QAAQ,CAAC,YAAY,CAAC,IAAI,CAC/B,CAAC,GAAG,EAAqB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,KAAK,UAAU,CACrF,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,93 @@
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
+ async function run() {
11
+ console.log('═══════════════════════════════════════');
12
+ console.log(' ADP mDNS — 局域网零配置发现测试');
13
+ console.log('═══════════════════════════════════════\n');
14
+ const kp1 = (0, crypto_1.generateKeyPair)();
15
+ const agent1Id = (0, agent_id_1.buildAgentId)(kp1.publicKey, 'test.local', 'agent1');
16
+ console.log(`🔑 agent1: ${agent1Id}`);
17
+ const kp2 = (0, crypto_1.generateKeyPair)();
18
+ const agent2Id = (0, agent_id_1.buildAgentId)(kp2.publicKey, 'test.local', 'agent2');
19
+ console.log(`🔑 agent2: ${agent2Id}\n`);
20
+ const PORT1 = 9850;
21
+ const PORT2 = 9851;
22
+ const g1 = new src_1.Gateway({
23
+ port: PORT1, host: '0.0.0.0',
24
+ secretKey: kp1.secretKey, agentId: agent1Id,
25
+ displayName: 'Agent 1', capabilities: src_2.STANDARD_CAPABILITIES,
26
+ skipVerification: false,
27
+ });
28
+ const g2 = new src_1.Gateway({
29
+ port: PORT2, host: '0.0.0.0',
30
+ secretKey: kp2.secretKey, agentId: agent2Id,
31
+ displayName: 'Agent 2', capabilities: src_2.STANDARD_CAPABILITIES,
32
+ skipVerification: false,
33
+ });
34
+ const sharedMdns = (0, src_1.getSharedMdns)();
35
+ let agent2DiscoveredAgent1 = false;
36
+ sharedMdns.on('response', () => { });
37
+ const d1 = new src_1.Discovery(agent1Id, PORT1, {
38
+ onPeerDiscovered: (peer) => {
39
+ console.log(` agent1 discovered: ${peer.host}:${peer.port}`);
40
+ },
41
+ }, sharedMdns);
42
+ const d2 = new src_1.Discovery(agent2Id, PORT2, {
43
+ onPeerDiscovered: async (peer) => {
44
+ console.log(` agent2 discovered: ${peer.host}:${peer.port}`);
45
+ agent2DiscoveredAgent1 = true;
46
+ try {
47
+ const ws = await (0, src_1.connectToAgent)(peer.agentId, `${peer.host}:${peer.port}`, agent2Id);
48
+ console.log(` ✅ Connected!`);
49
+ ws.on('message', (raw) => {
50
+ const env = JSON.parse(raw.toString());
51
+ console.log(`📩 agent2 ← agent1: ${env.action} [${JSON.stringify(env.params)}]`);
52
+ });
53
+ ws.send(JSON.stringify((0, crypto_2.signEnvelope)({
54
+ protocol: 'adp/0.2', id: (0, envelope_1.generateMessageId)(),
55
+ from: agent2Id, to: agent1Id,
56
+ action: 'adp:ping', params: { via: 'mdns' },
57
+ timestamp: new Date().toISOString(),
58
+ }, kp2.secretKey, canonical_1.canonicalize)));
59
+ console.log(` 📤 Sent adp:ping\n`);
60
+ }
61
+ catch (err) {
62
+ console.log(` ⚠️ Connect failed: ${err.message}\n`);
63
+ }
64
+ },
65
+ }, sharedMdns);
66
+ d1.start();
67
+ d2.start();
68
+ console.log('📡 Both agents announcing');
69
+ console.log('🔎 Waiting for discovery (up to 10s)...\n');
70
+ await sleep(10000);
71
+ console.log('═══════════════════════════════════════');
72
+ if (agent2DiscoveredAgent1) {
73
+ console.log(' ✅ mDNS 发现测试通过!');
74
+ console.log(' ✅ 组播广播正常');
75
+ console.log(' ✅ PTR/SRV/TXT 解析正常');
76
+ console.log(' ✅ 零配置自动发现正常');
77
+ }
78
+ else {
79
+ console.log(' ⚠️ mDNS 未发现对等节点');
80
+ console.log(' (mDNS 依赖本地组播,Windows 虚拟网卡可能受限)');
81
+ }
82
+ console.log('═══════════════════════════════════════\n');
83
+ d1.shutdown();
84
+ d2.shutdown();
85
+ g1.close();
86
+ g2.close();
87
+ process.exit(0);
88
+ }
89
+ function sleep(ms) {
90
+ return new Promise(r => setTimeout(r, ms));
91
+ }
92
+ run().catch(err => { console.error('❌', err); process.exit(1); });
93
+ //# sourceMappingURL=mdns-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdns-test.js","sourceRoot":"","sources":["../mdns-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const relay_1 = require("./src/relay");
37
+ const src_1 = require("./src");
38
+ const relay_2 = require("./src/relay");
39
+ const key_store_1 = require("./src/key-store");
40
+ const crypto_1 = require("./src/crypto");
41
+ const canonical_1 = require("./src/canonical");
42
+ const envelope_1 = require("./src/envelope");
43
+ const os = __importStar(require("os"));
44
+ const RELAY_PORT = 19970;
45
+ const AGENT1_PORT = 19901;
46
+ const AGENT2_PORT = 19902;
47
+ let relay;
48
+ let g1;
49
+ let g2;
50
+ let rc1;
51
+ let rc2;
52
+ let peer1Messages = [];
53
+ let peer2Messages = [];
54
+ function getLanIp() {
55
+ const interfaces = os.networkInterfaces();
56
+ for (const [name, addrs] of Object.entries(interfaces)) {
57
+ if (!addrs)
58
+ continue;
59
+ for (const addr of addrs) {
60
+ if (addr.family === 'IPv4' && !addr.internal) {
61
+ return addr.address;
62
+ }
63
+ }
64
+ }
65
+ return '127.0.0.1';
66
+ }
67
+ function sleep(ms) {
68
+ return new Promise(resolve => setTimeout(resolve, ms));
69
+ }
70
+ async function startRelay() {
71
+ relay = new relay_1.Relay({ port: RELAY_PORT, host: '0.0.0.0' });
72
+ console.log(`✅ Relay started on port ${RELAY_PORT}`);
73
+ }
74
+ async function startAgent1() {
75
+ const { identity } = (0, key_store_1.loadOrCreateIdentity)('test-relay', 'peer-1', 'test-relay-agent1');
76
+ const lanIp = getLanIp();
77
+ g1 = new src_1.Gateway({
78
+ port: AGENT1_PORT,
79
+ host: 'localhost',
80
+ secretKey: identity.secretKey,
81
+ agentId: identity.agentId,
82
+ displayName: 'Agent1',
83
+ capabilities: src_1.STANDARD_CAPABILITIES,
84
+ skipVerification: false,
85
+ });
86
+ console.log(`✅ Agent1 Gateway started on port ${AGENT1_PORT}`);
87
+ rc1 = new relay_2.RelayClient(`ws://localhost:${RELAY_PORT}`, identity.agentId, {
88
+ onWelcome: (sid) => {
89
+ console.log(`✅ Agent1 connected to Relay: ${sid}`);
90
+ },
91
+ onMessage: (msg) => {
92
+ peer1Messages.push(JSON.stringify(msg));
93
+ console.log(`📩 Agent1 received: ${JSON.stringify(msg).slice(0, 80)}...`);
94
+ },
95
+ onPeerUpdate: async (type, peerAgentId) => {
96
+ console.log(`🔔 Agent1 peer update: ${type} - ${peerAgentId}`);
97
+ if (type === 'peer_joined') {
98
+ rc1.send(peerAgentId, (0, crypto_1.signEnvelope)({
99
+ protocol: 'adp/0.2',
100
+ id: (0, envelope_1.generateMessageId)(),
101
+ from: identity.agentId,
102
+ to: peerAgentId,
103
+ action: 'adp:ping',
104
+ params: { via: 'relay' },
105
+ timestamp: new Date().toISOString(),
106
+ }, identity.secretKey, canonical_1.canonicalize));
107
+ console.log(`📤 Agent1 sent adp:ping to ${peerAgentId}`);
108
+ }
109
+ },
110
+ onClose: () => {
111
+ console.log(`🔌 Agent1 Relay disconnected`);
112
+ },
113
+ });
114
+ await rc1.connect();
115
+ console.log(`✅ Agent1 RelayClient connected`);
116
+ return identity;
117
+ }
118
+ async function startAgent2() {
119
+ const { identity } = (0, key_store_1.loadOrCreateIdentity)('test-relay', 'peer-2', 'test-relay-agent2');
120
+ g2 = new src_1.Gateway({
121
+ port: AGENT2_PORT,
122
+ host: 'localhost',
123
+ secretKey: identity.secretKey,
124
+ agentId: identity.agentId,
125
+ displayName: 'Agent2',
126
+ capabilities: src_1.STANDARD_CAPABILITIES,
127
+ skipVerification: false,
128
+ });
129
+ console.log(`✅ Agent2 Gateway started on port ${AGENT2_PORT}`);
130
+ rc2 = new relay_2.RelayClient(`ws://localhost:${RELAY_PORT}`, identity.agentId, {
131
+ onWelcome: (sid) => {
132
+ console.log(`✅ Agent2 connected to Relay: ${sid}`);
133
+ },
134
+ onMessage: (msg) => {
135
+ peer2Messages.push(JSON.stringify(msg));
136
+ console.log(`📩 Agent2 received: ${JSON.stringify(msg).slice(0, 80)}...`);
137
+ },
138
+ onPeerUpdate: async (type, peerAgentId) => {
139
+ console.log(`🔔 Agent2 peer update: ${type} - ${peerAgentId}`);
140
+ if (type === 'peer_joined') {
141
+ rc2.send(peerAgentId, (0, crypto_1.signEnvelope)({
142
+ protocol: 'adp/0.2',
143
+ id: (0, envelope_1.generateMessageId)(),
144
+ from: identity.agentId,
145
+ to: peerAgentId,
146
+ action: 'adp:ping',
147
+ params: { via: 'relay' },
148
+ timestamp: new Date().toISOString(),
149
+ }, identity.secretKey, canonical_1.canonicalize));
150
+ console.log(`📤 Agent2 sent adp:ping to ${peerAgentId}`);
151
+ }
152
+ },
153
+ onClose: () => {
154
+ console.log(`🔌 Agent2 Relay disconnected`);
155
+ },
156
+ });
157
+ await rc2.connect();
158
+ console.log(`✅ Agent2 RelayClient connected`);
159
+ return identity;
160
+ }
161
+ async function runTest() {
162
+ console.log('\n═══════════════════════════════════════');
163
+ console.log(' Relay Peer Discovery Test');
164
+ console.log('═══════════════════════════════════════\n');
165
+ await startRelay();
166
+ console.log('');
167
+ const id1 = await startAgent1();
168
+ console.log(`🔑 Agent1 ID: ${id1.agentId}`);
169
+ console.log('');
170
+ await sleep(500);
171
+ const id2 = await startAgent2();
172
+ console.log(`🔑 Agent2 ID: ${id2.agentId}`);
173
+ console.log('');
174
+ console.log('⏳ Waiting for peer discovery and message exchange...');
175
+ console.log('');
176
+ await sleep(3000);
177
+ console.log('\n═══════════════════════════════════════');
178
+ console.log(' Test Results');
179
+ console.log('═══════════════════════════════════════\n');
180
+ console.log(`Sessions on Relay: ${relay.getSessionCount()}`);
181
+ console.log(`Agent1 received ${peer1Messages.length} messages`);
182
+ console.log(`Agent2 received ${peer2Messages.length} messages`);
183
+ const hasPongFromAgent2 = peer1Messages.some(m => m.includes('adp:pong') || m.includes('adp:info'));
184
+ const hasPongFromAgent1 = peer2Messages.some(m => m.includes('adp:pong') || m.includes('adp:info'));
185
+ if (relay.getSessionCount() === 2) {
186
+ console.log('\n✅ Both agents connected to Relay');
187
+ }
188
+ else {
189
+ console.log('\n❌ Expected 2 sessions, got ' + relay.getSessionCount());
190
+ }
191
+ if (peer1Messages.length > 0) {
192
+ console.log('✅ Agent1 received messages from Agent2');
193
+ }
194
+ else {
195
+ console.log('❌ Agent1 did not receive any messages');
196
+ }
197
+ if (peer2Messages.length > 0) {
198
+ console.log('✅ Agent2 received messages from Agent1');
199
+ }
200
+ else {
201
+ console.log('❌ Agent2 did not receive any messages');
202
+ }
203
+ console.log('\n📋 All messages received by Agent1:');
204
+ peer1Messages.forEach((m, i) => console.log(` ${i + 1}. ${m.slice(0, 100)}...`));
205
+ console.log('\n📋 All messages received by Agent2:');
206
+ peer2Messages.forEach((m, i) => console.log(` ${i + 1}. ${m.slice(0, 100)}...`));
207
+ const allPassed = relay.getSessionCount() === 2 && peer1Messages.length > 0 && peer2Messages.length > 0;
208
+ console.log(`\n${allPassed ? '✅ ALL TESTS PASSED' : '❌ SOME TESTS FAILED'}\n`);
209
+ rc1.close();
210
+ rc2.close();
211
+ relay.close();
212
+ g1.close();
213
+ g2.close();
214
+ process.exit(allPassed ? 0 : 1);
215
+ }
216
+ runTest().catch(err => {
217
+ console.error('❌ Test failed:', err);
218
+ process.exit(1);
219
+ });
220
+ //# sourceMappingURL=relay-peer-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-peer-test.js","sourceRoot":"","sources":["../relay-peer-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const relay_1 = require("./src/relay");
4
+ const gateway_1 = require("./src/gateway");
5
+ const crypto_1 = require("./src/crypto");
6
+ const agent_id_1 = require("./src/agent-id");
7
+ const crypto_2 = require("./src/crypto");
8
+ const canonical_1 = require("./src/canonical");
9
+ const src_1 = require("./src");
10
+ const RELAY_PORT = 9700;
11
+ const AGENT1_PORT = 9800;
12
+ const AGENT2_PORT = 9801;
13
+ const RELAY_URL = `ws://localhost:${RELAY_PORT}/adp/relay`;
14
+ async function run() {
15
+ console.log('═══════════════════════════════════════');
16
+ console.log(' ADP Relay — 端到端中继测试');
17
+ console.log('═══════════════════════════════════════\n');
18
+ const relay = new relay_1.Relay({ port: RELAY_PORT, host: 'localhost' });
19
+ console.log(`🔄 Relay on ws://localhost:${RELAY_PORT}/adp/relay\n`);
20
+ const kp1 = (0, crypto_1.generateKeyPair)();
21
+ const agent1Id = (0, agent_id_1.buildAgentId)(kp1.publicKey, 'test.local', 'agent1');
22
+ console.log(`🔑 agent1: ${agent1Id}`);
23
+ const kp2 = (0, crypto_1.generateKeyPair)();
24
+ const agent2Id = (0, agent_id_1.buildAgentId)(kp2.publicKey, 'test.local', 'agent2');
25
+ console.log(`🔑 agent2: ${agent2Id}\n`);
26
+ console.log('--- Starting agent1 Gateway + Relay ---\n');
27
+ const g1 = new gateway_1.Gateway({
28
+ port: AGENT1_PORT, host: 'localhost',
29
+ secretKey: kp1.secretKey, agentId: agent1Id,
30
+ displayName: 'Agent 1', capabilities: src_1.STANDARD_CAPABILITIES,
31
+ skipVerification: false,
32
+ });
33
+ const rc1 = new relay_1.RelayClient(RELAY_URL, agent1Id, {
34
+ onWelcome: (sid) => console.log(` agent1 relay session: ${sid}`),
35
+ onMessage: (msg) => g1.processRelayMessage(msg),
36
+ });
37
+ await rc1.connect();
38
+ await sleep(500);
39
+ console.log('\n--- Starting agent2 Gateway + Relay ---\n');
40
+ const g2 = new gateway_1.Gateway({
41
+ port: AGENT2_PORT, host: 'localhost',
42
+ secretKey: kp2.secretKey, agentId: agent2Id,
43
+ displayName: 'Agent 2', capabilities: src_1.STANDARD_CAPABILITIES,
44
+ skipVerification: false,
45
+ });
46
+ const rc2 = new relay_1.RelayClient(RELAY_URL, agent2Id, {
47
+ onWelcome: (sid) => console.log(` agent2 relay session: ${sid}`),
48
+ onMessage: (msg) => g2.processRelayMessage(msg),
49
+ });
50
+ await rc2.connect();
51
+ await sleep(500);
52
+ console.log('\n--- Test: agent2 → Relay → agent1 ---\n');
53
+ const pingMsg = (0, crypto_2.signEnvelope)({
54
+ protocol: 'adp/0.2',
55
+ id: 'msg_relay_test_001',
56
+ from: agent2Id,
57
+ to: agent1Id,
58
+ action: 'adp:ping',
59
+ params: { via: 'relay' },
60
+ timestamp: new Date().toISOString(),
61
+ }, kp2.secretKey, canonical_1.canonicalize);
62
+ console.log(' agent2 sends adp:ping (via relay)...');
63
+ rc2.send(agent1Id, pingMsg);
64
+ await sleep(1500);
65
+ console.log('\n--- Test: agent1 → Relay → agent2 ---\n');
66
+ const pongMsg = (0, crypto_2.signEnvelope)({
67
+ protocol: 'adp/0.2',
68
+ id: 'msg_relay_test_002',
69
+ from: agent1Id,
70
+ to: agent2Id,
71
+ action: 'adp:ping',
72
+ params: { via: 'relay', direction: 'response' },
73
+ timestamp: new Date().toISOString(),
74
+ }, kp1.secretKey, canonical_1.canonicalize);
75
+ console.log(' agent1 sends adp:ping back (via relay)...');
76
+ rc1.send(agent2Id, pongMsg);
77
+ await sleep(1500);
78
+ console.log('\n═══════════════════════════════════════');
79
+ console.log(' ✅ Relay 端到端测试完成');
80
+ console.log('═══════════════════════════════════════\n');
81
+ rc1.close();
82
+ rc2.close();
83
+ g1.close();
84
+ g2.close();
85
+ relay.close();
86
+ process.exit(0);
87
+ }
88
+ function sleep(ms) {
89
+ return new Promise(r => setTimeout(r, ms));
90
+ }
91
+ run().catch(err => { console.error('❌', err); process.exit(1); });
92
+ //# sourceMappingURL=relay-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-test.js","sourceRoot":"","sources":["../relay-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ export interface RelayOptions {
2
+ host?: string;
3
+ port: number;
4
+ tls?: {
5
+ cert: string;
6
+ key: string;
7
+ };
8
+ maxConnections?: number;
9
+ heartbeatIntervalMs?: number;
10
+ heartbeatTimeoutMs?: number;
11
+ offlineMaxAgeMs?: number;
12
+ offlineMaxPerAgent?: number;
13
+ }
14
+ export declare class Relay {
15
+ private server;
16
+ private wss;
17
+ private sessions;
18
+ private agentSessions;
19
+ private offlineCache;
20
+ private heartbeatTimer;
21
+ private maxConnections;
22
+ private heartbeatIntervalMs;
23
+ private heartbeatTimeoutMs;
24
+ private offlineMaxAgeMs;
25
+ private offlineMaxPerAgent;
26
+ constructor(options: RelayOptions);
27
+ private handleConnection;
28
+ private handleMessage;
29
+ private cacheMessage;
30
+ private deliverOfflineMessages;
31
+ private startHeartbeat;
32
+ getSessionCount(): number;
33
+ close(): void;
34
+ }
35
+ export interface RelayClientCallbacks {
36
+ onWelcome?: (sessionId: string) => void;
37
+ onBusy?: () => void;
38
+ onMessage?: (envelope: unknown) => void;
39
+ onClose?: () => void;
40
+ }
41
+ export declare class RelayClient {
42
+ private ws;
43
+ private relayUrl;
44
+ private agentId;
45
+ private callbacks;
46
+ private heartbeatTimer;
47
+ private reconnect;
48
+ private heartbeatIntervalMs;
49
+ constructor(relayUrl: string, agentId: string, callbacks: RelayClientCallbacks, options?: {
50
+ reconnect?: boolean;
51
+ heartbeatIntervalMs?: number;
52
+ });
53
+ connect(): Promise<void>;
54
+ send(to: string, envelope: unknown): void;
55
+ private startHeartbeat;
56
+ private stopHeartbeat;
57
+ private reconnectToRelay;
58
+ isConnected(): boolean;
59
+ close(): void;
60
+ }