@fentaris/edge 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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../src/supervisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,331 @@
1
+ import { EDGE_MCP_ENVELOPE_VERSION, edgeError, isEdgeError, } from "@fentaris/core";
2
+ import path from "node:path";
3
+ /** Governed per-session MCP workload supervisor for cloud-defined deployments. */
4
+ export class EdgeWorkloadSupervisor {
5
+ options;
6
+ desired = new Map();
7
+ workloads = new Map();
8
+ starting = new Map();
9
+ requests = new Map();
10
+ locallyDenied = new Set();
11
+ blocked = new Set();
12
+ now;
13
+ limits;
14
+ constructor(options) {
15
+ this.options = options;
16
+ this.now = options.now ?? Date.now;
17
+ this.limits = {
18
+ maxConcurrentWorkloads: options.maxConcurrentWorkloads ?? 8,
19
+ startupTimeoutMs: options.startupTimeoutMs ?? 15_000,
20
+ operationTimeoutMs: options.operationTimeoutMs ?? 30_000,
21
+ shutdownTimeoutMs: options.shutdownTimeoutMs ?? 5_000,
22
+ idleLeaseMs: options.idleLeaseMs ?? 300_000,
23
+ maxOutputBytes: options.maxOutputBytes ?? 4 * 1024 * 1024,
24
+ };
25
+ }
26
+ /** Reconcile only the cloud-defined desired deployment set. */
27
+ async reconcile(deployments) {
28
+ const next = new Map(deployments.map((deployment) => [deployment.requirement.deploymentId, deployment]));
29
+ const results = [];
30
+ for (const deploymentId of [...this.desired.keys()]) {
31
+ if (next.has(deploymentId))
32
+ continue;
33
+ await this.stopDeployment(deploymentId);
34
+ this.desired.delete(deploymentId);
35
+ this.blocked.delete(deploymentId);
36
+ results.push({ deploymentId, status: "removed" });
37
+ await this.emitLifecycle(deploymentId, "removed");
38
+ }
39
+ for (const deployment of deployments) {
40
+ const deploymentId = deployment.requirement.deploymentId;
41
+ this.desired.set(deploymentId, deployment);
42
+ if (this.locallyDenied.has(deploymentId)) {
43
+ this.blocked.add(deploymentId);
44
+ await this.stopDeployment(deploymentId);
45
+ results.push({ deploymentId, status: "blocked", reason: "local-deny" });
46
+ await this.emitLifecycle(deploymentId, "blocked-local-deny");
47
+ continue;
48
+ }
49
+ const state = await this.options.setup.ingest(deployment.requirement);
50
+ if (state.status !== "ready") {
51
+ this.blocked.add(deploymentId);
52
+ await this.stopDeployment(deploymentId);
53
+ results.push({ deploymentId, status: "blocked", reason: `setup-${state.status}` });
54
+ await this.emitLifecycle(deploymentId, `blocked-setup-${state.status}`);
55
+ }
56
+ else {
57
+ this.blocked.delete(deploymentId);
58
+ results.push({ deploymentId, status: "ready" });
59
+ await this.emitLifecycle(deploymentId, "ready");
60
+ }
61
+ }
62
+ return results;
63
+ }
64
+ /** Handle one correlated edge protocol MCP request. */
65
+ async handleRequest(request) {
66
+ try {
67
+ const desired = this.desired.get(request.route.deploymentId);
68
+ if (!desired || this.blocked.has(request.route.deploymentId) || this.locallyDenied.has(request.route.deploymentId)) {
69
+ throw edgeError("EDGE_SETUP_REQUIRED", "Edge deployment is not locally ready.", {
70
+ details: { deploymentId: request.route.deploymentId },
71
+ });
72
+ }
73
+ if (request.deadline <= this.now()) {
74
+ throw edgeError("EDGE_WORKLOAD", "Edge MCP request deadline already expired.");
75
+ }
76
+ const workload = await this.workloadFor(request.route.deploymentId, request.route.downstreamSessionId, desired.requirement);
77
+ workload.lastUsedAt = this.now();
78
+ const controller = new AbortController();
79
+ this.requests.set(request.requestId, controller);
80
+ const deadlineMs = Math.max(1, Math.min(this.limits.operationTimeoutMs, request.deadline - this.now()));
81
+ try {
82
+ const result = await withTimeout(workload.workload.client.request(request.operation, request.params, controller.signal), deadlineMs, () => controller.abort(), "Edge MCP operation timed out");
83
+ const bytes = jsonByteLength(result);
84
+ if (bytes > this.limits.maxOutputBytes) {
85
+ throw edgeError("EDGE_CAPACITY", "Edge MCP result exceeds the configured output limit.", {
86
+ details: { bytes, limit: this.limits.maxOutputBytes },
87
+ });
88
+ }
89
+ return {
90
+ version: EDGE_MCP_ENVELOPE_VERSION,
91
+ kind: "mcp.result",
92
+ requestId: request.requestId,
93
+ operation: request.operation,
94
+ route: request.route,
95
+ result,
96
+ };
97
+ }
98
+ finally {
99
+ this.requests.delete(request.requestId);
100
+ workload.lastUsedAt = this.now();
101
+ }
102
+ }
103
+ catch (error) {
104
+ return errorEnvelope(request, error);
105
+ }
106
+ }
107
+ /** Propagate a correlated cancellation to the local MCP client signal. */
108
+ handleCancel(cancel) {
109
+ const controller = this.requests.get(cancel.requestId);
110
+ if (!controller)
111
+ return false;
112
+ controller.abort();
113
+ return true;
114
+ }
115
+ /** Sticky local denial overrides all replayed desired state. */
116
+ async denyDeployment(deploymentId) {
117
+ this.locallyDenied.add(deploymentId);
118
+ this.blocked.add(deploymentId);
119
+ await this.stopDeployment(deploymentId);
120
+ }
121
+ /** Explicit local action required before a denied deployment may run again. */
122
+ renewConsent(deploymentId) {
123
+ this.locallyDenied.delete(deploymentId);
124
+ }
125
+ /** Mark a deployment blocked after grant/workload revocation. */
126
+ async blockDeployment(deploymentId) {
127
+ this.locallyDenied.add(deploymentId);
128
+ this.blocked.add(deploymentId);
129
+ await this.stopDeployment(deploymentId);
130
+ }
131
+ async endSession(sessionId) {
132
+ const records = [...this.workloads.values()].filter((record) => record.sessionId === sessionId);
133
+ await Promise.all(records.map((record) => this.stopRecord(record)));
134
+ }
135
+ async sweepIdle() {
136
+ const threshold = this.now() - this.limits.idleLeaseMs;
137
+ const idle = [...this.workloads.values()].filter((record) => record.lastUsedAt <= threshold);
138
+ await Promise.all(idle.map((record) => this.stopRecord(record)));
139
+ return idle.map((record) => record.key);
140
+ }
141
+ async shutdown() {
142
+ for (const controller of this.requests.values())
143
+ controller.abort();
144
+ this.requests.clear();
145
+ await Promise.all([...this.workloads.values()].map((record) => this.stopRecord(record)));
146
+ }
147
+ activeWorkloadCount() {
148
+ return this.workloads.size;
149
+ }
150
+ async workloadFor(deploymentId, sessionId, requirement) {
151
+ const key = workloadKey(deploymentId, sessionId);
152
+ const existing = this.workloads.get(key);
153
+ if (existing)
154
+ return existing;
155
+ const pending = this.starting.get(key);
156
+ if (pending)
157
+ return pending;
158
+ if (this.workloads.size + this.starting.size >= this.limits.maxConcurrentWorkloads) {
159
+ throw edgeError("EDGE_CAPACITY", "Edge workload concurrency limit reached.");
160
+ }
161
+ const starting = this.startWorkload(key, deploymentId, sessionId, requirement);
162
+ this.starting.set(key, starting);
163
+ try {
164
+ return await starting;
165
+ }
166
+ finally {
167
+ this.starting.delete(key);
168
+ }
169
+ }
170
+ async startWorkload(key, deploymentId, sessionId, requirement) {
171
+ const plan = await this.options.setup.compileLaunchPlan(requirement);
172
+ if (this.options.executablePolicy && !await this.options.executablePolicy.allow(plan)) {
173
+ throw edgeError("EDGE_WORKLOAD", "Local executable/package policy denied the launch recipe.");
174
+ }
175
+ const startup = new AbortController();
176
+ const workload = await withTimeout(this.options.factory.start(plan, startup.signal), this.limits.startupTimeoutMs, () => startup.abort(), "Edge workload startup timed out");
177
+ if (workload.client.capabilityManifest && this.options.reportCapabilityManifest) {
178
+ const manifest = await workload.client.capabilityManifest();
179
+ await this.options.reportCapabilityManifest(deploymentId, plan.recipeDigest, manifest);
180
+ }
181
+ const record = {
182
+ key,
183
+ deploymentId,
184
+ sessionId,
185
+ workload,
186
+ lastUsedAt: this.now(),
187
+ };
188
+ this.workloads.set(key, record);
189
+ await this.emitLifecycle(deploymentId, "started", sessionId);
190
+ return record;
191
+ }
192
+ async stopDeployment(deploymentId) {
193
+ const records = [...this.workloads.values()].filter((record) => record.deploymentId === deploymentId);
194
+ await Promise.all(records.map((record) => this.stopRecord(record)));
195
+ }
196
+ async stopRecord(record) {
197
+ if (this.workloads.get(record.key) !== record)
198
+ return;
199
+ this.workloads.delete(record.key);
200
+ try {
201
+ await withTimeout(record.workload.stopGracefully(), this.limits.shutdownTimeoutMs, undefined, "Edge workload graceful shutdown timed out");
202
+ }
203
+ catch {
204
+ await record.workload.forceKill();
205
+ }
206
+ await this.emitLifecycle(record.deploymentId, "stopped", record.sessionId);
207
+ }
208
+ async emitLifecycle(deploymentId, outcome, sessionId) {
209
+ await this.options.telemetry?.emit({
210
+ name: "edge.workload.lifecycle",
211
+ deploymentId,
212
+ downstreamSessionId: sessionId,
213
+ outcome,
214
+ }).catch(() => undefined);
215
+ }
216
+ }
217
+ /** Exact executable/package allowlist suitable for local edge launch policy. */
218
+ export class ExecutableAllowlistPolicy {
219
+ executables;
220
+ packages;
221
+ constructor(options) {
222
+ this.executables = new Set(options.executables ?? []);
223
+ this.packages = new Set(options.packages ?? []);
224
+ }
225
+ allow(plan) {
226
+ const executable = path.basename(plan.command);
227
+ if (this.executables.has(plan.command) || this.executables.has(executable))
228
+ return true;
229
+ if (!["npx", "pnpm", "yarn", "bunx"].includes(executable))
230
+ return false;
231
+ const packageName = plan.args.find((argument) => !argument.startsWith("-"));
232
+ return packageName !== undefined && this.packages.has(packageName);
233
+ }
234
+ }
235
+ function workloadKey(deploymentId, sessionId) {
236
+ return `${deploymentId}\u0000${sessionId}`;
237
+ }
238
+ function errorEnvelope(request, error) {
239
+ const code = isEdgeError(error) ? error.code : "EDGE_WORKLOAD";
240
+ const message = error instanceof Error ? error.message : "Edge workload failed";
241
+ return {
242
+ version: EDGE_MCP_ENVELOPE_VERSION,
243
+ kind: "mcp.error",
244
+ requestId: request.requestId,
245
+ operation: request.operation,
246
+ route: request.route,
247
+ error: {
248
+ code,
249
+ message,
250
+ ...(isEdgeError(error) && error.details ? { details: error.details } : {}),
251
+ },
252
+ };
253
+ }
254
+ function jsonByteLength(value) {
255
+ const bytes = jsonValueByteLength(value, "", new Set(), "top");
256
+ if (bytes === undefined) {
257
+ throw new TypeError("Edge MCP result is not JSON serializable.");
258
+ }
259
+ return bytes;
260
+ }
261
+ function jsonValueByteLength(value, key, seen, position) {
262
+ if (value && typeof value === "object" && "toJSON" in value && typeof value.toJSON === "function") {
263
+ value = value.toJSON(key);
264
+ }
265
+ switch (typeof value) {
266
+ case "string":
267
+ return Buffer.byteLength(JSON.stringify(value));
268
+ case "number":
269
+ return Number.isFinite(value) ? Buffer.byteLength(JSON.stringify(value)) : 4;
270
+ case "boolean":
271
+ return value ? 4 : 5;
272
+ case "undefined":
273
+ case "function":
274
+ case "symbol":
275
+ return position === "array" ? 4 : undefined;
276
+ case "bigint":
277
+ throw new TypeError("Edge MCP result is not JSON serializable.");
278
+ case "object":
279
+ if (value === null)
280
+ return 4;
281
+ if (seen.has(value)) {
282
+ throw new TypeError("Edge MCP result contains a circular reference.");
283
+ }
284
+ seen.add(value);
285
+ try {
286
+ if (Array.isArray(value)) {
287
+ let bytes = 2;
288
+ for (let index = 0; index < value.length; index += 1) {
289
+ if (index > 0)
290
+ bytes += 1;
291
+ bytes += jsonValueByteLength(value[index], String(index), seen, "array") ?? 4;
292
+ }
293
+ return bytes;
294
+ }
295
+ let bytes = 2;
296
+ let first = true;
297
+ for (const [childKey, child] of Object.entries(value)) {
298
+ const childBytes = jsonValueByteLength(child, childKey, seen, "object");
299
+ if (childBytes === undefined)
300
+ continue;
301
+ if (!first)
302
+ bytes += 1;
303
+ bytes += Buffer.byteLength(JSON.stringify(childKey)) + 1 + childBytes;
304
+ first = false;
305
+ }
306
+ return bytes;
307
+ }
308
+ finally {
309
+ seen.delete(value);
310
+ }
311
+ }
312
+ }
313
+ async function withTimeout(promise, timeoutMs, onTimeout, message) {
314
+ let timer;
315
+ try {
316
+ return await Promise.race([
317
+ promise,
318
+ new Promise((_, reject) => {
319
+ timer = setTimeout(() => {
320
+ onTimeout?.();
321
+ reject(edgeError("EDGE_WORKLOAD", message));
322
+ }, timeoutMs);
323
+ }),
324
+ ]);
325
+ }
326
+ finally {
327
+ if (timer)
328
+ clearTimeout(timer);
329
+ }
330
+ }
331
+ //# sourceMappingURL=supervisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../src/supervisor.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@fentaris/edge",
3
+ "version": "0.2.0",
4
+ "description": "Fentaris governed edge execution agent",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "fentaris-edge": "./dist/index.js"
9
+ },
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js"
14
+ },
15
+ "./package.json": "./package.json"
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "scripts": {
21
+ "dev": "tsc --watch",
22
+ "prepare": "tsc --build --force",
23
+ "build": "pnpm run clean && tsc --build --force",
24
+ "test": "vitest run --dir test",
25
+ "clean": "rm -rf dist tsconfig.tsbuildinfo"
26
+ },
27
+ "dependencies": {
28
+ "@fentaris/core": "workspace:*"
29
+ },
30
+ "devDependencies": {
31
+ "@types/node": "^25.9.1",
32
+ "vitest": "^4.1.7"
33
+ },
34
+ "keywords": [
35
+ "fentaris",
36
+ "mcp",
37
+ "edge",
38
+ "agent"
39
+ ],
40
+ "author": "Gabriele Cipriani",
41
+ "license": "MIT",
42
+ "type": "module",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "git+https://github.com/Fentaris/fentaris.git",
46
+ "directory": "packages/edge"
47
+ },
48
+ "homepage": "https://github.com/Fentaris/fentaris#readme",
49
+ "bugs": {
50
+ "url": "https://github.com/Fentaris/fentaris/issues"
51
+ },
52
+ "publishConfig": {
53
+ "access": "public"
54
+ }
55
+ }