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,245 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RegistryClient = void 0;
7
+ const http_1 = __importDefault(require("http"));
8
+ const https_1 = __importDefault(require("https"));
9
+ const crypto_1 = require("crypto");
10
+ const crypto_2 = require("../crypto");
11
+ const canonical_1 = require("../canonical");
12
+ const logger_1 = require("../logger");
13
+ class RegistryClient {
14
+ constructor(options) {
15
+ this.refreshTimer = null;
16
+ this.registered = false;
17
+ this.lastSyncedRoutes = '';
18
+ this.consecutiveFailures = 0;
19
+ this.registryUrl = options.registryUrl.replace(/\/$/, '');
20
+ if (options.token && this.registryUrl.startsWith('http://')) {
21
+ (0, logger_1.getLogger)().warn('[ADP Registry Client] Bearer token sent over HTTP — use HTTPS in production.');
22
+ }
23
+ this.agentId = options.agentId;
24
+ this.manifest = options.manifest;
25
+ this.routes = options.routes;
26
+ this.token = options.token;
27
+ this.secretKey = options.secretKey;
28
+ this.refreshIntervalMs = Math.min(options.refreshIntervalMs || 3600000, 3600000);
29
+ }
30
+ async register() {
31
+ const body = JSON.stringify({
32
+ agent_id: this.agentId,
33
+ manifest: this.manifest,
34
+ routes: this.routes,
35
+ });
36
+ try {
37
+ const response = await this.request('POST', '/v1/agents', body);
38
+ this.registered = true;
39
+ this.lastSyncedRoutes = JSON.stringify(this.routes);
40
+ const ttlSeconds = response.expires_at
41
+ ? (new Date(response.expires_at).getTime() - Date.now()) / 1000
42
+ : this.refreshIntervalMs / 1000;
43
+ const ttlFromResponse = response.expires_at
44
+ ? Math.max(1, Math.floor(ttlSeconds * 1000))
45
+ : this.refreshIntervalMs;
46
+ this.startRefresh(Math.min(ttlFromResponse, this.refreshIntervalMs));
47
+ (0, logger_1.getLogger)().info(`Registered with Registry: ${this.agentId}`);
48
+ return response;
49
+ }
50
+ catch (err) {
51
+ throw err;
52
+ }
53
+ }
54
+ async updateManifest(manifest, routes) {
55
+ this.manifest = manifest;
56
+ this.routes = routes;
57
+ if (this.registered) {
58
+ const body = JSON.stringify({
59
+ agent_id: this.agentId,
60
+ manifest: this.manifest,
61
+ routes: this.routes,
62
+ });
63
+ await this.request('PUT', `/v1/agents/${encodeURIComponent(this.agentId)}`, body);
64
+ this.lastSyncedRoutes = JSON.stringify(routes);
65
+ (0, logger_1.getLogger)().info(`Registry updated: ${this.agentId}`);
66
+ }
67
+ }
68
+ async updateWithRotation(rotationEnvelope, newManifest, newRoutes, newAgentId) {
69
+ const body = JSON.stringify({
70
+ agent_id: newAgentId,
71
+ manifest: newManifest,
72
+ routes: newRoutes,
73
+ rotation: rotationEnvelope,
74
+ });
75
+ await this.request('PUT', `/v1/agents/${encodeURIComponent(this.agentId)}`, body);
76
+ this.manifest = newManifest;
77
+ this.routes = newRoutes;
78
+ this.agentId = newAgentId;
79
+ this.lastSyncedRoutes = JSON.stringify(newRoutes);
80
+ (0, logger_1.getLogger)().info(`Registry updated with key rotation: ${this.agentId}`);
81
+ }
82
+ async deregister() {
83
+ if (!this.registered)
84
+ return;
85
+ try {
86
+ await this.request('DELETE', `/v1/agents/${encodeURIComponent(this.agentId)}`);
87
+ this.stopRefresh();
88
+ this.registered = false;
89
+ (0, logger_1.getLogger)().info(`Deregistered from Registry: ${this.agentId}`);
90
+ }
91
+ catch (err) {
92
+ (0, logger_1.getLogger)().warn('[ADP Registry Client] Failed to deregister:', err);
93
+ }
94
+ }
95
+ async refresh() {
96
+ if (!this.registered)
97
+ return;
98
+ const currentRoutes = JSON.stringify(this.routes);
99
+ if (currentRoutes !== this.lastSyncedRoutes) {
100
+ const body = JSON.stringify({
101
+ agent_id: this.agentId,
102
+ manifest: this.manifest,
103
+ routes: this.routes,
104
+ });
105
+ await this.request('PUT', `/v1/agents/${encodeURIComponent(this.agentId)}`, body);
106
+ this.lastSyncedRoutes = currentRoutes;
107
+ (0, logger_1.getLogger)().info(`Registry routes synced: ${this.agentId}`);
108
+ }
109
+ else {
110
+ await this.request('POST', `/v1/agents/${encodeURIComponent(this.agentId)}/heartbeat`, JSON.stringify({ agent_id: this.agentId }));
111
+ }
112
+ }
113
+ startRefresh(intervalMs) {
114
+ this.stopRefresh();
115
+ const jitter = (0, crypto_1.randomBytes)(4).readUInt32BE(0) / 0xFFFFFFFF;
116
+ const firstDelay = intervalMs * (0.5 + jitter * 0.5);
117
+ this.scheduleRefresh(firstDelay, intervalMs);
118
+ }
119
+ scheduleRefresh(delayMs, intervalMs) {
120
+ this.refreshTimer = setTimeout(async () => {
121
+ let success = false;
122
+ try {
123
+ await this.refresh();
124
+ success = true;
125
+ }
126
+ catch (err) {
127
+ (0, logger_1.getLogger)().warn('[ADP Registry Client] Failed to refresh registration:', err);
128
+ }
129
+ if (success) {
130
+ this.consecutiveFailures = 0;
131
+ if (this.registered) {
132
+ this.scheduleRefresh(intervalMs, intervalMs);
133
+ }
134
+ }
135
+ else {
136
+ this.consecutiveFailures++;
137
+ if (this.consecutiveFailures >= 3) {
138
+ (0, logger_1.getLogger)().warn(`Registry unavailable, re-registering...`);
139
+ this.consecutiveFailures = 0;
140
+ this.registered = false;
141
+ try {
142
+ await this.register();
143
+ }
144
+ catch (err) {
145
+ (0, logger_1.getLogger)().warn('[ADP Registry Client] Failed to re-register:', err);
146
+ (0, logger_1.getLogger)().warn(`Re-registration failed, retrying in 30s...`);
147
+ this.scheduleRefresh(30000, intervalMs);
148
+ }
149
+ }
150
+ else {
151
+ this.scheduleRefresh(60000, intervalMs);
152
+ }
153
+ }
154
+ }, delayMs);
155
+ }
156
+ stopRefresh() {
157
+ if (this.refreshTimer) {
158
+ clearTimeout(this.refreshTimer);
159
+ this.refreshTimer = null;
160
+ }
161
+ }
162
+ request(method, path, body) {
163
+ return new Promise((resolve, reject) => {
164
+ const url = new URL(path, this.registryUrl);
165
+ const isHttps = url.protocol === 'https:';
166
+ const headers = {
167
+ 'Content-Type': 'application/json',
168
+ 'Content-Length': body ? Buffer.byteLength(body) : 0,
169
+ };
170
+ if (this.token) {
171
+ headers['Authorization'] = `Bearer ${this.token}`;
172
+ }
173
+ if (this.secretKey && body) {
174
+ const bodyObj = JSON.parse(body);
175
+ const timestamp = new Date().toISOString();
176
+ const signedPayload = {};
177
+ if (bodyObj.agent_id)
178
+ signedPayload.agent_id = bodyObj.agent_id;
179
+ if (bodyObj.manifest)
180
+ signedPayload.manifest = bodyObj.manifest;
181
+ if (bodyObj.routes)
182
+ signedPayload.routes = bodyObj.routes;
183
+ if (bodyObj.rotation)
184
+ signedPayload.rotation = bodyObj.rotation;
185
+ signedPayload.timestamp = timestamp;
186
+ const signed = (0, crypto_2.signEnvelope)(signedPayload, this.secretKey, canonical_1.canonicalize);
187
+ headers['X-ADP-Signature'] = signed.sig;
188
+ headers['X-ADP-Timestamp'] = timestamp;
189
+ }
190
+ const options = {
191
+ hostname: url.hostname,
192
+ port: url.port || (isHttps ? 443 : 80),
193
+ path: url.pathname,
194
+ method,
195
+ headers,
196
+ timeout: 10000,
197
+ };
198
+ const transport = isHttps ? https_1.default : http_1.default;
199
+ const req = transport.request(options, (res) => {
200
+ let data = '';
201
+ res.on('data', (chunk) => (data += chunk));
202
+ res.on('end', () => {
203
+ try {
204
+ const parsed = data ? JSON.parse(data) : {};
205
+ if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
206
+ resolve(parsed);
207
+ }
208
+ else if (res.statusCode === 409) {
209
+ // 已存在,当作用 UP 刷新
210
+ resolve(parsed);
211
+ }
212
+ else {
213
+ reject(new Error(`Registry responded with ${res.statusCode}: ${parsed.error?.message || data}`));
214
+ }
215
+ }
216
+ catch {
217
+ reject(new Error(`Registry responded with ${res.statusCode}: ${data}`));
218
+ }
219
+ });
220
+ });
221
+ req.on('timeout', () => {
222
+ req.destroy();
223
+ reject(new Error('Registry request timeout'));
224
+ });
225
+ req.on('error', (err) => {
226
+ reject(new Error(`Registry connection failed: ${err.message}`));
227
+ });
228
+ if (body) {
229
+ req.write(body);
230
+ }
231
+ req.end();
232
+ });
233
+ }
234
+ close() {
235
+ this.stopRefresh();
236
+ }
237
+ isRegistered() {
238
+ return this.registered;
239
+ }
240
+ getManifest() {
241
+ return this.manifest;
242
+ }
243
+ }
244
+ exports.RegistryClient = RegistryClient;
245
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/registry/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export interface RegistryConfig {
2
+ port: number;
3
+ host: string;
4
+ mysql: {
5
+ host: string;
6
+ port: number;
7
+ user: string;
8
+ password: string;
9
+ database: string;
10
+ };
11
+ redis: {
12
+ host: string;
13
+ port: number;
14
+ password?: string;
15
+ };
16
+ token: {
17
+ enabled: boolean;
18
+ tokens?: Record<string, {
19
+ namespace?: string;
20
+ capabilities?: string[];
21
+ }>;
22
+ };
23
+ registration: {
24
+ ttlSeconds: number;
25
+ maxAgents: number;
26
+ };
27
+ cors: {
28
+ enabled: boolean;
29
+ origins: string[];
30
+ };
31
+ }
32
+ export declare const defaultConfig: RegistryConfig;
@@ -0,0 +1,79 @@
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.defaultConfig = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ function loadConfigFile() {
40
+ const configPath = process.env.ADP_CONFIG ||
41
+ path.join(process.cwd(), 'config.json');
42
+ try {
43
+ const raw = fs.readFileSync(configPath, 'utf-8');
44
+ return JSON.parse(raw);
45
+ }
46
+ catch {
47
+ return {};
48
+ }
49
+ }
50
+ const fileConfig = loadConfigFile();
51
+ exports.defaultConfig = {
52
+ port: fileConfig.port ?? parseInt(process.env.REGISTRY_PORT || '3000'),
53
+ host: fileConfig.host ?? process.env.REGISTRY_HOST ?? '0.0.0.0',
54
+ mysql: {
55
+ host: fileConfig.mysql?.host ?? process.env.MYSQL_HOST ?? '127.0.0.1',
56
+ port: fileConfig.mysql?.port ?? parseInt(process.env.MYSQL_PORT || '3306'),
57
+ user: fileConfig.mysql?.user ?? process.env.MYSQL_USER ?? 'root',
58
+ password: fileConfig.mysql?.password ?? process.env.MYSQL_PASSWORD ?? '',
59
+ database: fileConfig.mysql?.database ?? process.env.MYSQL_DATABASE ?? 'adp_registry'
60
+ },
61
+ redis: {
62
+ host: fileConfig.redis?.host ?? process.env.REDIS_HOST ?? '127.0.0.1',
63
+ port: fileConfig.redis?.port ?? parseInt(process.env.REDIS_PORT || '6379'),
64
+ password: fileConfig.redis?.password ?? process.env.REDIS_PASSWORD
65
+ },
66
+ token: {
67
+ enabled: fileConfig.token?.enabled ?? (process.env.TOKEN_ENABLED === 'true'),
68
+ tokens: fileConfig.token?.tokens ?? {}
69
+ },
70
+ registration: {
71
+ ttlSeconds: fileConfig.registration?.ttlSeconds ?? parseInt(process.env.REGISTRATION_TTL || '86400'),
72
+ maxAgents: fileConfig.registration?.maxAgents ?? parseInt(process.env.MAX_AGENTS || '10000')
73
+ },
74
+ cors: {
75
+ enabled: fileConfig.cors?.enabled ?? (process.env.CORS_ENABLED === 'true'),
76
+ origins: fileConfig.cors?.origins ?? (process.env.CORS_ORIGINS ? process.env.CORS_ORIGINS.split(',') : ['*'])
77
+ }
78
+ };
79
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/registry/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AA+B7B,SAAS,cAAc;IACrB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU;QACvC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC;IAE1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;AAEvB,QAAA,aAAa,GAAmB;IAC3C,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,MAAM,CAAC;IACtE,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,SAAS;IAC/D,KAAK,EAAE;QACL,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;QACrE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC;QAC1E,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM;QAChE,QAAQ,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE;QACxE,QAAQ,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,cAAc;KACrF;IACD,KAAK,EAAE;QACL,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;QACrE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC;QAC1E,QAAQ,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;KACnE;IACD,KAAK,EAAE;QACL,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM,CAAC;QAC5E,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE;KACvC;IACD,YAAY,EAAE;QACZ,UAAU,EAAE,UAAU,CAAC,YAAY,EAAE,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC;QACpG,SAAS,EAAE,UAAU,CAAC,YAAY,EAAE,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC;KAC7F;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM,CAAC;QAC1E,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KAC9G;CACF,CAAC"}
@@ -0,0 +1,10 @@
1
+ import mysql from 'mysql2/promise';
2
+ import { RegistryConfig } from './config';
3
+ export declare class Database {
4
+ private pool;
5
+ constructor(config: RegistryConfig);
6
+ initialize(): Promise<void>;
7
+ private createTables;
8
+ getConnection(): Promise<mysql.PoolConnection>;
9
+ close(): Promise<void>;
10
+ }
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Database = void 0;
7
+ const promise_1 = __importDefault(require("mysql2/promise"));
8
+ class Database {
9
+ constructor(config) {
10
+ this.pool = promise_1.default.createPool({
11
+ host: config.mysql.host,
12
+ port: config.mysql.port,
13
+ user: config.mysql.user,
14
+ password: config.mysql.password,
15
+ database: config.mysql.database,
16
+ waitForConnections: true,
17
+ connectionLimit: 10,
18
+ queueLimit: 0,
19
+ enableKeepAlive: true,
20
+ keepAliveInitialDelay: 10000,
21
+ });
22
+ }
23
+ async initialize() {
24
+ const connection = await this.pool.getConnection();
25
+ try {
26
+ console.log('Connected to MySQL database');
27
+ await this.createTables(connection);
28
+ }
29
+ finally {
30
+ connection.release();
31
+ }
32
+ }
33
+ async createTables(connection) {
34
+ await connection.execute(`
35
+ CREATE TABLE IF NOT EXISTS agents (
36
+ id BIGINT AUTO_INCREMENT PRIMARY KEY,
37
+ initial_id VARCHAR(512) NOT NULL UNIQUE,
38
+ current_agent_id VARCHAR(512) NOT NULL,
39
+ namespace VARCHAR(256) NOT NULL,
40
+ manifest JSON NOT NULL,
41
+ routes JSON NOT NULL,
42
+ last_seen DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
43
+ expires_at DATETIME NOT NULL,
44
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
45
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
46
+ INDEX idx_namespace (namespace),
47
+ INDEX idx_last_seen (last_seen),
48
+ INDEX idx_expires_at (expires_at)
49
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC
50
+ `);
51
+ await connection.execute(`
52
+ CREATE TABLE IF NOT EXISTS rotation_chain (
53
+ id BIGINT AUTO_INCREMENT PRIMARY KEY,
54
+ initial_id VARCHAR(512) NOT NULL,
55
+ sequence INT NOT NULL,
56
+ from_agent_id VARCHAR(512) NOT NULL,
57
+ to_agent_id VARCHAR(512) NOT NULL,
58
+ envelope JSON NOT NULL,
59
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
60
+ FOREIGN KEY (initial_id) REFERENCES agents(initial_id) ON DELETE CASCADE,
61
+ INDEX idx_sequence (sequence),
62
+ UNIQUE KEY uk_initial_sequence (initial_id, sequence)
63
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC
64
+ `);
65
+ await connection.execute(`
66
+ CREATE TABLE IF NOT EXISTS agent_capabilities (
67
+ id BIGINT AUTO_INCREMENT PRIMARY KEY,
68
+ initial_id VARCHAR(512) NOT NULL,
69
+ capability VARCHAR(255) NOT NULL,
70
+ FOREIGN KEY (initial_id) REFERENCES agents(initial_id) ON DELETE CASCADE,
71
+ INDEX idx_capability (capability),
72
+ UNIQUE KEY uk_initial_capability (initial_id, capability)
73
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC
74
+ `);
75
+ await connection.execute(`
76
+ CREATE TABLE IF NOT EXISTS tokens (
77
+ id BIGINT AUTO_INCREMENT PRIMARY KEY,
78
+ token_hash VARCHAR(128) NOT NULL UNIQUE,
79
+ namespace VARCHAR(256),
80
+ capabilities JSON,
81
+ is_active BOOLEAN NOT NULL DEFAULT TRUE,
82
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
83
+ expires_at DATETIME,
84
+ INDEX idx_namespace (namespace)
85
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC
86
+ `);
87
+ console.log('Tables initialized');
88
+ }
89
+ getConnection() {
90
+ return this.pool.getConnection();
91
+ }
92
+ async close() {
93
+ await this.pool.end();
94
+ }
95
+ }
96
+ exports.Database = Database;
97
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/registry/db.ts"],"names":[],"mappings":";;;;;;AAAA,6DAAmC;AAGnC,MAAa,QAAQ;IAGnB,YAAY,MAAsB;QAChC,IAAI,CAAC,IAAI,GAAG,iBAAK,CAAC,UAAU,CAAC;YAC3B,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;YACvB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;YACvB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;YACvB,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;YAC/B,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;YAC/B,kBAAkB,EAAE,IAAI;YACxB,eAAe,EAAE,EAAE;YACnB,UAAU,EAAE,CAAC;YACb,eAAe,EAAE,IAAI;YACrB,qBAAqB,EAAE,KAAK;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,UAAgC;QACzD,MAAM,UAAU,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;KAgBxB,CAAC,CAAC;QAEH,MAAM,UAAU,CAAC,OAAO,CAAC;;;;;;;;;;;;;KAaxB,CAAC,CAAC;QAEH,MAAM,UAAU,CAAC,OAAO,CAAC;;;;;;;;;KASxB,CAAC,CAAC;QAEH,MAAM,UAAU,CAAC,OAAO,CAAC;;;;;;;;;;;KAWxB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACpC,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,CAAC;CACF;AAhGD,4BAgGC"}
@@ -0,0 +1,5 @@
1
+ export * from './config';
2
+ export * from './db';
3
+ export * from './cache';
4
+ export * from './service';
5
+ export * from './client';
@@ -0,0 +1,22 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./config"), exports);
18
+ __exportStar(require("./db"), exports);
19
+ __exportStar(require("./cache"), exports);
20
+ __exportStar(require("./service"), exports);
21
+ __exportStar(require("./client"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/registry/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,uCAAqB;AACrB,0CAAwB;AACxB,4CAA0B;AAC1B,2CAAyB"}
@@ -0,0 +1,45 @@
1
+ import { Database } from './db';
2
+ import { Cache } from './cache';
3
+ import { RegistryConfig } from './config';
4
+ import { Manifest } from '../manifest';
5
+ import { Route } from '../manifest';
6
+ export interface AgentRegistrationRequest {
7
+ agent_id: string;
8
+ manifest: Manifest;
9
+ routes: Route[];
10
+ rotation?: any;
11
+ token?: string;
12
+ }
13
+ export declare class RegistryService {
14
+ private app;
15
+ private db;
16
+ private cache;
17
+ private config;
18
+ private heartbeatQueue;
19
+ private heartbeatDrainTimer;
20
+ private heartbeatBatchSize;
21
+ private rateLimitMap;
22
+ private rateLimitMax;
23
+ private rateLimitWindowMs;
24
+ private rateLimitCleanupTimer;
25
+ constructor(config: RegistryConfig, db: Database, cache: Cache);
26
+ private startRateLimitCleanup;
27
+ private startHeartbeatDrain;
28
+ private setupMiddleware;
29
+ private checkRateLimit;
30
+ private tokenAuth;
31
+ private signatureAuth;
32
+ private setupRoutes;
33
+ private normalizeInitialId;
34
+ private healthCheck;
35
+ private registerAgent;
36
+ private updateAgent;
37
+ private getAgent;
38
+ private deleteAgent;
39
+ private heartbeat;
40
+ private drainHeartbeats;
41
+ private searchAgents;
42
+ private validateRegistrationRequest;
43
+ start(): void;
44
+ stop(): Promise<void>;
45
+ }