@agent-relay/daemon 0.1.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 (109) hide show
  1. package/dist/agent-manager.d.ts +134 -0
  2. package/dist/agent-manager.d.ts.map +1 -0
  3. package/dist/agent-manager.js +578 -0
  4. package/dist/agent-manager.js.map +1 -0
  5. package/dist/agent-registry.d.ts +99 -0
  6. package/dist/agent-registry.d.ts.map +1 -0
  7. package/dist/agent-registry.js +213 -0
  8. package/dist/agent-registry.js.map +1 -0
  9. package/dist/agent-signing.d.ts +158 -0
  10. package/dist/agent-signing.d.ts.map +1 -0
  11. package/dist/agent-signing.js +523 -0
  12. package/dist/agent-signing.js.map +1 -0
  13. package/dist/api.d.ts +106 -0
  14. package/dist/api.d.ts.map +1 -0
  15. package/dist/api.js +876 -0
  16. package/dist/api.js.map +1 -0
  17. package/dist/auth.d.ts +94 -0
  18. package/dist/auth.d.ts.map +1 -0
  19. package/dist/auth.js +197 -0
  20. package/dist/auth.js.map +1 -0
  21. package/dist/channel-membership-store.d.ts +55 -0
  22. package/dist/channel-membership-store.d.ts.map +1 -0
  23. package/dist/channel-membership-store.js +176 -0
  24. package/dist/channel-membership-store.js.map +1 -0
  25. package/dist/cli-auth.d.ts +89 -0
  26. package/dist/cli-auth.d.ts.map +1 -0
  27. package/dist/cli-auth.js +792 -0
  28. package/dist/cli-auth.js.map +1 -0
  29. package/dist/cloud-sync.d.ts +150 -0
  30. package/dist/cloud-sync.d.ts.map +1 -0
  31. package/dist/cloud-sync.js +446 -0
  32. package/dist/cloud-sync.js.map +1 -0
  33. package/dist/connection.d.ts +130 -0
  34. package/dist/connection.d.ts.map +1 -0
  35. package/dist/connection.js +438 -0
  36. package/dist/connection.js.map +1 -0
  37. package/dist/consensus-integration.d.ts +167 -0
  38. package/dist/consensus-integration.d.ts.map +1 -0
  39. package/dist/consensus-integration.js +371 -0
  40. package/dist/consensus-integration.js.map +1 -0
  41. package/dist/consensus.d.ts +271 -0
  42. package/dist/consensus.d.ts.map +1 -0
  43. package/dist/consensus.js +632 -0
  44. package/dist/consensus.js.map +1 -0
  45. package/dist/delivery-tracker.d.ts +34 -0
  46. package/dist/delivery-tracker.d.ts.map +1 -0
  47. package/dist/delivery-tracker.js +104 -0
  48. package/dist/delivery-tracker.js.map +1 -0
  49. package/dist/enhanced-features.d.ts +118 -0
  50. package/dist/enhanced-features.d.ts.map +1 -0
  51. package/dist/enhanced-features.js +176 -0
  52. package/dist/enhanced-features.js.map +1 -0
  53. package/dist/index.d.ts +31 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +37 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/migrations/index.d.ts +73 -0
  58. package/dist/migrations/index.d.ts.map +1 -0
  59. package/dist/migrations/index.js +241 -0
  60. package/dist/migrations/index.js.map +1 -0
  61. package/dist/orchestrator.d.ts +217 -0
  62. package/dist/orchestrator.d.ts.map +1 -0
  63. package/dist/orchestrator.js +1143 -0
  64. package/dist/orchestrator.js.map +1 -0
  65. package/dist/rate-limiter.d.ts +68 -0
  66. package/dist/rate-limiter.d.ts.map +1 -0
  67. package/dist/rate-limiter.js +130 -0
  68. package/dist/rate-limiter.js.map +1 -0
  69. package/dist/registry.d.ts +9 -0
  70. package/dist/registry.d.ts.map +1 -0
  71. package/dist/registry.js +9 -0
  72. package/dist/registry.js.map +1 -0
  73. package/dist/relay-ledger.d.ts +261 -0
  74. package/dist/relay-ledger.d.ts.map +1 -0
  75. package/dist/relay-ledger.js +532 -0
  76. package/dist/relay-ledger.js.map +1 -0
  77. package/dist/relay-watchdog.d.ts +125 -0
  78. package/dist/relay-watchdog.d.ts.map +1 -0
  79. package/dist/relay-watchdog.js +611 -0
  80. package/dist/relay-watchdog.js.map +1 -0
  81. package/dist/repo-manager.d.ts +116 -0
  82. package/dist/repo-manager.d.ts.map +1 -0
  83. package/dist/repo-manager.js +384 -0
  84. package/dist/repo-manager.js.map +1 -0
  85. package/dist/router.d.ts +370 -0
  86. package/dist/router.d.ts.map +1 -0
  87. package/dist/router.js +1437 -0
  88. package/dist/router.js.map +1 -0
  89. package/dist/server.d.ts +174 -0
  90. package/dist/server.d.ts.map +1 -0
  91. package/dist/server.js +1001 -0
  92. package/dist/server.js.map +1 -0
  93. package/dist/spawn-manager.d.ts +78 -0
  94. package/dist/spawn-manager.d.ts.map +1 -0
  95. package/dist/spawn-manager.js +165 -0
  96. package/dist/spawn-manager.js.map +1 -0
  97. package/dist/sync-queue.d.ts +116 -0
  98. package/dist/sync-queue.d.ts.map +1 -0
  99. package/dist/sync-queue.js +361 -0
  100. package/dist/sync-queue.js.map +1 -0
  101. package/dist/types.d.ts +133 -0
  102. package/dist/types.d.ts.map +1 -0
  103. package/dist/types.js +6 -0
  104. package/dist/types.js.map +1 -0
  105. package/dist/workspace-manager.d.ts +80 -0
  106. package/dist/workspace-manager.d.ts.map +1 -0
  107. package/dist/workspace-manager.js +314 -0
  108. package/dist/workspace-manager.js.map +1 -0
  109. package/package.json +52 -0
