@theaiinc/yggdrasil 0.0.1 → 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.
- package/dist/src/index.d.ts +2 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/orchestration-controller.d.ts +2 -0
- package/dist/src/orchestration-controller.d.ts.map +1 -0
- package/dist/src/orchestration-controller.js +191 -0
- package/dist/src/orchestration-controller.js.map +1 -0
- package/dist/src/services/logger.d.ts +1 -14
- package/dist/src/services/logger.d.ts.map +1 -1
- package/dist/src/services/logger.js +0 -55
- package/dist/src/services/logger.js.map +1 -1
- package/dist/src/types/index.d.ts +0 -129
- package/dist/src/types/index.d.ts.map +1 -1
- package/package.json +9 -26
- package/README.md +0 -340
- package/dist/src/services/agent-manager.d.ts +0 -69
- package/dist/src/services/agent-manager.d.ts.map +0 -1
- package/dist/src/services/agent-manager.js +0 -227
- package/dist/src/services/agent-manager.js.map +0 -1
- package/dist/src/services/load-balancer.d.ts +0 -62
- package/dist/src/services/load-balancer.d.ts.map +0 -1
- package/dist/src/services/load-balancer.js +0 -221
- package/dist/src/services/load-balancer.js.map +0 -1
package/dist/src/index.d.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export { Logger } from './services/logger';
|
|
4
|
-
export type { AgentInfo, AgentMetrics, RequestContext, LoadBalancerConfig, OrchestrationConfig, MonitoringConfig, LogLevel, } from './types';
|
|
1
|
+
export { Logger } from './services/logger.js';
|
|
2
|
+
export type { LogLevel, LoggerConfig, } from './types/index.js';
|
|
5
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,YAAY,EACV,QAAQ,EACR,YAAY,GACb,MAAM,kBAAkB,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
1
|
// Main entry point for @theaiinc/yggdrasil package
|
|
2
|
-
export {
|
|
3
|
-
export { LoadBalancer } from './services/load-balancer';
|
|
4
|
-
export { Logger } from './services/logger';
|
|
2
|
+
export { Logger } from './services/logger.js';
|
|
5
3
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,mDAAmD;AAEnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,mDAAmD;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestration-controller.d.ts","sourceRoot":"","sources":["../../src/orchestration-controller.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import cors from 'cors';
|
|
3
|
+
import compression from 'compression';
|
|
4
|
+
import helmet from 'helmet';
|
|
5
|
+
import { getLogger } from './services/logger.js';
|
|
6
|
+
import { nanoid } from 'nanoid';
|
|
7
|
+
const app = express();
|
|
8
|
+
const logger = getLogger();
|
|
9
|
+
const runners = new Map();
|
|
10
|
+
// ─── API key authentication ─────────────────────────────────────
|
|
11
|
+
const API_KEYS = (process.env['API_KEYS'] || '')
|
|
12
|
+
.split(',')
|
|
13
|
+
.map(k => k.trim())
|
|
14
|
+
.filter(k => k !== '');
|
|
15
|
+
function apiKeyAuth(req, res, next) {
|
|
16
|
+
if (req.path === '/health' || req.path === '/metrics') {
|
|
17
|
+
next();
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (API_KEYS.length === 0) {
|
|
21
|
+
next();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const apiKey = req.headers['x-api-key'];
|
|
25
|
+
if (!apiKey || !API_KEYS.includes(apiKey)) {
|
|
26
|
+
res.status(401).json({ error: 'Unauthorized: invalid or missing API key' });
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
next();
|
|
30
|
+
}
|
|
31
|
+
// ─── Middleware ──────────────────────────────────────────────────
|
|
32
|
+
app.use(helmet({ contentSecurityPolicy: false }));
|
|
33
|
+
app.use(cors());
|
|
34
|
+
app.use(compression());
|
|
35
|
+
app.use(express.json());
|
|
36
|
+
app.use(apiKeyAuth);
|
|
37
|
+
app.use((req, _res, next) => {
|
|
38
|
+
logger.info('Incoming request', {
|
|
39
|
+
method: req.method,
|
|
40
|
+
path: req.path,
|
|
41
|
+
requestId: req.headers['x-request-id'] || 'unknown',
|
|
42
|
+
});
|
|
43
|
+
next();
|
|
44
|
+
});
|
|
45
|
+
// ─── Health / Metrics / Liveness ────────────────────────────────
|
|
46
|
+
app.get('/health', (_req, res) => {
|
|
47
|
+
const online = Array.from(runners.values()).filter(r => r.status === 'online');
|
|
48
|
+
const offlineCount = runners.size - online.length;
|
|
49
|
+
res.json({
|
|
50
|
+
status: 'healthy',
|
|
51
|
+
timestamp: new Date().toISOString(),
|
|
52
|
+
version: '0.1.0',
|
|
53
|
+
uptime: process.uptime(),
|
|
54
|
+
runners: {
|
|
55
|
+
total: runners.size,
|
|
56
|
+
online: online.length,
|
|
57
|
+
offline: offlineCount,
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
app.get('/metrics', (_req, res) => {
|
|
62
|
+
const online = Array.from(runners.values()).filter(r => r.status === 'online');
|
|
63
|
+
const metrics = [
|
|
64
|
+
'# HELP yggdrasil_runners_total Total number of registered runners',
|
|
65
|
+
'# TYPE yggdrasil_runners_total gauge',
|
|
66
|
+
`yggdrasil_runners_total ${runners.size}`,
|
|
67
|
+
'# HELP yggdrasil_runners_online Number of online runners',
|
|
68
|
+
'# TYPE yggdrasil_runners_online gauge',
|
|
69
|
+
`yggdrasil_runners_online ${online.length}`,
|
|
70
|
+
'# HELP yggdrasil_runners_offline Number of offline runners',
|
|
71
|
+
'# TYPE yggdrasil_runners_offline gauge',
|
|
72
|
+
`yggdrasil_runners_offline ${runners.size - online.length}`,
|
|
73
|
+
'# HELP yggdrasil_uptime_seconds Server uptime in seconds',
|
|
74
|
+
'# TYPE yggdrasil_uptime_seconds counter',
|
|
75
|
+
`yggdrasil_uptime_seconds ${process.uptime()}`,
|
|
76
|
+
];
|
|
77
|
+
res.set('Content-Type', 'text/plain; charset=utf-8');
|
|
78
|
+
res.send(metrics.join('\n') + '\n');
|
|
79
|
+
});
|
|
80
|
+
// ─── Runner lifecycle (heartbeat from Ratatoskr daemon) ─────────
|
|
81
|
+
app.post('/runners/register', (req, res) => {
|
|
82
|
+
const body = req.body;
|
|
83
|
+
const runnerId = body.runnerId || nanoid();
|
|
84
|
+
runners.set(runnerId, {
|
|
85
|
+
runnerId,
|
|
86
|
+
name: body.name || 'unknown',
|
|
87
|
+
endpoint: body.endpoint || 'unknown',
|
|
88
|
+
version: body.version || '0.1.0',
|
|
89
|
+
capabilities: body.capabilities || [],
|
|
90
|
+
labels: body.labels || {},
|
|
91
|
+
lastHeartbeat: new Date(),
|
|
92
|
+
status: 'online',
|
|
93
|
+
});
|
|
94
|
+
logger.info('Runner registered', { runnerId, name: body.name, endpoint: body.endpoint });
|
|
95
|
+
res.status(201).json({ runnerId, status: 'registered' });
|
|
96
|
+
});
|
|
97
|
+
app.post('/runners/heartbeat', (req, res) => {
|
|
98
|
+
const body = req.body;
|
|
99
|
+
const runnerId = body.runnerId;
|
|
100
|
+
if (!runnerId || !runners.has(runnerId)) {
|
|
101
|
+
res.status(404).json({ error: 'Runner not found' });
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const runner = runners.get(runnerId);
|
|
105
|
+
runner.lastHeartbeat = new Date();
|
|
106
|
+
runner.status = 'online';
|
|
107
|
+
logger.debug('Runner heartbeat received', { runnerId });
|
|
108
|
+
res.json({ status: 'ok' });
|
|
109
|
+
});
|
|
110
|
+
app.post('/runners/update', (req, res) => {
|
|
111
|
+
const body = req.body;
|
|
112
|
+
const runnerId = body.runnerId;
|
|
113
|
+
if (!runnerId || !runners.has(runnerId)) {
|
|
114
|
+
res.status(404).json({ error: 'Runner not found' });
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const runner = runners.get(runnerId);
|
|
118
|
+
runner.endpoint = body.newEndpoint || runner.endpoint;
|
|
119
|
+
runner.lastHeartbeat = new Date();
|
|
120
|
+
logger.info('Runner endpoint updated', { runnerId, newEndpoint: body.newEndpoint });
|
|
121
|
+
res.json({ status: 'updated' });
|
|
122
|
+
});
|
|
123
|
+
app.post('/runners/offline', (req, res) => {
|
|
124
|
+
const body = req.body;
|
|
125
|
+
const runnerId = body.runnerId;
|
|
126
|
+
if (!runnerId || !runners.has(runnerId)) {
|
|
127
|
+
res.status(404).json({ error: 'Runner not found' });
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
runners.get(runnerId).status = 'offline';
|
|
131
|
+
logger.info('Runner went offline', { runnerId });
|
|
132
|
+
res.json({ status: 'offline' });
|
|
133
|
+
});
|
|
134
|
+
// ─── Runner queries ─────────────────────────────────────────────
|
|
135
|
+
app.get('/api/runners', (_req, res) => {
|
|
136
|
+
res.json({
|
|
137
|
+
runners: Array.from(runners.values()).map(r => ({
|
|
138
|
+
runnerId: r.runnerId,
|
|
139
|
+
name: r.name,
|
|
140
|
+
endpoint: r.endpoint,
|
|
141
|
+
version: r.version,
|
|
142
|
+
capabilities: r.capabilities,
|
|
143
|
+
labels: r.labels,
|
|
144
|
+
status: r.status,
|
|
145
|
+
lastHeartbeat: r.lastHeartbeat,
|
|
146
|
+
})),
|
|
147
|
+
count: runners.size,
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
app.get('/api/runners/:runnerId', (req, res) => {
|
|
151
|
+
const runner = runners.get(req.params.runnerId);
|
|
152
|
+
if (!runner) {
|
|
153
|
+
res.status(404).json({ error: 'Runner not found' });
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
res.json(runner);
|
|
157
|
+
});
|
|
158
|
+
// ─── Lease-based offline detection ──────────────────────────────
|
|
159
|
+
const LEASE_TTL_MS = parseInt(process.env['LEASE_TTL_MS'] || '60000', 10);
|
|
160
|
+
setInterval(() => {
|
|
161
|
+
const now = Date.now();
|
|
162
|
+
const stale = [];
|
|
163
|
+
for (const [runnerId, runner] of runners.entries()) {
|
|
164
|
+
if (runner.status === 'offline')
|
|
165
|
+
continue;
|
|
166
|
+
const elapsed = now - runner.lastHeartbeat.getTime();
|
|
167
|
+
if (elapsed > LEASE_TTL_MS) {
|
|
168
|
+
stale.push(runnerId);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
for (const runnerId of stale) {
|
|
172
|
+
const runner = runners.get(runnerId);
|
|
173
|
+
runner.status = 'offline';
|
|
174
|
+
logger.warn('Runner marked offline due to heartbeat timeout', {
|
|
175
|
+
runnerId,
|
|
176
|
+
name: runner.name,
|
|
177
|
+
missedBy: `${Math.round((now - runner.lastHeartbeat.getTime()) / 1000)}s`,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}, 10_000);
|
|
181
|
+
// ─── Start server ───────────────────────────────────────────────
|
|
182
|
+
const PORT = parseInt(process.env['PORT'] || '3000', 10);
|
|
183
|
+
app.listen(PORT, () => {
|
|
184
|
+
logger.info('Orchestration controller started (runner-only mode via Ratatoskr)', {
|
|
185
|
+
port: PORT,
|
|
186
|
+
environment: process.env['NODE_ENV'] || 'development',
|
|
187
|
+
apiKeysConfigured: API_KEYS.length > 0,
|
|
188
|
+
leaseTtlMs: LEASE_TTL_MS,
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
//# sourceMappingURL=orchestration-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestration-controller.js","sourceRoot":"","sources":["../../src/orchestration-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import winston from 'winston';
|
|
2
|
-
import { LoggerConfig, LogLevel } from '
|
|
2
|
+
import { LoggerConfig, LogLevel } from '../types/index.js';
|
|
3
3
|
/**
|
|
4
4
|
* Centralized logging service for Yggdrasil orchestration system
|
|
5
5
|
* Uses Winston for stable, well-documented logging
|
|
@@ -20,17 +20,4 @@ export declare class Logger {
|
|
|
20
20
|
* Convenience function to get logger instance
|
|
21
21
|
*/
|
|
22
22
|
export declare const getLogger: (config?: LoggerConfig) => Logger;
|
|
23
|
-
/**
|
|
24
|
-
* Structured logging helpers for common operations
|
|
25
|
-
*/
|
|
26
|
-
export declare class StructuredLogger {
|
|
27
|
-
private logger;
|
|
28
|
-
constructor(logger: Logger);
|
|
29
|
-
agentHealthCheck(agentId: string, healthy: boolean, responseTime: number, error?: string): void;
|
|
30
|
-
requestRouted(requestId: string, agentId: string, sessionId?: string): void;
|
|
31
|
-
scalingEvent(currentInstances: number, targetInstances: number, reason: string): void;
|
|
32
|
-
circuitBreakerOpened(agentId: string, failureCount: number): void;
|
|
33
|
-
queueMetrics(queueDepth: number, oldestItemAge: number): void;
|
|
34
|
-
performanceMetrics(agentId: string, metrics: Record<string, unknown>): void;
|
|
35
|
-
}
|
|
36
23
|
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/services/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/services/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;;GAGG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAEhC,OAAO;WAiDO,WAAW,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM;IAYjD,GAAG,CACR,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI;IAIA,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM;CAG5D;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,SAAS,YAAY,KAAG,MAEjD,CAAC"}
|
|
@@ -68,59 +68,4 @@ export class Logger {
|
|
|
68
68
|
export const getLogger = (config) => {
|
|
69
69
|
return Logger.getInstance(config);
|
|
70
70
|
};
|
|
71
|
-
/**
|
|
72
|
-
* Structured logging helpers for common operations
|
|
73
|
-
*/
|
|
74
|
-
export class StructuredLogger {
|
|
75
|
-
logger;
|
|
76
|
-
constructor(logger) {
|
|
77
|
-
this.logger = logger;
|
|
78
|
-
}
|
|
79
|
-
agentHealthCheck(agentId, healthy, responseTime, error) {
|
|
80
|
-
this.logger.info('Agent health check completed', {
|
|
81
|
-
agentId,
|
|
82
|
-
healthy,
|
|
83
|
-
responseTime,
|
|
84
|
-
error,
|
|
85
|
-
operation: 'health_check',
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
requestRouted(requestId, agentId, sessionId) {
|
|
89
|
-
this.logger.info('Request routed to agent', {
|
|
90
|
-
requestId,
|
|
91
|
-
agentId,
|
|
92
|
-
sessionId,
|
|
93
|
-
operation: 'request_routing',
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
scalingEvent(currentInstances, targetInstances, reason) {
|
|
97
|
-
this.logger.info('Scaling event triggered', {
|
|
98
|
-
currentInstances,
|
|
99
|
-
targetInstances,
|
|
100
|
-
reason,
|
|
101
|
-
operation: 'scaling',
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
circuitBreakerOpened(agentId, failureCount) {
|
|
105
|
-
this.logger.warn('Circuit breaker opened for agent', {
|
|
106
|
-
agentId,
|
|
107
|
-
failureCount,
|
|
108
|
-
operation: 'circuit_breaker',
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
queueMetrics(queueDepth, oldestItemAge) {
|
|
112
|
-
this.logger.debug('Queue metrics', {
|
|
113
|
-
queueDepth,
|
|
114
|
-
oldestItemAge,
|
|
115
|
-
operation: 'queue_metrics',
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
performanceMetrics(agentId, metrics) {
|
|
119
|
-
this.logger.debug('Performance metrics collected', {
|
|
120
|
-
agentId,
|
|
121
|
-
metrics,
|
|
122
|
-
operation: 'performance_metrics',
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
71
|
//# sourceMappingURL=logger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/services/logger.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/services/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,139 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Core types for the Yggdrasil orchestration system
|
|
3
3
|
*/
|
|
4
|
-
export interface AgentInfo {
|
|
5
|
-
id: string;
|
|
6
|
-
url: string;
|
|
7
|
-
health: AgentHealth;
|
|
8
|
-
metrics: AgentMetrics;
|
|
9
|
-
lastSeen: Date;
|
|
10
|
-
sessionId?: string;
|
|
11
|
-
}
|
|
12
|
-
export interface AgentHealth {
|
|
13
|
-
status: 'healthy' | 'unhealthy' | 'unknown';
|
|
14
|
-
lastCheck: Date;
|
|
15
|
-
responseTime: number;
|
|
16
|
-
errorCount: number;
|
|
17
|
-
consecutiveFailures: number;
|
|
18
|
-
}
|
|
19
|
-
export interface AgentMetrics {
|
|
20
|
-
cpuUsage: number;
|
|
21
|
-
memoryUsage: number;
|
|
22
|
-
requestCount: number;
|
|
23
|
-
errorRate: number;
|
|
24
|
-
averageResponseTime: number;
|
|
25
|
-
activeConnections: number;
|
|
26
|
-
}
|
|
27
|
-
export interface RequestContext {
|
|
28
|
-
id: string;
|
|
29
|
-
sessionId?: string;
|
|
30
|
-
timestamp: Date;
|
|
31
|
-
priority: 'low' | 'normal' | 'high' | 'critical';
|
|
32
|
-
retryCount: number;
|
|
33
|
-
maxRetries: number;
|
|
34
|
-
timeout: number;
|
|
35
|
-
}
|
|
36
|
-
export interface OrchestrationConfig {
|
|
37
|
-
maxConcurrency: number;
|
|
38
|
-
minInstances: number;
|
|
39
|
-
maxInstances: number;
|
|
40
|
-
healthCheckInterval: number;
|
|
41
|
-
retryBackoffMs: number;
|
|
42
|
-
maxRetries: number;
|
|
43
|
-
sessionAffinity: boolean;
|
|
44
|
-
circuitBreakerThreshold: number;
|
|
45
|
-
queueTimeoutMs: number;
|
|
46
|
-
}
|
|
47
|
-
export interface LoadBalancerConfig {
|
|
48
|
-
algorithm: 'round-robin' | 'least-connections' | 'ip-hash' | 'weighted';
|
|
49
|
-
healthCheckPath: string;
|
|
50
|
-
healthCheckInterval: number;
|
|
51
|
-
sessionAffinity: boolean;
|
|
52
|
-
stickySessionTimeout: number;
|
|
53
|
-
}
|
|
54
|
-
export interface MonitoringConfig {
|
|
55
|
-
prometheusEnabled: boolean;
|
|
56
|
-
prometheusPort: number;
|
|
57
|
-
grafanaEnabled: boolean;
|
|
58
|
-
grafanaPort: number;
|
|
59
|
-
customMetrics: boolean;
|
|
60
|
-
alertingEnabled: boolean;
|
|
61
|
-
}
|
|
62
|
-
export interface QueueItem {
|
|
63
|
-
id: string;
|
|
64
|
-
request: Record<string, unknown>;
|
|
65
|
-
context: RequestContext;
|
|
66
|
-
timestamp: Date;
|
|
67
|
-
priority: number;
|
|
68
|
-
}
|
|
69
|
-
export interface CircuitBreakerState {
|
|
70
|
-
isOpen: boolean;
|
|
71
|
-
failureCount: number;
|
|
72
|
-
lastFailureTime: Date;
|
|
73
|
-
nextAttemptTime: Date;
|
|
74
|
-
}
|
|
75
|
-
export interface ScalingMetrics {
|
|
76
|
-
currentInstances: number;
|
|
77
|
-
targetInstances: number;
|
|
78
|
-
cpuUtilization: number;
|
|
79
|
-
memoryUtilization: number;
|
|
80
|
-
queueDepth: number;
|
|
81
|
-
errorRate: number;
|
|
82
|
-
responseTime: number;
|
|
83
|
-
}
|
|
84
|
-
export interface HealthCheckResult {
|
|
85
|
-
agentId: string;
|
|
86
|
-
healthy: boolean;
|
|
87
|
-
responseTime: number;
|
|
88
|
-
error?: string;
|
|
89
|
-
timestamp: Date;
|
|
90
|
-
}
|
|
91
|
-
export interface SessionInfo {
|
|
92
|
-
sessionId: string;
|
|
93
|
-
agentId: string;
|
|
94
|
-
createdAt: Date;
|
|
95
|
-
lastActivity: Date;
|
|
96
|
-
requestCount: number;
|
|
97
|
-
}
|
|
98
|
-
export interface MetricsData {
|
|
99
|
-
timestamp: Date;
|
|
100
|
-
agentId: string;
|
|
101
|
-
metrics: AgentMetrics;
|
|
102
|
-
scalingMetrics: ScalingMetrics;
|
|
103
|
-
}
|
|
104
4
|
export type LogLevel = 'error' | 'warn' | 'info' | 'debug';
|
|
105
5
|
export interface LoggerConfig {
|
|
106
6
|
level: LogLevel;
|
|
107
7
|
format: 'json' | 'simple';
|
|
108
8
|
transports: string[];
|
|
109
9
|
}
|
|
110
|
-
export interface DockerConfig {
|
|
111
|
-
image: string;
|
|
112
|
-
tag: string;
|
|
113
|
-
ports: number[];
|
|
114
|
-
environment: Record<string, string>;
|
|
115
|
-
volumes: string[];
|
|
116
|
-
resourceLimits: {
|
|
117
|
-
cpu: string;
|
|
118
|
-
memory: string;
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
export interface CloudRunConfig {
|
|
122
|
-
serviceName: string;
|
|
123
|
-
region: string;
|
|
124
|
-
maxConcurrency: number;
|
|
125
|
-
minInstances: number;
|
|
126
|
-
maxInstances: number;
|
|
127
|
-
cpu: number;
|
|
128
|
-
memory: string;
|
|
129
|
-
timeout: number;
|
|
130
|
-
}
|
|
131
|
-
export interface DeploymentConfig {
|
|
132
|
-
environment: 'local' | 'staging' | 'production';
|
|
133
|
-
docker: DockerConfig;
|
|
134
|
-
cloudRun?: CloudRunConfig;
|
|
135
|
-
monitoring: MonitoringConfig;
|
|
136
|
-
orchestration: OrchestrationConfig;
|
|
137
|
-
loadBalancer: LoadBalancerConfig;
|
|
138
|
-
}
|
|
139
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB"}
|
package/package.json
CHANGED
|
@@ -1,53 +1,37 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theaiinc/yggdrasil",
|
|
3
|
-
"version": "0.0
|
|
4
|
-
"description": "Distributed orchestration
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Distributed runner orchestration — receives runner registrations and heartbeats via Ratatoskr",
|
|
5
5
|
"author": "The AI Inc",
|
|
6
|
-
"license": "
|
|
6
|
+
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"main": "dist/src/index.js",
|
|
9
9
|
"scripts": {
|
|
10
10
|
"build": "tsc -p ./tsconfig.json",
|
|
11
11
|
"dev": "nodemon --exec \"node --loader ts-node/esm src/orchestration-controller.ts\"",
|
|
12
12
|
"start": "node dist/src/orchestration-controller.js",
|
|
13
|
-
"test": "
|
|
14
|
-
"test:coverage": "vitest --coverage",
|
|
13
|
+
"test": "echo 'No tests yet'",
|
|
15
14
|
"lint": "eslint . --ext .ts",
|
|
16
|
-
"docker:build": "docker build -t yggdrasil-agent ./agent",
|
|
17
|
-
"docker:compose": "docker-compose up -d",
|
|
18
|
-
"docker:compose:dev": "docker-compose -f docker-compose.dev.yml up",
|
|
19
|
-
"load:test": "node scripts/load-test.js",
|
|
20
|
-
"health:check": "node scripts/health-check.js",
|
|
21
15
|
"prepublishOnly": "npm run build"
|
|
22
16
|
},
|
|
23
17
|
"files": [
|
|
24
18
|
"dist/src/",
|
|
25
|
-
"README.md"
|
|
19
|
+
"README.md",
|
|
20
|
+
"LICENSE"
|
|
26
21
|
],
|
|
27
22
|
"dependencies": {
|
|
28
|
-
"async-lock": "^1.4.0",
|
|
29
|
-
"axios": "^1.6.7",
|
|
30
23
|
"compression": "^1.7.4",
|
|
31
24
|
"cors": "^2.8.5",
|
|
32
|
-
"dotenv": "^17.2.0",
|
|
33
25
|
"express": "^4.19.2",
|
|
34
26
|
"helmet": "^8.1.0",
|
|
35
27
|
"nanoid": "^5.0.6",
|
|
36
|
-
"
|
|
37
|
-
"prom-client": "^15.1.0",
|
|
38
|
-
"redis": "^4.6.12",
|
|
39
|
-
"socket.io": "^4.7.4",
|
|
40
|
-
"uuid": "^9.0.1",
|
|
41
|
-
"winston": "^3.11.0",
|
|
42
|
-
"zod": "^3.22.4"
|
|
28
|
+
"winston": "^3.11.0"
|
|
43
29
|
},
|
|
44
30
|
"devDependencies": {
|
|
45
31
|
"@types/compression": "^1.7.5",
|
|
46
32
|
"@types/cors": "^2.8.17",
|
|
47
33
|
"@types/express": "^4.17.21",
|
|
48
34
|
"@types/node": "^20.17.24",
|
|
49
|
-
"@types/node-cron": "^3.0.11",
|
|
50
|
-
"@types/uuid": "^9.0.7",
|
|
51
35
|
"@typescript-eslint/eslint-plugin": "^8.26.1",
|
|
52
36
|
"@typescript-eslint/parser": "^8.26.1",
|
|
53
37
|
"eslint": "^9.22.0",
|
|
@@ -62,9 +46,8 @@
|
|
|
62
46
|
"keywords": [
|
|
63
47
|
"ai",
|
|
64
48
|
"orchestration",
|
|
49
|
+
"ratatoskr",
|
|
65
50
|
"distributed-systems",
|
|
66
|
-
"
|
|
67
|
-
"containers",
|
|
68
|
-
"agents"
|
|
51
|
+
"runners"
|
|
69
52
|
]
|
|
70
53
|
}
|