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,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const relay_1 = require("./src/relay");
4
+ const port = parseInt(process.env.ADP_RELAY_PORT || process.env.RELAY_PORT || '9700', 10);
5
+ const host = process.env.ADP_RELAY_HOST || process.env.RELAY_HOST || '0.0.0.0';
6
+ const maxConnections = parseInt(process.env.ADP_RELAY_MAX_CONNECTIONS || process.env.RELAY_MAX_CONNECTIONS || '10000', 10);
7
+ const heartbeatIntervalMs = parseInt(process.env.ADP_RELAY_HEARTBEAT_INTERVAL_MS || process.env.RELAY_HEARTBEAT_INTERVAL_MS || '15000', 10);
8
+ const heartbeatTimeoutMs = parseInt(process.env.ADP_RELAY_HEARTBEAT_TIMEOUT_MS || process.env.RELAY_HEARTBEAT_TIMEOUT_MS || '45000', 10);
9
+ const offlineMaxAgeMs = parseInt(process.env.ADP_RELAY_OFFLINE_MAX_AGE_MS || process.env.RELAY_OFFLINE_MAX_AGE_MS || '86400000', 10);
10
+ const offlineMaxPerAgent = parseInt(process.env.ADP_RELAY_OFFLINE_MAX_PER_AGENT || process.env.RELAY_OFFLINE_MAX_PER_AGENT || '500', 10);
11
+ const relay = new relay_1.Relay({
12
+ port,
13
+ host,
14
+ maxConnections,
15
+ heartbeatIntervalMs,
16
+ heartbeatTimeoutMs,
17
+ offlineMaxAgeMs,
18
+ offlineMaxPerAgent,
19
+ });
20
+ console.log(`
21
+ ╔══════════════════════════════════════╗
22
+ ║ ADP Relay Server ║
23
+ ╠══════════════════════════════════════╣
24
+ ║ ws://${host}:${port}/adp/relay ║
25
+ ║ ║
26
+ ║ Heartbeat: ${heartbeatIntervalMs / 1000}s / Timeout: ${heartbeatTimeoutMs / 1000}s ║
27
+ ║ Offline cache: ${offlineMaxAgeMs / 86400000}d / ${offlineMaxPerAgent} msgs ║
28
+ ╚══════════════════════════════════════╝
29
+ `);
30
+ process.on('SIGINT', () => {
31
+ console.log('\n👋 Relay shutting down...');
32
+ relay.close();
33
+ process.exit(0);
34
+ });
35
+ //# sourceMappingURL=start-relay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-relay.js","sourceRoot":"","sources":["../start-relay.ts"],"names":[],"mappings":";;AAAA,uCAAoC;AAEpC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAC1F,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,SAAS,CAAC;AAC/E,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;AAC3H,MAAM,mBAAmB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;AAC5I,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;AACzI,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,UAAU,EAAE,EAAE,CAAC,CAAC;AACrI,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,KAAK,EAAE,EAAE,CAAC,CAAC;AAEzI,MAAM,KAAK,GAAG,IAAI,aAAK,CAAC;IACtB,IAAI;IACJ,IAAI;IACJ,cAAc;IACd,mBAAmB;IACnB,kBAAkB;IAClB,eAAe;IACf,kBAAkB;CACnB,CAAC,CAAC;AAEH,OAAO,CAAC,GAAG,CAAC;;;;UAIF,IAAI,IAAI,IAAI;;gBAEN,mBAAmB,GAAG,IAAI,gBAAgB,kBAAkB,GAAG,IAAI;oBAC/D,eAAe,GAAG,QAAQ,OAAO,kBAAkB;;CAEtE,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
package/dist/start.js ADDED
@@ -0,0 +1,364 @@
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 http = __importStar(require("http"));
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ const src_1 = require("./src");
41
+ const client_1 = require("./src/registry/client");
42
+ const crypto_1 = require("./src/crypto");
43
+ const canonical_1 = require("./src/canonical");
44
+ const envelope_1 = require("./src/envelope");
45
+ function loadAgentConfig() {
46
+ const candidates = [
47
+ path.join(process.cwd(), '.adp', 'config.json'),
48
+ path.join(os.homedir(), '.adp', 'config.json'),
49
+ ];
50
+ for (const configPath of candidates) {
51
+ try {
52
+ if (!fs.existsSync(configPath))
53
+ continue;
54
+ const raw = fs.readFileSync(configPath, 'utf-8');
55
+ const config = JSON.parse(raw);
56
+ console.log(`📄 Loaded config from ${configPath}`);
57
+ return config;
58
+ }
59
+ catch (err) {
60
+ console.log(`⚠️ Failed to load config from ${configPath}: ${err.message}`);
61
+ }
62
+ }
63
+ return {};
64
+ }
65
+ function getLanIp() {
66
+ const interfaces = os.networkInterfaces();
67
+ for (const [name, addrs] of Object.entries(interfaces)) {
68
+ if (!addrs)
69
+ continue;
70
+ for (const addr of addrs) {
71
+ if (addr.family === 'IPv4' && !addr.internal) {
72
+ return addr.address;
73
+ }
74
+ }
75
+ }
76
+ return 'localhost';
77
+ }
78
+ const agentConfig = loadAgentConfig();
79
+ const args = process.argv.slice(2).filter(a => a !== '--');
80
+ const tag = args.find(a => a.startsWith('agent')) || 'agent1';
81
+ let relayUrl = process.env.ADP_RELAY || '';
82
+ if (!relayUrl) {
83
+ const relayArg = args.find(a => a.startsWith('--relay='));
84
+ if (relayArg)
85
+ relayUrl = relayArg.split('=')[1];
86
+ else {
87
+ const urlArg = args.find(a => a.startsWith('ws://') || a.startsWith('wss://'));
88
+ if (urlArg)
89
+ relayUrl = urlArg;
90
+ else
91
+ relayUrl = agentConfig.relay?.url || '';
92
+ }
93
+ }
94
+ let registryUrl = process.env.ADP_REGISTRY || '';
95
+ if (!registryUrl) {
96
+ const registryArg = args.find(a => a.startsWith('--registry='));
97
+ if (registryArg)
98
+ registryUrl = registryArg.split('=')[1];
99
+ else
100
+ registryUrl = agentConfig.registry?.url || '';
101
+ }
102
+ const enableMdns = !args.includes('--direct') && !process.env.ADP_NO_MDNS;
103
+ const namespace = process.env.ADP_NAMESPACE || agentConfig.namespace || 'local';
104
+ const displayName = process.env.ADP_DISPLAY || agentConfig.display_name || tag.toUpperCase();
105
+ let agentName = process.env.ADP_NAME || '';
106
+ if (!agentName) {
107
+ const nameArg = args.find(a => a.startsWith('--name='));
108
+ if (nameArg)
109
+ agentName = nameArg.split('=')[1];
110
+ else
111
+ agentName = agentConfig.name || tag.replace('agent', 'peer-');
112
+ }
113
+ const PORT_BASE = 9900;
114
+ const portArg = args.find(a => a.startsWith('--port='));
115
+ const requestedPort = portArg ? parseInt(portArg.split('=')[1]) : 0;
116
+ async function main() {
117
+ const finalPort = requestedPort > 0
118
+ ? (await (0, src_1.isPortAvailable)(requestedPort) ? requestedPort : await (0, src_1.findAvailablePortSequential)(PORT_BASE))
119
+ : await (0, src_1.findAvailablePortSequential)(PORT_BASE);
120
+ console.log(getBanner(tag));
121
+ console.log(' ADP v0.2');
122
+ console.log(`--------------------------------------------------\n`);
123
+ const { identity, isNew } = (0, src_1.loadOrCreateIdentity)(namespace, agentName, tag);
124
+ if (isNew) {
125
+ console.log(`🆕 New identity → .adp/keys/${tag}.key`);
126
+ }
127
+ else {
128
+ console.log(`📂 Loaded identity → .adp/keys/${tag}.key`);
129
+ }
130
+ console.log(`🔑 Agent ID: ${identity.agentId}\n`);
131
+ const gatewayHost = enableMdns ? '0.0.0.0' : 'localhost';
132
+ let lanIp = getLanIp();
133
+ const contacts = new src_1.ContactStore();
134
+ await contacts.load();
135
+ const contactIds = contacts.listAgentIds();
136
+ if (contactIds.length > 0) {
137
+ console.log(`📇 Loaded ${contactIds.length} contacts from contacts.json`);
138
+ }
139
+ const gateway = new src_1.Gateway({
140
+ port: finalPort,
141
+ host: gatewayHost,
142
+ secretKey: identity.secretKey,
143
+ agentId: identity.agentId,
144
+ displayName,
145
+ capabilities: src_1.STANDARD_CAPABILITIES,
146
+ skipVerification: false,
147
+ tofuEnabled: true,
148
+ contacts,
149
+ });
150
+ console.log(`🌐 ws://localhost:${finalPort}/adp`);
151
+ if (enableMdns)
152
+ console.log(` LAN: ws://${lanIp}:${finalPort}/adp (bound to 0.0.0.0)`);
153
+ console.log(`📋 adp:ping | adp:capability.query | adp:info | ...\n`);
154
+ let relayClient = null;
155
+ let discovery = null;
156
+ let registryClient = null;
157
+ let relaySessionId = null;
158
+ if (relayUrl) {
159
+ console.log(`--- Relay: ${relayUrl} ---`);
160
+ relayClient = new src_1.RelayClient(relayUrl, identity.agentId, {
161
+ onWelcome: (sid) => {
162
+ relaySessionId = sid;
163
+ console.log(`✅ Relay session: ${sid}`);
164
+ },
165
+ onMessage: (msg) => gateway.processRelayMessage(msg),
166
+ onPeerUpdate: async (type, peerAgentId) => {
167
+ if (type === 'peer_joined') {
168
+ console.log(`🔍 Peer joined via Relay: ${peerAgentId}`);
169
+ const peer = { agentId: peerAgentId, routes: [] };
170
+ try {
171
+ relayClient?.send(peerAgentId, (0, crypto_1.signEnvelope)({
172
+ protocol: 'adp/0.2',
173
+ id: (0, envelope_1.generateMessageId)(),
174
+ from: identity.agentId,
175
+ to: peerAgentId,
176
+ action: 'adp:ping',
177
+ params: { via: 'relay' },
178
+ timestamp: new Date().toISOString(),
179
+ }, identity.secretKey, canonical_1.canonicalize));
180
+ }
181
+ catch { }
182
+ }
183
+ else {
184
+ console.log(`🔌 Peer left: ${peerAgentId}`);
185
+ }
186
+ },
187
+ });
188
+ await relayClient.connect();
189
+ console.log('');
190
+ }
191
+ if (registryUrl) {
192
+ console.log(`--- Registry: ${registryUrl} ---`);
193
+ const registryToken = process.env.ADP_REGISTRY_TOKEN || agentConfig.registry?.token || '';
194
+ const routes = [{ type: 'direct', address: `${lanIp}:${finalPort}` }];
195
+ if (relaySessionId) {
196
+ routes.push({ type: 'relay', relay: relayUrl, session_id: relaySessionId });
197
+ }
198
+ registryClient = new client_1.RegistryClient({
199
+ registryUrl,
200
+ agentId: identity.agentId,
201
+ manifest: gateway.getManifest(),
202
+ routes,
203
+ token: registryToken || undefined,
204
+ secretKey: identity.secretKey,
205
+ });
206
+ try {
207
+ const result = await registryClient.register();
208
+ console.log(`✅ Registered: expires at ${new Date(result.expires_at).toLocaleString()}`);
209
+ }
210
+ catch (err) {
211
+ console.log(`⚠️ Registry registration failed: ${err.message}`);
212
+ console.log(` Agent will continue without Registry.`);
213
+ registryClient = null;
214
+ }
215
+ console.log('');
216
+ }
217
+ let lanIpCheckInterval = null;
218
+ if (registryClient) {
219
+ lanIpCheckInterval = setInterval(() => {
220
+ const newLanIp = getLanIp();
221
+ if (newLanIp !== lanIp) {
222
+ lanIp = newLanIp;
223
+ const newRoutes = [{ type: 'direct', address: `${lanIp}:${finalPort}` }];
224
+ if (relaySessionId) {
225
+ newRoutes.push({ type: 'relay', relay: relayUrl, session_id: relaySessionId });
226
+ }
227
+ registryClient.updateManifest(gateway.getManifest(), newRoutes).catch(() => { });
228
+ console.log(`🔀 LAN IP changed to ${lanIp}, syncing to Registry...`);
229
+ }
230
+ }, 30000);
231
+ }
232
+ if (enableMdns && !relayUrl) {
233
+ console.log(`--- mDNS Discovery ---`);
234
+ discovery = new src_1.Discovery(identity.agentId, finalPort, {
235
+ onPeerDiscovered: async (peer) => {
236
+ console.log(`🔍 Discovered peer via mDNS:`);
237
+ console.log(` Agent: ${peer.agentId}`);
238
+ console.log(` Addr: ${peer.host}:${peer.port}`);
239
+ if (tag === 'agent1')
240
+ return;
241
+ try {
242
+ const ws = await (0, src_1.connectToAgent)(peer.agentId, `${peer.host}:${peer.port}`, identity.agentId);
243
+ console.log(`✅ Connected to ${peer.agentId.slice(0, 50)}...\n`);
244
+ ws.on('message', (raw) => {
245
+ const env = JSON.parse(raw);
246
+ console.log(`📩 ${env.action} ← peer [${JSON.stringify(env.params)}]`);
247
+ });
248
+ ws.send(JSON.stringify((0, crypto_1.signEnvelope)({
249
+ protocol: 'adp/0.2',
250
+ id: (0, envelope_1.generateMessageId)(),
251
+ from: identity.agentId,
252
+ to: peer.agentId,
253
+ action: 'adp:ping',
254
+ params: { via: 'mdns' },
255
+ timestamp: new Date().toISOString(),
256
+ }, identity.secretKey, canonical_1.canonicalize)));
257
+ console.log(' 📤 Sent adp:ping\n');
258
+ }
259
+ catch (err) {
260
+ console.log(` ⚠️ Failed to connect: ${err.message}\n`);
261
+ }
262
+ },
263
+ onPeerLost: (agentId) => {
264
+ console.log(`🔌 Peer left: ${agentId.slice(0, 50)}...`);
265
+ },
266
+ });
267
+ discovery.start();
268
+ console.log(`📡 Announcing as _adp._tcp.local`);
269
+ console.log(`🔎 Browsing for peers...\n`);
270
+ }
271
+ await sleep(600);
272
+ if (tag !== 'agent1' && !relayUrl && !discovery) {
273
+ await directConnect(identity);
274
+ }
275
+ console.log(`--------------------------------------------------`);
276
+ console.log(` Ready. Press Ctrl+C to stop.`);
277
+ if (relayClient)
278
+ console.log(` Relay active`);
279
+ if (discovery)
280
+ console.log(` mDNS active`);
281
+ if (registryClient)
282
+ console.log(` Registry active`);
283
+ console.log(`--------------------------------------------------\n`);
284
+ process.on('SIGINT', async () => {
285
+ console.log('\n👋 Shutting down...');
286
+ if (lanIpCheckInterval)
287
+ clearInterval(lanIpCheckInterval);
288
+ if (registryClient) {
289
+ try {
290
+ await registryClient.deregister();
291
+ }
292
+ catch { }
293
+ }
294
+ relayClient?.close();
295
+ discovery?.shutdown();
296
+ gateway.close();
297
+ process.exit(0);
298
+ });
299
+ // Keep process alive until SIGINT; 24-day max to prevent stale processes (fits in 32-bit int)
300
+ await new Promise((resolve) => {
301
+ const keepAlive = setTimeout(() => {
302
+ console.warn('Max uptime reached, shutting down...');
303
+ resolve();
304
+ }, 24 * 24 * 60 * 60 * 1000); // 24 days max
305
+ process.once('SIGINT', () => { clearTimeout(keepAlive); resolve(); });
306
+ });
307
+ }
308
+ async function directConnect(identity) {
309
+ const peerPort = PORT_BASE;
310
+ const PEER_URL = `http://localhost:${peerPort}/adp/agent-id`;
311
+ console.log('--- Direct connection to agent1 ---');
312
+ try {
313
+ const peerAgentId = await httpGetJson(PEER_URL).then(r => r.agent_id);
314
+ console.log(`🔍 Found: ${peerAgentId}`);
315
+ const ws = await (0, src_1.connectToAgent)(peerAgentId, `localhost:${peerPort}`, identity.agentId);
316
+ console.log(`✅ Connected to agent1\n`);
317
+ ws.on('message', (raw) => {
318
+ const env = JSON.parse(raw);
319
+ console.log(`📩 ${env.action} ← agent1 [${JSON.stringify(env.params)}]`);
320
+ });
321
+ ws.send(JSON.stringify((0, crypto_1.signEnvelope)({
322
+ protocol: 'adp/0.2',
323
+ id: (0, envelope_1.generateMessageId)(),
324
+ from: identity.agentId,
325
+ to: peerAgentId,
326
+ action: 'adp:ping',
327
+ params: {},
328
+ timestamp: new Date().toISOString(),
329
+ }, identity.secretKey, canonical_1.canonicalize)));
330
+ console.log(' 📤 Sent adp:ping\n');
331
+ }
332
+ catch {
333
+ console.log(` agent1 is not running.\n`);
334
+ }
335
+ }
336
+ function httpGetJson(url) {
337
+ return new Promise((resolve, reject) => {
338
+ http.get(url, (res) => {
339
+ let d = '';
340
+ res.on('data', c => d += c);
341
+ res.on('end', () => { try {
342
+ resolve(JSON.parse(d));
343
+ }
344
+ catch (e) {
345
+ reject(e);
346
+ } });
347
+ }).on('error', reject);
348
+ });
349
+ }
350
+ function getBanner(name) {
351
+ return `
352
+ █████╗ ██████╗ ██████╗
353
+ ██╔══██╗██╔══██╗██╔══██╗
354
+ ███████║██║ ██║██████╔╝
355
+ ██╔══██║██║ ██║██╔═══╝
356
+ ██║ ██║██████╔╝██║
357
+ ╚═╝ ╚═╝╚═════╝ ╚═╝
358
+ Agent Discovery Protocol ${name}`;
359
+ }
360
+ function sleep(ms) {
361
+ return new Promise(resolve => setTimeout(resolve, ms));
362
+ }
363
+ main().catch(err => { console.error('❌', err); process.exit(1); });
364
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { Envelope } from './envelope';
2
+ export type TaskStatus = 'PENDING' | 'WORKING' | 'COMPLETED' | 'FAILED' | 'CANCELED';
3
+ export interface Task {
4
+ taskId: string;
5
+ status: TaskStatus;
6
+ capability: string;
7
+ input: unknown;
8
+ result?: unknown;
9
+ error?: {
10
+ code: string;
11
+ message: string;
12
+ };
13
+ createdAt: string;
14
+ updatedAt: string;
15
+ }
16
+ export interface CreateTaskParams {
17
+ capability: string;
18
+ input: unknown;
19
+ context_id?: string;
20
+ }
21
+ export interface GetTaskResult {
22
+ task_id: string;
23
+ status: TaskStatus;
24
+ result?: unknown;
25
+ error?: {
26
+ code: string;
27
+ message: string;
28
+ };
29
+ created_at: string;
30
+ updated_at: string;
31
+ }
32
+ export declare class TaskManager {
33
+ private tasks;
34
+ create(capability: string, input: unknown): Task;
35
+ start(taskId: string): Task;
36
+ complete(taskId: string, result: unknown): Task;
37
+ fail(taskId: string, error: {
38
+ code: string;
39
+ message: string;
40
+ }): Task;
41
+ cancel(taskId: string): Task;
42
+ get(taskId: string): Task | undefined;
43
+ list(filter?: {
44
+ status?: TaskStatus;
45
+ cursor?: string;
46
+ limit?: number;
47
+ }): {
48
+ tasks: Task[];
49
+ nextCursor: string | null;
50
+ };
51
+ handleCreateTask(envelope: Envelope, secretKey: Uint8Array): Promise<Envelope>;
52
+ handleGetTask(envelope: Envelope, secretKey: Uint8Array): Promise<Envelope>;
53
+ handleListTasks(envelope: Envelope, secretKey: Uint8Array): Promise<Envelope>;
54
+ handleCancelTask(envelope: Envelope, secretKey: Uint8Array): Promise<Envelope>;
55
+ }
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TaskManager = void 0;
4
+ const envelope_1 = require("./envelope");
5
+ const crypto_1 = require("./crypto");
6
+ const canonical_1 = require("./canonical");
7
+ class TaskManager {
8
+ constructor() {
9
+ this.tasks = new Map();
10
+ }
11
+ create(capability, input) {
12
+ const taskId = 'task_' + Math.random().toString(36).slice(2, 10);
13
+ const now = new Date().toISOString();
14
+ const task = {
15
+ taskId,
16
+ status: 'PENDING',
17
+ capability,
18
+ input,
19
+ createdAt: now,
20
+ updatedAt: now,
21
+ };
22
+ this.tasks.set(taskId, task);
23
+ return task;
24
+ }
25
+ start(taskId) {
26
+ const task = this.tasks.get(taskId);
27
+ if (!task)
28
+ throw new Error('Task not found');
29
+ if (task.status !== 'PENDING') {
30
+ throw new Error(`Cannot start task in ${task.status} status`);
31
+ }
32
+ task.status = 'WORKING';
33
+ task.updatedAt = new Date().toISOString();
34
+ return task;
35
+ }
36
+ complete(taskId, result) {
37
+ const task = this.tasks.get(taskId);
38
+ if (!task)
39
+ throw new Error('Task not found');
40
+ if (task.status !== 'WORKING') {
41
+ throw new Error(`Cannot complete task in ${task.status} status`);
42
+ }
43
+ task.status = 'COMPLETED';
44
+ task.result = result;
45
+ task.updatedAt = new Date().toISOString();
46
+ return task;
47
+ }
48
+ fail(taskId, error) {
49
+ const task = this.tasks.get(taskId);
50
+ if (!task)
51
+ throw new Error('Task not found');
52
+ if (task.status !== 'WORKING') {
53
+ throw new Error(`Cannot fail task in ${task.status} status`);
54
+ }
55
+ task.status = 'FAILED';
56
+ task.error = error;
57
+ task.updatedAt = new Date().toISOString();
58
+ return task;
59
+ }
60
+ cancel(taskId) {
61
+ const task = this.tasks.get(taskId);
62
+ if (!task)
63
+ throw new Error('Task not found');
64
+ if (task.status === 'COMPLETED' || task.status === 'FAILED' || task.status === 'CANCELED') {
65
+ throw new Error(`Cannot cancel task in ${task.status} status`);
66
+ }
67
+ task.status = 'CANCELED';
68
+ task.updatedAt = new Date().toISOString();
69
+ return task;
70
+ }
71
+ get(taskId) {
72
+ return this.tasks.get(taskId);
73
+ }
74
+ list(filter) {
75
+ let tasks = Array.from(this.tasks.values());
76
+ if (filter?.status) {
77
+ tasks = tasks.filter((t) => t.status === filter.status);
78
+ }
79
+ tasks.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
80
+ const limit = filter?.limit ?? 20;
81
+ const start = filter?.cursor ? parseInt(filter.cursor, 10) : 0;
82
+ const page = tasks.slice(start, start + limit);
83
+ const nextCursor = start + limit < tasks.length ? String(start + limit) : null;
84
+ return { tasks: page, nextCursor };
85
+ }
86
+ async handleCreateTask(envelope, secretKey) {
87
+ const params = envelope.params;
88
+ const task = this.create(params.capability, params.input);
89
+ const reply = (0, envelope_1.buildEnvelope)(envelope.to, envelope.from, 'adp:task.create', {
90
+ task_id: task.taskId,
91
+ status: task.status,
92
+ }, { reply_to: envelope.id });
93
+ return (0, crypto_1.signEnvelope)(reply, secretKey, canonical_1.canonicalize);
94
+ }
95
+ async handleGetTask(envelope, secretKey) {
96
+ const params = envelope.params;
97
+ const task = this.get(params.task_id);
98
+ if (!task) {
99
+ const reply = (0, envelope_1.buildEnvelope)(envelope.to, envelope.from, 'adp:task.get', {}, {
100
+ reply_to: envelope.id,
101
+ error: { code: 'AGENT_NOT_FOUND', message: 'Task not found' },
102
+ });
103
+ return (0, crypto_1.signEnvelope)(reply, secretKey, canonical_1.canonicalize);
104
+ }
105
+ const result = {
106
+ task_id: task.taskId,
107
+ status: task.status,
108
+ result: task.result,
109
+ error: task.error,
110
+ created_at: task.createdAt,
111
+ updated_at: task.updatedAt,
112
+ };
113
+ const reply = (0, envelope_1.buildEnvelope)(envelope.to, envelope.from, 'adp:task.get', result, { reply_to: envelope.id });
114
+ return (0, crypto_1.signEnvelope)(reply, secretKey, canonical_1.canonicalize);
115
+ }
116
+ async handleListTasks(envelope, secretKey) {
117
+ const params = envelope.params;
118
+ const { tasks, nextCursor } = this.list(params);
119
+ const taskSummaries = tasks.map((task) => ({
120
+ task_id: task.taskId,
121
+ status: task.status,
122
+ capability: task.capability,
123
+ created_at: task.createdAt,
124
+ }));
125
+ const reply = (0, envelope_1.buildEnvelope)(envelope.to, envelope.from, 'adp:task.list', { tasks: taskSummaries, next_cursor: nextCursor }, { reply_to: envelope.id });
126
+ return (0, crypto_1.signEnvelope)(reply, secretKey, canonical_1.canonicalize);
127
+ }
128
+ async handleCancelTask(envelope, secretKey) {
129
+ const params = envelope.params;
130
+ try {
131
+ const task = this.cancel(params.task_id);
132
+ const reply = (0, envelope_1.buildEnvelope)(envelope.to, envelope.from, 'adp:task.cancel', { task_id: task.taskId, status: task.status }, { reply_to: envelope.id });
133
+ return (0, crypto_1.signEnvelope)(reply, secretKey, canonical_1.canonicalize);
134
+ }
135
+ catch (err) {
136
+ const reply = (0, envelope_1.buildEnvelope)(envelope.to, envelope.from, 'adp:task.cancel', {}, {
137
+ reply_to: envelope.id,
138
+ error: { code: 'INTERNAL_ERROR', message: err.message },
139
+ });
140
+ return (0, crypto_1.signEnvelope)(reply, secretKey, canonical_1.canonicalize);
141
+ }
142
+ }
143
+ }
144
+ exports.TaskManager = TaskManager;
145
+ //# sourceMappingURL=task-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-manager.js","sourceRoot":"","sources":["../src/task-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};