@@ -0,0 +1,523 @@
1
+ /**
2
+ * Agent Authentication via Cryptographic Signing
3
+ *
4
+ * Provides agent identity verification through message signing.
5
+ * Extends the existing UID/GID-based auth with cryptographic guarantees.
6
+ *
7
+ * Features:
8
+ * - HMAC-SHA256 for shared-secret signing (simpler deployment)
9
+ * - Ed25519 for asymmetric signing (zero-trust mode)
10
+ * - Message signature verification
11
+ * - Key rotation support
12
+ * - Agent identity attestation
13
+ */
14
+ import { createHmac, randomBytes, createHash, generateKeyPairSync, sign, verify, createPrivateKey, createPublicKey, } from 'node:crypto';
15
+ import fs from 'node:fs';
16
+ import path from 'node:path';
17
+ import os from 'node:os';
18
+ // =============================================================================
19
+ // Default Configuration
20
+ // =============================================================================
21
+ const DEFAULT_CONFIG = {
22
+ enabled: false,
23
+ algorithm: 'hmac-sha256',
24
+ requireSignatures: false,
25
+ };
26
+ const DEFAULT_KEY_DIR = path.join(os.homedir(), '.agent-relay', 'keys');
27
+ // =============================================================================
28
+ // Key Management
29
+ // =============================================================================
30
+ /**
31
+ * Generate a new agent key pair.
32
+ */
33
+ export function generateAgentKey(agentName, algorithm = 'hmac-sha256', expiresInHours) {
34
+ const now = Date.now();
35
+ if (algorithm === 'hmac-sha256') {
36
+ // For HMAC, we generate a random secret
37
+ const secret = randomBytes(32).toString('hex');
38
+ const keyId = createHash('sha256')
39
+ .update(`${agentName}:${secret}:${now}`)
40
+ .digest('hex')
41
+ .substring(0, 16);
42
+ return {
43
+ agentName,
44
+ publicKey: keyId, // Key ID serves as public identifier
45
+ privateKey: secret,
46
+ createdAt: now,
47
+ expiresAt: expiresInHours ? now + expiresInHours * 3600000 : undefined,
48
+ algorithm,
49
+ };
50
+ }
51
+ // Ed25519 asymmetric key generation
52
+ const { publicKey: pubKeyObj, privateKey: privKeyObj } = generateKeyPairSync('ed25519');
53
+ // Export keys in PEM format for storage
54
+ const privateKeyPem = privKeyObj.export({ type: 'pkcs8', format: 'pem' });
55
+ const publicKeyPem = pubKeyObj.export({ type: 'spki', format: 'pem' });
56
+ // Create a key ID from the public key hash (for rotation tracking)
57
+ const _keyId = createHash('sha256')
58
+ .update(publicKeyPem)
59
+ .digest('hex')
60
+ .substring(0, 16);
61
+ return {
62
+ agentName,
63
+ publicKey: publicKeyPem,
64
+ privateKey: privateKeyPem,
65
+ createdAt: now,
66
+ expiresAt: expiresInHours ? now + expiresInHours * 3600000 : undefined,
67
+ algorithm,
68
+ };
69
+ }
70
+ /**
71
+ * Save agent key to disk (private key file).
72
+ */
73
+ export function saveAgentKey(key, keyDir = DEFAULT_KEY_DIR) {
74
+ if (!fs.existsSync(keyDir)) {
75
+ fs.mkdirSync(keyDir, { recursive: true, mode: 0o700 });
76
+ }
77
+ const keyPath = path.join(keyDir, `${key.agentName}.key.json`);
78
+ fs.writeFileSync(keyPath, JSON.stringify(key, null, 2), {
79
+ mode: 0o600, // Owner read/write only
80
+ });
81
+ }
82
+ /**
83
+ * Load agent key from disk.
84
+ */
85
+ export function loadAgentKey(agentName, keyDir = DEFAULT_KEY_DIR) {
86
+ const keyPath = path.join(keyDir, `${agentName}.key.json`);
87
+ if (!fs.existsSync(keyPath)) {
88
+ return null;
89
+ }
90
+ try {
91
+ const content = fs.readFileSync(keyPath, 'utf-8');
92
+ const key = JSON.parse(content);
93
+ // Check expiry
94
+ if (key.expiresAt && Date.now() > key.expiresAt) {
95
+ console.warn(`[signing] Key for ${agentName} has expired`);
96
+ return null;
97
+ }
98
+ return key;
99
+ }
100
+ catch (err) {
101
+ console.error(`[signing] Failed to load key for ${agentName}:`, err);
102
+ return null;
103
+ }
104
+ }
105
+ /**
106
+ * Load or generate agent key.
107
+ */
108
+ export function getOrCreateAgentKey(agentName, config, keyDir = DEFAULT_KEY_DIR) {
109
+ let key = loadAgentKey(agentName, keyDir);
110
+ if (!key) {
111
+ key = generateAgentKey(agentName, config.algorithm, config.keyRotationHours);
112
+ saveAgentKey(key, keyDir);
113
+ console.log(`[signing] Generated new key for ${agentName}`);
114
+ }
115
+ return key;
116
+ }
117
+ // =============================================================================
118
+ // Message Signing
119
+ // =============================================================================
120
+ /**
121
+ * Sign a message using the agent's private key.
122
+ */
123
+ export function signMessage(content, key) {
124
+ const signedAt = Date.now();
125
+ const dataToSign = `${key.agentName}:${signedAt}:${content}`;
126
+ let signature;
127
+ let keyId;
128
+ if (key.algorithm === 'hmac-sha256') {
129
+ signature = createHmac('sha256', key.privateKey)
130
+ .update(dataToSign)
131
+ .digest('hex');
132
+ keyId = key.publicKey; // For HMAC, publicKey is the key ID
133
+ }
134
+ else {
135
+ // Ed25519 signing using Node.js native crypto
136
+ const privateKeyObj = createPrivateKey(key.privateKey);
137
+ const signatureBuffer = sign(null, Buffer.from(dataToSign), privateKeyObj);
138
+ signature = signatureBuffer.toString('hex');
139
+ // For Ed25519, derive key ID from public key hash
140
+ keyId = createHash('sha256')
141
+ .update(key.publicKey)
142
+ .digest('hex')
143
+ .substring(0, 16);
144
+ }
145
+ return {
146
+ content,
147
+ signature,
148
+ signer: key.agentName,
149
+ signedAt,
150
+ keyId,
151
+ algorithm: key.algorithm,
152
+ };
153
+ }
154
+ /**
155
+ * Sign with shared secret (HMAC mode where all agents share a secret).
156
+ */
157
+ export function signWithSharedSecret(content, agentName, sharedSecret) {
158
+ const signedAt = Date.now();
159
+ const dataToSign = `${agentName}:${signedAt}:${content}`;
160
+ const signature = createHmac('sha256', sharedSecret)
161
+ .update(dataToSign)
162
+ .digest('hex');
163
+ const keyId = createHash('sha256')
164
+ .update(sharedSecret)
165
+ .digest('hex')
166
+ .substring(0, 16);
167
+ return {
168
+ content,
169
+ signature,
170
+ signer: agentName,
171
+ signedAt,
172
+ keyId,
173
+ algorithm: 'hmac-sha256',
174
+ };
175
+ }
176
+ // =============================================================================
177
+ // Message Verification
178
+ // =============================================================================
179
+ /**
180
+ * Verify a signed message using the agent's public key.
181
+ */
182
+ export function verifyMessage(signed, key) {
183
+ // Check signer matches key
184
+ if (signed.signer !== key.agentName) {
185
+ return {
186
+ valid: false,
187
+ error: `Signer mismatch: expected ${key.agentName}, got ${signed.signer}`,
188
+ };
189
+ }
190
+ // Check key ID for HMAC, or derive it for Ed25519
191
+ const expectedKeyId = key.algorithm === 'hmac-sha256'
192
+ ? key.publicKey
193
+ : createHash('sha256').update(key.publicKey).digest('hex').substring(0, 16);
194
+ if (signed.keyId !== expectedKeyId) {
195
+ return {
196
+ valid: false,
197
+ error: `Key ID mismatch: expected ${expectedKeyId}, got ${signed.keyId}`,
198
+ };
199
+ }
200
+ // Check expiry
201
+ if (key.expiresAt && Date.now() > key.expiresAt) {
202
+ return {
203
+ valid: false,
204
+ error: 'Signing key has expired',
205
+ };
206
+ }
207
+ // Verify signature
208
+ const dataToVerify = `${signed.signer}:${signed.signedAt}:${signed.content}`;
209
+ if (key.algorithm === 'hmac-sha256') {
210
+ // HMAC verification: recompute and compare
211
+ const expectedSignature = createHmac('sha256', key.privateKey)
212
+ .update(dataToVerify)
213
+ .digest('hex');
214
+ if (signed.signature !== expectedSignature) {
215
+ return {
216
+ valid: false,
217
+ error: 'Invalid signature',
218
+ };
219
+ }
220
+ }
221
+ else {
222
+ // Ed25519 verification using public key only (true asymmetric verification)
223
+ try {
224
+ const publicKeyObj = createPublicKey(key.publicKey);
225
+ const signatureBuffer = Buffer.from(signed.signature, 'hex');
226
+ const isValid = verify(null, Buffer.from(dataToVerify), publicKeyObj, signatureBuffer);
227
+ if (!isValid) {
228
+ return {
229
+ valid: false,
230
+ error: 'Invalid signature',
231
+ };
232
+ }
233
+ }
234
+ catch (err) {
235
+ return {
236
+ valid: false,
237
+ error: `Signature verification failed: ${err instanceof Error ? err.message : 'unknown error'}`,
238
+ };
239
+ }
240
+ }
241
+ return {
242
+ valid: true,
243
+ signer: signed.signer,
244
+ signedAt: signed.signedAt,
245
+ };
246
+ }
247
+ /**
248
+ * Verify an Ed25519 signed message using only the public key.
249
+ * This is the key advantage of asymmetric signing - verifiers don't need the private key.
250
+ */
251
+ export function verifyEd25519WithPublicKey(signed, publicKeyPem, expectedSigner) {
252
+ if (signed.algorithm !== 'ed25519') {
253
+ return {
254
+ valid: false,
255
+ error: `Algorithm mismatch: expected ed25519, got ${signed.algorithm}`,
256
+ };
257
+ }
258
+ if (signed.signer !== expectedSigner) {
259
+ return {
260
+ valid: false,
261
+ error: `Signer mismatch: expected ${expectedSigner}, got ${signed.signer}`,
262
+ };
263
+ }
264
+ const expectedKeyId = createHash('sha256')
265
+ .update(publicKeyPem)
266
+ .digest('hex')
267
+ .substring(0, 16);
268
+ if (signed.keyId !== expectedKeyId) {
269
+ return {
270
+ valid: false,
271
+ error: `Key ID mismatch: expected ${expectedKeyId}, got ${signed.keyId}`,
272
+ };
273
+ }
274
+ const dataToVerify = `${signed.signer}:${signed.signedAt}:${signed.content}`;
275
+ try {
276
+ const publicKeyObj = createPublicKey(publicKeyPem);
277
+ const signatureBuffer = Buffer.from(signed.signature, 'hex');
278
+ const isValid = verify(null, Buffer.from(dataToVerify), publicKeyObj, signatureBuffer);
279
+ if (!isValid) {
280
+ return {
281
+ valid: false,
282
+ error: 'Invalid signature',
283
+ };
284
+ }
285
+ }
286
+ catch (err) {
287
+ return {
288
+ valid: false,
289
+ error: `Signature verification failed: ${err instanceof Error ? err.message : 'unknown error'}`,
290
+ };
291
+ }
292
+ return {
293
+ valid: true,
294
+ signer: signed.signer,
295
+ signedAt: signed.signedAt,
296
+ };
297
+ }
298
+ /**
299
+ * Verify with shared secret.
300
+ */
301
+ export function verifyWithSharedSecret(signed, sharedSecret) {
302
+ const dataToSign = `${signed.signer}:${signed.signedAt}:${signed.content}`;
303
+ const expectedSignature = createHmac('sha256', sharedSecret)
304
+ .update(dataToSign)
305
+ .digest('hex');
306
+ if (signed.signature !== expectedSignature) {
307
+ return {
308
+ valid: false,
309
+ error: 'Invalid signature',
310
+ };
311
+ }
312
+ return {
313
+ valid: true,
314
+ signer: signed.signer,
315
+ signedAt: signed.signedAt,
316
+ };
317
+ }
318
+ // =============================================================================
319
+ // Agent Signing Manager
320
+ // =============================================================================
321
+ /**
322
+ * Manages agent signing keys and verification.
323
+ */
324
+ export class AgentSigningManager {
325
+ config;
326
+ keyDir;
327
+ keys = new Map();
328
+ constructor(config = {}, keyDir) {
329
+ this.config = { ...DEFAULT_CONFIG, ...config };
330
+ this.keyDir = keyDir ?? DEFAULT_KEY_DIR;
331
+ }
332
+ /**
333
+ * Check if signing is enabled.
334
+ */
335
+ get enabled() {
336
+ return this.config.enabled;
337
+ }
338
+ /**
339
+ * Get or load key for an agent.
340
+ */
341
+ getKey(agentName) {
342
+ // Check cache
343
+ const cached = this.keys.get(agentName);
344
+ if (cached) {
345
+ // Check expiry
346
+ if (cached.expiresAt && Date.now() > cached.expiresAt) {
347
+ this.keys.delete(agentName);
348
+ }
349
+ else {
350
+ return cached;
351
+ }
352
+ }
353
+ // Load from disk
354
+ const key = loadAgentKey(agentName, this.keyDir);
355
+ if (key) {
356
+ this.keys.set(agentName, key);
357
+ }
358
+ return key;
359
+ }
360
+ /**
361
+ * Register a new agent (generate and save key).
362
+ */
363
+ registerAgent(agentName) {
364
+ const key = getOrCreateAgentKey(agentName, this.config, this.keyDir);
365
+ this.keys.set(agentName, key);
366
+ return key;
367
+ }
368
+ /**
369
+ * Sign a message for an agent.
370
+ */
371
+ sign(agentName, content) {
372
+ if (!this.config.enabled) {
373
+ return null;
374
+ }
375
+ // Shared secret mode
376
+ if (this.config.sharedSecret) {
377
+ return signWithSharedSecret(content, agentName, this.config.sharedSecret);
378
+ }
379
+ // Per-agent key mode
380
+ const key = this.getKey(agentName);
381
+ if (!key) {
382
+ console.warn(`[signing] No key found for ${agentName}, cannot sign`);
383
+ return null;
384
+ }
385
+ return signMessage(content, key);
386
+ }
387
+ /**
388
+ * Verify a signed message.
389
+ */
390
+ verify(signed) {
391
+ if (!this.config.enabled) {
392
+ return { valid: true }; // Signing disabled, accept all
393
+ }
394
+ // Check if unsigned messages are allowed from this agent
395
+ if (this.config.allowUnsignedFrom?.includes(signed.signer)) {
396
+ return { valid: true, signer: signed.signer };
397
+ }
398
+ // Shared secret mode
399
+ if (this.config.sharedSecret) {
400
+ return verifyWithSharedSecret(signed, this.config.sharedSecret);
401
+ }
402
+ // Per-agent key mode
403
+ const key = this.getKey(signed.signer);
404
+ if (!key) {
405
+ if (this.config.requireSignatures) {
406
+ return {
407
+ valid: false,
408
+ error: `No key found for signer ${signed.signer}`,
409
+ };
410
+ }
411
+ // Key not found but signatures not required
412
+ return { valid: true, signer: signed.signer };
413
+ }
414
+ return verifyMessage(signed, key);
415
+ }
416
+ /**
417
+ * Check if a message requires verification.
418
+ */
419
+ requiresVerification(agentName) {
420
+ if (!this.config.enabled)
421
+ return false;
422
+ if (!this.config.requireSignatures)
423
+ return false;
424
+ if (this.config.allowUnsignedFrom?.includes(agentName))
425
+ return false;
426
+ return true;
427
+ }
428
+ /**
429
+ * Rotate key for an agent.
430
+ */
431
+ rotateKey(agentName) {
432
+ // Generate new key
433
+ const newKey = generateAgentKey(agentName, this.config.algorithm, this.config.keyRotationHours);
434
+ // Save and cache
435
+ saveAgentKey(newKey, this.keyDir);
436
+ this.keys.set(agentName, newKey);
437
+ console.log(`[signing] Rotated key for ${agentName}`);
438
+ return newKey;
439
+ }
440
+ /**
441
+ * Export public key for an agent (for sharing with other systems).
442
+ */
443
+ exportPublicKey(agentName) {
444
+ const key = this.getKey(agentName);
445
+ if (!key)
446
+ return null;
447
+ return {
448
+ agentName: key.agentName,
449
+ publicKey: key.publicKey,
450
+ algorithm: key.algorithm,
451
+ };
452
+ }
453
+ }
454
+ // =============================================================================
455
+ // Integration Helpers
456
+ // =============================================================================
457
+ /**
458
+ * Attach signature to protocol envelope.
459
+ */
460
+ export function attachSignature(envelope, signed) {
461
+ return {
462
+ ...envelope,
463
+ _sig: {
464
+ s: signed.signature,
465
+ k: signed.keyId,
466
+ t: signed.signedAt,
467
+ a: signed.algorithm,
468
+ },
469
+ };
470
+ }
471
+ /**
472
+ * Extract signature from protocol envelope.
473
+ */
474
+ export function extractSignature(envelope) {
475
+ const sig = envelope._sig;
476
+ if (!sig || !sig.s || !sig.k || !sig.t) {
477
+ return null;
478
+ }
479
+ // Reconstruct the signed content (envelope without _sig)
480
+ const { _sig, ...rest } = envelope;
481
+ const content = JSON.stringify(rest);
482
+ // Safely extract signer from envelope
483
+ const signer = typeof envelope.from === 'string' ? envelope.from : 'unknown';
484
+ // Validate algorithm value
485
+ const algorithm = sig.a === 'ed25519' ? 'ed25519' : 'hmac-sha256';
486
+ return {
487
+ content,
488
+ signature: sig.s,
489
+ signer,
490
+ signedAt: sig.t,
491
+ keyId: sig.k,
492
+ algorithm,
493
+ };
494
+ }
495
+ // =============================================================================
496
+ // Configuration Loading
497
+ // =============================================================================
498
+ const SIGNING_CONFIG_PATHS = [
499
+ path.join(os.homedir(), '.agent-relay', 'signing.json'),
500
+ path.join(os.homedir(), '.config', 'agent-relay', 'signing.json'),
501
+ '/etc/agent-relay/signing.json',
502
+ ];
503
+ /**
504
+ * Load signing configuration from file.
505
+ */
506
+ export function loadSigningConfig(configPath) {
507
+ const paths = configPath ? [configPath] : SIGNING_CONFIG_PATHS;
508
+ for (const p of paths) {
509
+ if (fs.existsSync(p)) {
510
+ try {
511
+ const content = fs.readFileSync(p, 'utf-8');
512
+ const config = JSON.parse(content);
513
+ console.log(`[signing] Loaded config from ${p}`);
514
+ return { ...DEFAULT_CONFIG, ...config };
515
+ }
516
+ catch (err) {
517
+ console.error(`[signing] Failed to parse ${p}:`, err);
518
+ }
519
+ }
520
+ }
521
+ return DEFAULT_CONFIG;
522
+ }
523
+ //# sourceMappingURL=agent-signing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-signing.js","sourceRoot":"","sources":["../src/agent-signing.ts"],"names":[],"mappings":"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"}
package/dist/api.d.ts ADDED
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Daemon API
3
+ * REST and WebSocket API for dashboard communication.
4
+ */
5
+ import { EventEmitter } from 'events';
6
+ import type { ApiDaemonConfig } from './types.js';
7
+ export declare class DaemonApi extends EventEmitter {
8
+ private server?;
9
+ private wss?;
10
+ private workspaceManager;
11
+ private agentManager;
12
+ private sessions;
13
+ private routes;
14
+ private config;
15
+ private allowedOrigins;
16
+ private allowAllOrigins;
17
+ private outputSubscribers;
18
+ private wsSubscriptions;
19
+ private clientAlive;
20
+ private pingInterval?;
21
+ constructor(config: ApiDaemonConfig);
22
+ /**
23
+ * Resolve allowed origins from config/env (comma-separated list).
24
+ * Empty list means no cross-origin access is permitted.
25
+ */
26
+ private loadAllowedOrigins;
27
+ /**
28
+ * Return allowed origin for CORS or null if explicitly blocked.
29
+ * Undefined means no CORS header will be set (same-origin/server-to-server).
30
+ */
31
+ private resolveAllowedOrigin;
32
+ /**
33
+ * Track an output subscription for a client/agent pair
34
+ */
35
+ private addOutputSubscription;
36
+ /**
37
+ * Remove output subscriptions for a client. If agentId is provided, only that
38
+ * subscription is removed.
39
+ */
40
+ private removeOutputSubscription;
41
+ /**
42
+ * Send a snapshot of recent output to the client.
43
+ */
44
+ private sendOutputSnapshot;
45
+ /**
46
+ * Broadcast output events only to subscribed clients
47
+ */
48
+ private broadcastOutputEvent;
49
+ /**
50
+ * Clamp and normalize requested output limit
51
+ */
52
+ private normalizeLimit;
53
+ /**
54
+ * Start the API server
55
+ */
56
+ start(): Promise<void>;
57
+ /**
58
+ * Stop the API server
59
+ */
60
+ stop(): Promise<void>;
61
+ /**
62
+ * Setup API routes
63
+ */
64
+ private setupRoutes;
65
+ /**
66
+ * Handle HTTP request
67
+ */
68
+ private handleRequest;
69
+ /**
70
+ * Parse incoming request
71
+ */
72
+ private parseRequest;
73
+ /**
74
+ * Parse request body
75
+ */
76
+ private parseBody;
77
+ /**
78
+ * Route request to handler
79
+ */
80
+ private routeRequest;
81
+ /**
82
+ * Match route pattern against request
83
+ */
84
+ private matchRoute;
85
+ /**
86
+ * Handle WebSocket connection
87
+ */
88
+ private handleWebSocketConnection;
89
+ /**
90
+ * Send initial state to WebSocket client
91
+ */
92
+ private sendInitialState;
93
+ /**
94
+ * Handle WebSocket message from client
95
+ */
96
+ private handleWebSocketMessage;
97
+ /**
98
+ * Send message to WebSocket client
99
+ */
100
+ private sendToClient;
101
+ /**
102
+ * Broadcast event to all WebSocket clients
103
+ */
104
+ private broadcastEvent;
105
+ }
106
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,OAAO,KAAK,EACV,eAAe,EAOhB,MAAM,YAAY,CAAC;AA4BpB,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,CAAC,MAAM,CAAC,CAAc;IAC7B,OAAO,CAAC,GAAG,CAAC,CAAkB;IAC9B,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,eAAe,CAAU;IAEjC,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,eAAe,CAAkC;IAGzD,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,YAAY,CAAC,CAAiB;gBAE1B,MAAM,EAAE,eAAe;IAqBnC;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAqB5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAU7B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAuBhC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAwB5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B3B;;OAEG;IACH,OAAO,CAAC,WAAW;IA2bnB;;OAEG;YACW,aAAa;IAqD3B;;OAEG;YACW,YAAY;IAsB1B;;OAEG;IACH,OAAO,CAAC,SAAS;IAiBjB;;OAEG;YACW,YAAY;IAY1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAkClB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA0CjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACH,OAAO,CAAC,cAAc;CAWvB"}