@theaiinc/yggdrasil 0.2.1 → 0.3.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 (31) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +157 -0
  3. package/dist/src/index.d.ts +6 -1
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +5 -0
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/orchestration-controller.d.ts +13 -1
  8. package/dist/src/orchestration-controller.d.ts.map +1 -1
  9. package/dist/src/orchestration-controller.js +419 -50
  10. package/dist/src/orchestration-controller.js.map +1 -1
  11. package/dist/src/services/realm-lifecycle.d.ts +49 -0
  12. package/dist/src/services/realm-lifecycle.d.ts.map +1 -0
  13. package/dist/src/services/realm-lifecycle.js +154 -0
  14. package/dist/src/services/realm-lifecycle.js.map +1 -0
  15. package/dist/src/services/realm-provisioner.d.ts +45 -0
  16. package/dist/src/services/realm-provisioner.d.ts.map +1 -0
  17. package/dist/src/services/realm-provisioner.js +102 -0
  18. package/dist/src/services/realm-provisioner.js.map +1 -0
  19. package/dist/src/services/realm-registry.d.ts +83 -0
  20. package/dist/src/services/realm-registry.d.ts.map +1 -0
  21. package/dist/src/services/realm-registry.js +136 -0
  22. package/dist/src/services/realm-registry.js.map +1 -0
  23. package/dist/src/services/realm-scheduler.d.ts +47 -0
  24. package/dist/src/services/realm-scheduler.d.ts.map +1 -0
  25. package/dist/src/services/realm-scheduler.js +112 -0
  26. package/dist/src/services/realm-scheduler.js.map +1 -0
  27. package/dist/src/types/index.d.ts +270 -1
  28. package/dist/src/types/index.d.ts.map +1 -1
  29. package/dist/src/types/index.js +6 -1
  30. package/dist/src/types/index.js.map +1 -1
  31. package/package.json +25 -5
@@ -4,9 +4,18 @@ import compression from 'compression';
4
4
  import helmet from 'helmet';
5
5
  import { getLogger } from './services/logger.js';
6
6
  import { nanoid } from 'nanoid';
7
+ import { RealmRegistry } from './services/realm-registry.js';
8
+ import { RealmScheduler } from './services/realm-scheduler.js';
9
+ import { RealmProvisioner } from './services/realm-provisioner.js';
10
+ import { RealmLifecycleService } from './services/realm-lifecycle.js';
7
11
  const app = express();
8
12
  const logger = getLogger();
9
13
  const runners = new Map();
14
+ // ─── Realm lifecycle services ───────────────────────────────────
15
+ const realmRegistry = new RealmRegistry();
16
+ const realmScheduler = new RealmScheduler(realmRegistry, (runnerId) => runners.get(runnerId));
17
+ const realmProvisioner = new RealmProvisioner(realmRegistry);
18
+ const realmLifecycle = new RealmLifecycleService(realmRegistry);
10
19
  // ─── API key authentication ─────────────────────────────────────
11
20
  const API_KEYS = (process.env['API_KEYS'] || '')
12
21
  .split(',')
@@ -58,38 +67,77 @@ app.get('/health', (_req, res) => {
58
67
  },
59
68
  });
60
69
  });
70
+ function escapePrometheusLabelValue(value) {
71
+ return value.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n');
72
+ }
73
+ function runnerLabels(id, name) {
74
+ return `runner="${escapePrometheusLabelValue(id)}",name="${escapePrometheusLabelValue(name)}"`;
75
+ }
61
76
  app.get('/metrics', (_req, res) => {
62
- const online = Array.from(runners.values()).filter(r => r.status === 'online');
77
+ // Snapshot runner state once so concurrent heartbeats cannot produce duplicate
78
+ // series with different values within a single scrape response.
79
+ const snapshot = Array.from(runners.entries());
80
+ const online = snapshot.filter(([, r]) => r.status === 'online');
81
+ const offlineCount = snapshot.length - online.length;
82
+ const tasksRunning = snapshot.reduce((sum, [, r]) => sum + r.tasks.filter(t => t.status === 'running').length, 0);
63
83
  const metrics = [
64
84
  '# HELP yggdrasil_runners_total Total number of registered runners',
65
85
  '# TYPE yggdrasil_runners_total gauge',
66
- `yggdrasil_runners_total ${runners.size}`,
86
+ `yggdrasil_runners_total ${snapshot.length}`,
67
87
  '# HELP yggdrasil_runners_online Number of online runners',
68
88
  '# TYPE yggdrasil_runners_online gauge',
69
89
  `yggdrasil_runners_online ${online.length}`,
70
90
  '# HELP yggdrasil_runners_offline Number of offline runners',
71
91
  '# TYPE yggdrasil_runners_offline gauge',
72
- `yggdrasil_runners_offline ${runners.size - online.length}`,
92
+ `yggdrasil_runners_offline ${offlineCount}`,
73
93
  '# HELP yggdrasil_uptime_seconds Server uptime in seconds',
74
- '# TYPE yggdrasil_uptime_seconds counter',
94
+ '# TYPE yggdrasil_uptime_seconds gauge',
75
95
  `yggdrasil_uptime_seconds ${process.uptime()}`,
76
96
  '# HELP yggdrasil_tasks_running Number of currently running tasks across all runners',
77
97
  '# TYPE yggdrasil_tasks_running gauge',
78
- `yggdrasil_tasks_running ${Array.from(runners.values()).reduce((sum, r) => sum + r.tasks.filter(t => t.status === 'running').length, 0)}`,
98
+ `yggdrasil_tasks_running ${tasksRunning}`,
79
99
  ];
80
- // Per-runner resource metrics
81
- for (const [id, runner] of runners.entries()) {
82
- if (runner.resources && runner.status === 'online') {
83
- const labels = `runner="${id}",name="${runner.name}"`;
84
- metrics.push(`# HELP yggdrasil_runner_cpu_percent CPU usage percent per runner`);
85
- metrics.push(`# TYPE yggdrasil_runner_cpu_percent gauge`);
86
- metrics.push(`yggdrasil_runner_cpu_percent{${labels}} ${runner.resources.cpu.percent}`);
87
- metrics.push(`# HELP yggdrasil_runner_memory_percent Memory usage percent per runner`);
88
- metrics.push(`# TYPE yggdrasil_runner_memory_percent gauge`);
89
- metrics.push(`yggdrasil_runner_memory_percent{${labels}} ${runner.resources.memory.percent}`);
90
- metrics.push(`# HELP yggdrasil_runner_memory_used_bytes Memory used bytes per runner`);
91
- metrics.push(`# TYPE yggdrasil_runner_memory_used_bytes gauge`);
92
- metrics.push(`yggdrasil_runner_memory_used_bytes{${labels}} ${runner.resources.memory.used}`);
100
+ if (EXPECTED_RUNNER_VERSION) {
101
+ metrics.push('# HELP yggdrasil_expected_runner_version Expected runner version (always 1) — label carries the expected version', '# TYPE yggdrasil_expected_runner_version gauge', `yggdrasil_expected_runner_version{version="${escapePrometheusLabelValue(EXPECTED_RUNNER_VERSION)}"} 1`);
102
+ }
103
+ const onlineWithResources = online.filter(([, r]) => r.resources);
104
+ if (onlineWithResources.length > 0) {
105
+ metrics.push('# HELP yggdrasil_runner_cpu_percent CPU usage percent per runner', '# TYPE yggdrasil_runner_cpu_percent gauge');
106
+ for (const [id, runner] of onlineWithResources) {
107
+ metrics.push(`yggdrasil_runner_cpu_percent{${runnerLabels(id, runner.name)}} ${runner.resources.cpu.percent}`);
108
+ }
109
+ metrics.push('# HELP yggdrasil_runner_memory_percent Memory usage percent per runner', '# TYPE yggdrasil_runner_memory_percent gauge');
110
+ for (const [id, runner] of onlineWithResources) {
111
+ metrics.push(`yggdrasil_runner_memory_percent{${runnerLabels(id, runner.name)}} ${runner.resources.memory.percent}`);
112
+ }
113
+ metrics.push('# HELP yggdrasil_runner_memory_used_bytes Memory used bytes per runner', '# TYPE yggdrasil_runner_memory_used_bytes gauge');
114
+ for (const [id, runner] of onlineWithResources) {
115
+ metrics.push(`yggdrasil_runner_memory_used_bytes{${runnerLabels(id, runner.name)}} ${runner.resources.memory.used}`);
116
+ }
117
+ }
118
+ const outdatedRunners = EXPECTED_RUNNER_VERSION
119
+ ? snapshot.filter(([, r]) => r.version !== EXPECTED_RUNNER_VERSION)
120
+ : [];
121
+ const pendingUpdateRunners = snapshot.filter(([, r]) => r.pendingUpdate);
122
+ if (snapshot.length > 0) {
123
+ metrics.push('# HELP yggdrasil_runner_version_info Runner version (always 1) — labels carry version', '# TYPE yggdrasil_runner_version_info gauge');
124
+ for (const [id, runner] of snapshot) {
125
+ const verLabels = `${runnerLabels(id, runner.name)},version="${escapePrometheusLabelValue(runner.version)}"`;
126
+ metrics.push(`yggdrasil_runner_version_info{${verLabels}} 1`);
127
+ }
128
+ }
129
+ if (outdatedRunners.length > 0) {
130
+ metrics.push('# HELP yggdrasil_runner_outdated Outdated runner flag (1 = version mismatch)', '# TYPE yggdrasil_runner_outdated gauge');
131
+ for (const [id, runner] of outdatedRunners) {
132
+ const outdatedLabels = `${runnerLabels(id, runner.name)},current="${escapePrometheusLabelValue(runner.version)}",expected="${escapePrometheusLabelValue(EXPECTED_RUNNER_VERSION)}"`;
133
+ metrics.push(`yggdrasil_runner_outdated{${outdatedLabels}} 1`);
134
+ }
135
+ }
136
+ if (pendingUpdateRunners.length > 0) {
137
+ metrics.push('# HELP yggdrasil_runner_pending_update Pending update flag per runner (1 = update pending)', '# TYPE yggdrasil_runner_pending_update gauge');
138
+ for (const [id, runner] of pendingUpdateRunners) {
139
+ const updLabels = `${runnerLabels(id, runner.name)},current_version="${escapePrometheusLabelValue(runner.version)}",target_version="${escapePrometheusLabelValue(runner.pendingUpdate.version)}"`;
140
+ metrics.push(`yggdrasil_runner_pending_update{${updLabels}} 1`);
93
141
  }
94
142
  }
95
143
  res.set('Content-Type', 'text/plain; charset=utf-8');
@@ -99,20 +147,31 @@ app.get('/metrics', (_req, res) => {
99
147
  app.post('/runners/register', (req, res) => {
100
148
  const body = req.body;
101
149
  const runnerId = body.runnerId || nanoid();
150
+ // Upsert: preserve existing tasks and templates when re-registering (lease expiry, reconnect)
151
+ const existing = runners.get(runnerId);
152
+ const templates = (body.realmTemplates ?? []).map(t => ({
153
+ id: t.id,
154
+ type: t.type,
155
+ capabilities: (t.capabilities ?? []),
156
+ }));
102
157
  runners.set(runnerId, {
103
158
  runnerId,
104
159
  name: body.name || 'unknown',
105
160
  endpoint: body.endpoint || 'unknown',
106
161
  version: body.version || '0.1.0',
107
162
  capabilities: body.capabilities || [],
163
+ realmTemplates: templates,
108
164
  labels: body.labels || {},
109
165
  lastHeartbeat: new Date(),
110
166
  status: 'online',
111
167
  ...(body.resources ? { resources: body.resources } : {}),
112
- tasks: body.tasks || [],
168
+ // Preserve existing tasks on re-registration
169
+ tasks: existing?.tasks ?? body.tasks ?? [],
113
170
  });
114
- logger.info('Runner registered', { runnerId, name: body.name, endpoint: body.endpoint });
115
- res.status(201).json({ runnerId, status: 'registered' });
171
+ // Sync realm templates into the registry
172
+ realmRegistry.setTemplates(runnerId, templates);
173
+ logger.info('Runner registered', { runnerId, name: body.name, endpoint: body.endpoint, reRegistered: !!existing });
174
+ res.status(201).json({ runnerId, status: existing ? 're-registered' : 'registered' });
116
175
  });
117
176
  app.post('/runners/heartbeat', (req, res) => {
118
177
  const body = req.body;
@@ -130,8 +189,47 @@ app.post('/runners/heartbeat', (req, res) => {
130
189
  if (body.tasks) {
131
190
  runner.tasks = body.tasks;
132
191
  }
133
- logger.debug('Runner heartbeat received', { runnerId });
134
- res.json({ status: 'ok' });
192
+ // If there is a pending update, include it in the response and clear it
193
+ const pendingUpdate = runner.pendingUpdate;
194
+ if (pendingUpdate) {
195
+ delete runner.pendingUpdate;
196
+ }
197
+ logger.debug('Runner heartbeat received', { runnerId, hasPendingUpdate: !!pendingUpdate });
198
+ res.json({ status: 'ok', ...(pendingUpdate ? { pendingUpdate } : {}) });
199
+ });
200
+ /**
201
+ * Request an update for a specific runner.
202
+ * The update is stored and delivered on the next heartbeat response.
203
+ * The runner defers execution until all running tasks complete.
204
+ */
205
+ app.post('/runners/:runnerId/request-update', (req, res) => {
206
+ const runner = runners.get(req.params.runnerId);
207
+ if (!runner) {
208
+ res.status(404).json({ error: 'Runner not found' });
209
+ return;
210
+ }
211
+ const body = req.body;
212
+ if (!body.version) {
213
+ res.status(400).json({ error: 'version is required' });
214
+ return;
215
+ }
216
+ runner.pendingUpdate = {
217
+ version: body.version,
218
+ ...(body.command !== undefined ? { command: body.command } : {}),
219
+ ...(body.downloadUrl !== undefined ? { downloadUrl: body.downloadUrl } : {}),
220
+ ...(body.metadata !== undefined ? { metadata: body.metadata } : {}),
221
+ };
222
+ logger.info('Update requested for runner', {
223
+ runnerId: runner.runnerId,
224
+ version: body.version,
225
+ hasCommand: !!body.command,
226
+ hasDownloadUrl: !!body.downloadUrl,
227
+ });
228
+ res.json({
229
+ status: 'update_requested',
230
+ runnerId: runner.runnerId,
231
+ pendingUpdate: runner.pendingUpdate,
232
+ });
135
233
  });
136
234
  app.post('/runners/update', (req, res) => {
137
235
  const body = req.body;
@@ -154,6 +252,7 @@ app.post('/runners/offline', (req, res) => {
154
252
  return;
155
253
  }
156
254
  runners.get(runnerId).status = 'offline';
255
+ realmRegistry.removeTemplates(runnerId);
157
256
  logger.info('Runner went offline', { runnerId });
158
257
  res.json({ status: 'offline' });
159
258
  });
@@ -223,6 +322,7 @@ app.get('/api/runners', (_req, res) => {
223
322
  endpoint: r.endpoint,
224
323
  version: r.version,
225
324
  capabilities: r.capabilities,
325
+ realmTemplates: r.realmTemplates,
226
326
  labels: r.labels,
227
327
  status: r.status,
228
328
  lastHeartbeat: r.lastHeartbeat,
@@ -240,37 +340,306 @@ app.get('/api/runners/:runnerId', (req, res) => {
240
340
  }
241
341
  res.json(runner);
242
342
  });
243
- // ─── Lease-based offline detection ──────────────────────────────
244
- const LEASE_TTL_MS = parseInt(process.env['LEASE_TTL_MS'] || '60000', 10);
245
- setInterval(() => {
246
- const now = Date.now();
247
- const stale = [];
248
- for (const [runnerId, runner] of runners.entries()) {
249
- if (runner.status === 'offline')
250
- continue;
251
- const elapsed = now - runner.lastHeartbeat.getTime();
252
- if (elapsed > LEASE_TTL_MS) {
253
- stale.push(runnerId);
254
- }
343
+ // ─── Session management ─────────────────────────────────────────
344
+ const sessions = new Map();
345
+ function validateApiKey(req) {
346
+ if (API_KEYS.length === 0)
347
+ return true;
348
+ const apiKey = req.headers['x-api-key'];
349
+ return !!apiKey && API_KEYS.includes(apiKey);
350
+ }
351
+ /**
352
+ * Create a new interaction session.
353
+ *
354
+ * Flow:
355
+ * 1. Validate request
356
+ * 2. RealmScheduler decides which realm/realm template to use
357
+ * 3. RealmProvisioner ensures the realm exists (spawn or attach)
358
+ * 4. Create SessionDescriptor with realm endpoints
359
+ * 5. Mark active and register
360
+ */
361
+ app.post('/api/v1/sessions', async (req, res) => {
362
+ const body = req.body;
363
+ if (!body.type || !['computer-use', 'phone-use'].includes(body.type)) {
364
+ res.status(400).json({ error: 'Invalid or missing session type. Must be "computer-use" or "phone-use".' });
365
+ return;
255
366
  }
256
- for (const runnerId of stale) {
257
- const runner = runners.get(runnerId);
258
- runner.status = 'offline';
259
- logger.warn('Runner marked offline due to heartbeat timeout', {
260
- runnerId,
261
- name: runner.name,
262
- missedBy: `${Math.round((now - runner.lastHeartbeat.getTime()) / 1000)}s`,
367
+ try {
368
+ // Step 1: Schedule — decide realm allocation
369
+ const allocation = await realmScheduler.schedule(body);
370
+ // Step 2: Provision ensure realm exists
371
+ const realm = await realmProvisioner.ensureRealm(allocation, body.ownerId);
372
+ // Step 3: Create session attached to realm
373
+ const sessionId = `session-${nanoid(12)}`;
374
+ const now = new Date().toISOString();
375
+ const descriptor = {
376
+ id: sessionId,
377
+ type: body.type,
378
+ state: 'creating',
379
+ observationEndpoint: realm.endpoints.observation,
380
+ inputEndpoint: realm.endpoints.input,
381
+ capabilities: body.capabilities ?? (body.type === 'computer-use'
382
+ ? ['mouse', 'keyboard', 'scroll', 'clipboard']
383
+ : ['touch', 'keyboard', 'scroll']),
384
+ observationMethod: 'screenshot',
385
+ realmId: realm.id,
386
+ ...(body.ownerId !== undefined ? { ownerId: body.ownerId } : {}),
387
+ ...(body.participantIds !== undefined ? { participantIds: body.participantIds } : {}),
388
+ createdAt: now,
389
+ updatedAt: now,
390
+ metadata: {
391
+ ...body.metadata,
392
+ runnerId: realm.runnerId,
393
+ allocationAction: allocation.action,
394
+ },
395
+ };
396
+ descriptor.state = 'active';
397
+ sessions.set(sessionId, descriptor);
398
+ logger.info('Session created', {
399
+ sessionId,
400
+ type: body.type,
401
+ realmId: realm.id,
402
+ runnerId: realm.runnerId,
403
+ allocationAction: allocation.action,
263
404
  });
405
+ const response = { sessionId, descriptor };
406
+ res.status(201).json(response);
407
+ }
408
+ catch (error) {
409
+ const message = error instanceof Error ? error.message : 'Unknown error';
410
+ logger.error('Failed to create session', { error: message });
411
+ res.status(503).json({ error: `Unable to create session: ${message}` });
264
412
  }
265
- }, 10_000);
413
+ });
414
+ /**
415
+ * Get session details.
416
+ */
417
+ app.get('/api/v1/sessions/:sessionId', (req, res) => {
418
+ const session = sessions.get(req.params.sessionId);
419
+ if (!session) {
420
+ res.status(404).json({ error: 'Session not found' });
421
+ return;
422
+ }
423
+ res.json(session);
424
+ });
425
+ /**
426
+ * List all sessions, optionally filtered by type or state.
427
+ */
428
+ app.get('/api/v1/sessions', (req, res) => {
429
+ const { type, state } = req.query;
430
+ let result = Array.from(sessions.values());
431
+ if (type) {
432
+ result = result.filter((s) => s.type === type);
433
+ }
434
+ if (state) {
435
+ result = result.filter((s) => s.state === state);
436
+ }
437
+ res.json({ sessions: result, count: result.length });
438
+ });
439
+ /**
440
+ * Update session state (pause, resume, terminate).
441
+ */
442
+ app.patch('/api/v1/sessions/:sessionId', (req, res) => {
443
+ const session = sessions.get(req.params.sessionId);
444
+ if (!session) {
445
+ res.status(404).json({ error: 'Session not found' });
446
+ return;
447
+ }
448
+ const body = req.body;
449
+ const validTransitions = {
450
+ creating: ['active', 'failed', 'terminated'],
451
+ active: ['paused', 'completed', 'failed', 'terminated'],
452
+ paused: ['active', 'terminated'],
453
+ completed: [],
454
+ failed: ['terminated'],
455
+ terminated: [],
456
+ };
457
+ if (body.state) {
458
+ const allowed = validTransitions[session.state] || [];
459
+ if (!allowed.includes(body.state)) {
460
+ res.status(400).json({
461
+ error: `Invalid state transition from "${session.state}" to "${body.state}". Allowed: ${allowed.join(', ')}`,
462
+ });
463
+ return;
464
+ }
465
+ session.state = body.state;
466
+ }
467
+ if (body.metadata) {
468
+ session.metadata = { ...session.metadata, ...body.metadata };
469
+ }
470
+ session.updatedAt = new Date().toISOString();
471
+ logger.info('Session state updated', { sessionId: session.id, state: session.state });
472
+ res.json(session);
473
+ });
474
+ /**
475
+ * Delete/terminate a session.
476
+ */
477
+ app.delete('/api/v1/sessions/:sessionId', (req, res) => {
478
+ const session = sessions.get(req.params.sessionId);
479
+ if (!session) {
480
+ res.status(404).json({ error: 'Session not found' });
481
+ return;
482
+ }
483
+ session.state = 'terminated';
484
+ session.updatedAt = new Date().toISOString();
485
+ logger.info('Session terminated', { sessionId: session.id });
486
+ res.json({ status: 'terminated', sessionId: session.id });
487
+ });
488
+ // ─── Realm management API ────────────────────────────────────────
489
+ /**
490
+ * List all realms managed by Yggdrasil.
491
+ */
492
+ app.get('/api/v1/realms', (_req, res) => {
493
+ const realms = realmRegistry.listRealms();
494
+ res.json({ realms, count: realms.length });
495
+ });
496
+ /**
497
+ * Get a realm by ID.
498
+ */
499
+ app.get('/api/v1/realms/:realmId', (req, res) => {
500
+ const realm = realmRegistry.getRealm(req.params.realmId);
501
+ if (!realm) {
502
+ res.status(404).json({ error: 'Realm not found' });
503
+ return;
504
+ }
505
+ res.json(realm);
506
+ });
507
+ /**
508
+ * Update realm state and endpoints (called by runners when a realm becomes ready).
509
+ */
510
+ app.patch('/api/v1/realms/:realmId', (req, res) => {
511
+ const realm = realmRegistry.getRealm(req.params.realmId);
512
+ if (!realm) {
513
+ res.status(404).json({ error: 'Realm not found' });
514
+ return;
515
+ }
516
+ const body = req.body;
517
+ if (body.state) {
518
+ realmRegistry.updateRealmState(realm.id, body.state);
519
+ }
520
+ if (body.endpoints) {
521
+ realmProvisioner.updateRealmEndpoints(realm.id, body.state ?? realm.state, body.endpoints);
522
+ }
523
+ const updated = realmRegistry.getRealm(realm.id);
524
+ res.json(updated);
525
+ });
526
+ /**
527
+ * Destroy a realm.
528
+ */
529
+ app.delete('/api/v1/realms/:realmId', async (req, res) => {
530
+ const realm = realmRegistry.getRealm(req.params.realmId);
531
+ if (!realm) {
532
+ res.status(404).json({ error: 'Realm not found' });
533
+ return;
534
+ }
535
+ await realmProvisioner.destroyRealm(realm.id);
536
+ res.json({ status: 'destroyed', realmId: realm.id });
537
+ });
538
+ // ─── Realm lifecycle routes (relayed by Ratatoskr) ─────────────────
539
+ /**
540
+ * Register a realm that has just come online.
541
+ * Called by Ratatoskr on behalf of a Realm instance.
542
+ */
543
+ app.post('/api/v1/realms/register', (req, res) => {
544
+ const body = req.body;
545
+ if (!body.realmId || !body.runnerId || !body.template) {
546
+ res.status(400).json({ error: 'realmId, runnerId, and template are required' });
547
+ return;
548
+ }
549
+ const registration = {
550
+ realmId: body.realmId,
551
+ runnerId: body.runnerId,
552
+ template: body.template,
553
+ version: body.version ?? '0.1.0',
554
+ capabilities: (body.capabilities ?? []),
555
+ endpoints: body.endpoints ?? { observation: '', input: '' },
556
+ registrationToken: body.registrationToken,
557
+ startedAt: body.startedAt ?? new Date().toISOString(),
558
+ };
559
+ const realm = realmLifecycle.registerRealm(registration, body.template);
560
+ res.status(201).json(realm);
561
+ });
562
+ /**
563
+ * Heartbeat from a realm instance (relayed by Ratatoskr).
564
+ */
565
+ app.post('/api/v1/realms/heartbeat', (req, res) => {
566
+ const body = req.body;
567
+ if (!body.realmId) {
568
+ res.status(400).json({ error: 'realmId is required' });
569
+ return;
570
+ }
571
+ const heartbeat = {
572
+ realmId: body.realmId,
573
+ uptime: body.uptime ?? 0,
574
+ healthy: body.healthy ?? true,
575
+ memoryMb: body.memoryMb,
576
+ cpuPercent: body.cpuPercent,
577
+ activeSessions: body.activeSessions ?? 0,
578
+ };
579
+ const realm = realmLifecycle.heartbeatRealm(heartbeat);
580
+ if (!realm) {
581
+ res.status(404).json({ error: 'Realm not found' });
582
+ return;
583
+ }
584
+ res.json({ status: 'ok', realmId: realm.id, state: realm.state });
585
+ });
586
+ /**
587
+ * Deregister a realm on shutdown (relayed by Ratatoskr).
588
+ */
589
+ app.post('/api/v1/realms/deregister', (req, res) => {
590
+ const body = req.body;
591
+ if (!body.realmId) {
592
+ res.status(400).json({ error: 'realmId is required' });
593
+ return;
594
+ }
595
+ const deregistration = {
596
+ realmId: body.realmId,
597
+ reason: body.reason ?? 'shutdown',
598
+ };
599
+ realmLifecycle.deregisterRealm(deregistration);
600
+ res.json({ status: 'deregistered', realmId: deregistration.realmId });
601
+ });
602
+ // ─── Lease-based offline detection ──────────────────────────────
603
+ const LEASE_TTL_MS = parseInt(process.env['LEASE_TTL_MS'] || '60000', 10);
604
+ const EXPECTED_RUNNER_VERSION = process.env['EXPECTED_RUNNER_VERSION'] || '';
605
+ if (typeof process.env.VITEST === 'undefined') {
606
+ // Runner lease TTL check
607
+ setInterval(() => {
608
+ const now = Date.now();
609
+ const stale = [];
610
+ for (const [runnerId, runner] of runners.entries()) {
611
+ if (runner.status === 'offline')
612
+ continue;
613
+ const elapsed = now - runner.lastHeartbeat.getTime();
614
+ if (elapsed > LEASE_TTL_MS) {
615
+ stale.push(runnerId);
616
+ }
617
+ }
618
+ for (const runnerId of stale) {
619
+ const runner = runners.get(runnerId);
620
+ runner.status = 'offline';
621
+ logger.warn('Runner marked offline due to heartbeat timeout', {
622
+ runnerId,
623
+ name: runner.name,
624
+ missedBy: `${Math.round((now - runner.lastHeartbeat.getTime()) / 1000)}s`,
625
+ });
626
+ }
627
+ }, 10_000);
628
+ // Realm stale detection
629
+ realmLifecycle.startStaleDetection();
630
+ }
266
631
  // ─── Start server ───────────────────────────────────────────────
267
632
  const PORT = parseInt(process.env['PORT'] || '3000', 10);
268
- app.listen(PORT, '0.0.0.0', () => {
269
- logger.info('Orchestration controller started (runner-only mode via Ratatoskr)', {
270
- port: PORT,
271
- environment: process.env['NODE_ENV'] || 'development',
272
- apiKeysConfigured: API_KEYS.length > 0,
273
- leaseTtlMs: LEASE_TTL_MS,
633
+ // In test mode (vitest), export app/runners without starting the server
634
+ if (typeof process.env.VITEST === 'undefined') {
635
+ app.listen(PORT, '0.0.0.0', () => {
636
+ logger.info('Orchestration controller started (runner-only mode via Ratatoskr)', {
637
+ port: PORT,
638
+ environment: process.env['NODE_ENV'] || 'development',
639
+ apiKeysConfigured: API_KEYS.length > 0,
640
+ leaseTtlMs: LEASE_TTL_MS,
641
+ });
274
642
  });
275
- });
643
+ }
644
+ export { app, runners, sessions, realmRegistry, realmScheduler, realmProvisioner, realmLifecycle };
276
645
  //# sourceMappingURL=orchestration-controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orchestration-controller.js","sourceRoot":"","sources":["../../src/orchestration-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestration-controller.js","sourceRoot":"","sources":["../../src/orchestration-controller.ts"],"names":[],"mappings":"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"}