@fentaris/edge 0.2.2 → 0.3.1

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 (54) hide show
  1. package/README.md +34 -0
  2. package/dist/agent.d.ts +8 -3
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +134 -32
  5. package/dist/agent.js.map +1 -1
  6. package/dist/cli.d.ts +7 -1
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +90 -5
  9. package/dist/cli.js.map +1 -1
  10. package/dist/daemon.d.ts +67 -0
  11. package/dist/daemon.d.ts.map +1 -0
  12. package/dist/daemon.js +244 -0
  13. package/dist/daemon.js.map +1 -0
  14. package/dist/enrollment.d.ts +12 -1
  15. package/dist/enrollment.d.ts.map +1 -1
  16. package/dist/enrollment.js +43 -5
  17. package/dist/enrollment.js.map +1 -1
  18. package/dist/index.d.ts +12 -4
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +71 -3
  21. package/dist/index.js.map +1 -1
  22. package/dist/installation.d.ts +232 -0
  23. package/dist/installation.d.ts.map +1 -0
  24. package/dist/installation.js +897 -0
  25. package/dist/installation.js.map +1 -0
  26. package/dist/localControl.d.ts +50 -0
  27. package/dist/localControl.d.ts.map +1 -0
  28. package/dist/localControl.js +150 -0
  29. package/dist/localControl.js.map +1 -0
  30. package/dist/platform.d.ts +4 -1
  31. package/dist/platform.d.ts.map +1 -1
  32. package/dist/platform.js +31 -14
  33. package/dist/platform.js.map +1 -1
  34. package/dist/redaction.d.ts +2 -0
  35. package/dist/redaction.d.ts.map +1 -1
  36. package/dist/redaction.js +8 -0
  37. package/dist/redaction.js.map +1 -1
  38. package/dist/runtime.d.ts +27 -2
  39. package/dist/runtime.d.ts.map +1 -1
  40. package/dist/runtime.js +190 -15
  41. package/dist/runtime.js.map +1 -1
  42. package/dist/service.d.ts +96 -0
  43. package/dist/service.d.ts.map +1 -0
  44. package/dist/service.js +150 -0
  45. package/dist/service.js.map +1 -0
  46. package/dist/setup.d.ts +1 -0
  47. package/dist/setup.d.ts.map +1 -1
  48. package/dist/setup.js +9 -2
  49. package/dist/setup.js.map +1 -1
  50. package/dist/supervisor.d.ts +4 -0
  51. package/dist/supervisor.d.ts.map +1 -1
  52. package/dist/supervisor.js +62 -16
  53. package/dist/supervisor.js.map +1 -1
  54. package/package.json +3 -3
package/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # `@fentaris/edge`
2
+
3
+ `@fentaris/edge` runs governed MCP workloads on enrolled computers while the
4
+ Fentaris proxy retains policy, placement, and lifecycle control.
5
+
6
+ Edge execution is alpha/preview. Validate service lifecycle, reconnect,
7
+ recovery, and local consent on every target operating system before rollout.
8
+
9
+ ## Install
10
+
11
+ ```sh
12
+ npm install @fentaris/edge
13
+ ```
14
+
15
+ Most users should operate Edge through the central CLI:
16
+
17
+ ```sh
18
+ fentaris edge join https://control.example --name "Build Mac" --json
19
+ fentaris edge status --json
20
+ ```
21
+
22
+ The legacy `fentaris-edge` binary remains available for compatibility. Prefer
23
+ `fentaris edge` for new automation.
24
+
25
+ ## Runtime requirements
26
+
27
+ - Node.js 20 or newer for published packages.
28
+ - An explicit executable/package allowlist for launched MCP workloads.
29
+ - Local approval for managed installations and setup operations.
30
+ - HTTPS for non-loopback control-plane connections.
31
+
32
+ See the [Edge documentation](https://fentaris.dev/reference/edge) and
33
+ [repository](https://github.com/Fentaris/fentaris) for setup, recovery, and
34
+ rollback guidance.
package/dist/agent.d.ts CHANGED
@@ -1,6 +1,7 @@
1
- import { EdgeEnrollmentService, type DeviceAuthorizationRequest, type EdgeConnection, type EdgeConnectionClient } from "./enrollment.js";
1
+ import { type EdgeObservedFacts } from "@fentaris/core";
2
+ import { EdgeEnrollmentService, type DeviceAuthorizationRequest, type EdgeJoinMetadata, type EdgeConnection, type EdgeConnectionClient } from "./enrollment.js";
2
3
  import { type EdgePlatform } from "./platform.js";
3
- import { type EdgeConnectionRuntime, type EdgeRuntimeSummary, type EdgeRuntimeSummaryProvider } from "./runtime.js";
4
+ import { type EdgeConnectionRuntime, type EdgeRuntimeSummary, type EdgeRuntimeSummaryProvider, type EdgeInstallationLocalControl } from "./runtime.js";
4
5
  export type { EdgeRuntimeSummary, EdgeRuntimeSummaryProvider } from "./runtime.js";
5
6
  export interface EdgeAgentStatus extends EdgeRuntimeSummary {
6
7
  readonly enrolled: boolean;
@@ -16,16 +17,20 @@ export interface EdgeAgentOptions {
16
17
  platform: EdgePlatform;
17
18
  runtime?: EdgeConnectionRuntime;
18
19
  runtimeSummary?: EdgeRuntimeSummaryProvider;
20
+ observedFacts?: () => EdgeObservedFacts;
19
21
  }
20
22
  /** Enrollment and connection lifecycle used by the CLI and embedders. */
21
23
  export declare class EdgeAgent {
22
24
  private readonly options;
23
25
  private active?;
24
26
  constructor(options: EdgeAgentOptions);
25
- login(): Promise<import("./enrollment.js").EdgeLoginResult>;
27
+ login(metadata?: EdgeJoinMetadata): Promise<import("./enrollment.js").EdgeLoginResult>;
26
28
  connect(): Promise<void>;
27
29
  reconnect(): Promise<void>;
30
+ waitUntilDisconnected(): Promise<void>;
31
+ isConnected(): boolean;
28
32
  status(): Promise<EdgeAgentStatus>;
33
+ installationControl(): EdgeInstallationLocalControl | undefined;
29
34
  disconnect(): Promise<void>;
30
35
  revoke(): Promise<void>;
31
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,qBAAqB,EAGrB,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAChC,MAAM,cAAc,CAAC;AAatB,YAAY,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAEnF,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACzD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,qBAAqB,CAAC;IAClC,UAAU,EAAE,oBAAoB,CAAC;IACjC,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,cAAc,CAAC,EAAE,0BAA0B,CAAC;CAC7C;AAED,yEAAyE;AACzE,qBAAa,SAAS;IAGR,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,MAAM,CAAC,CAAiB;gBAEH,OAAO,EAAE,gBAAgB;IAEhD,KAAK;IAML,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBxB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAK1B,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IAoBlC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAM9B;AAED,6EAA6E;AAC7E,qBAAa,6BAA8B,YAAW,oBAAoB;IAC5D,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,SAAuC;IAEjG,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;CAgI9F;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvF,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/C;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,CA0C9E"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAGA,OAAO,EASL,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,qBAAqB,EAGrB,KAAK,0BAA0B,EAC/B,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EAClC,MAAM,cAAc,CAAC;AAuBtB,YAAY,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAEnF,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACzD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,qBAAqB,CAAC;IAClC,UAAU,EAAE,oBAAoB,CAAC;IACjC,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,cAAc,CAAC,EAAE,0BAA0B,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,iBAAiB,CAAC;CACzC;AAED,yEAAyE;AACzE,qBAAa,SAAS;IAGR,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,MAAM,CAAC,CAAiB;gBAEH,OAAO,EAAE,gBAAgB;IAEhD,KAAK,CAAC,QAAQ,GAAE,gBAAqB;IAMrC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBxB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAK1B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5C,WAAW,IAAI,OAAO;IAIhB,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IAoBxC,mBAAmB,IAAI,4BAA4B,GAAG,SAAS;IAIzD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAM9B;AAED,6EAA6E;AAC7E,qBAAa,6BAA8B,YAAW,oBAAoB;IAC5D,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,SAAuC;IAEjG,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;CAkK9F;AAsBD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvF,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/C;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAuE9E"}
package/dist/agent.js CHANGED
@@ -1,13 +1,14 @@
1
1
  import { randomBytes, sign } from "node:crypto";
2
- import { hostname } from "node:os";
2
+ import { arch, hostname, platform as operatingSystem } from "node:os";
3
3
  import path from "node:path";
4
- import { EDGE_PROTOCOL_VERSION, edgeError, parseEdgeProtocolMessage, } from "@fentaris/core";
4
+ import { EDGE_PROTOCOL_VERSION, EDGE_SUPPORTED_PROTOCOL_VERSIONS, edgeError, InMemoryInstallationMutationLock, parseEdgeProtocolMessage, } from "@fentaris/core";
5
5
  import { EdgeEnrollmentService, HttpDeviceAuthorizationProvider, HttpEdgeEnrollmentClient, } from "./enrollment.js";
6
6
  import { ProtectedJsonStore, nodeEdgePlatform, } from "./platform.js";
7
7
  import { EdgeAgentRuntime, } from "./runtime.js";
8
8
  import { LocalSetupManager, NodeTerminalSetupPrompter, TerminalSetupProvider, } from "./setup.js";
9
9
  import { EdgeWorkloadSupervisor, ExecutableAllowlistPolicy, } from "./supervisor.js";
10
10
  import { StdioEdgeWorkloadFactory } from "./stdioWorkload.js";
11
+ import { BoundedInstallerRunner, InstallationConsentManager, InstallationCoordinator, ManagedInstallationSourceResolver, ProtectedInstallationState, commandIsolationAdapter, createDefaultInstallationProviders, } from "./installation.js";
11
12
  /** Enrollment and connection lifecycle used by the CLI and embedders. */
12
13
  export class EdgeAgent {
13
14
  options;
@@ -15,8 +16,8 @@ export class EdgeAgent {
15
16
  constructor(options) {
16
17
  this.options = options;
17
18
  }
18
- async login() {
19
- const login = await this.options.enrollment.login();
19
+ async login(metadata = {}) {
20
+ const login = await this.options.enrollment.login(metadata);
20
21
  await this.connect();
21
22
  return login;
22
23
  }
@@ -33,17 +34,29 @@ export class EdgeAgent {
33
34
  publicKey: credentials.keyPair.publicKey,
34
35
  privateKey: credentials.keyPair.privateKey,
35
36
  runtime: this.options.runtime,
37
+ observedFacts: this.options.observedFacts?.() ?? defaultObservedFacts(),
36
38
  });
37
39
  const active = this.active;
38
- void active.closed?.finally(() => {
39
- if (this.active === active)
40
- this.active = undefined;
41
- });
40
+ void active.closed?.then(() => { if (this.active === active)
41
+ this.active = undefined; }, () => { if (this.active === active)
42
+ this.active = undefined; });
42
43
  }
43
44
  async reconnect() {
44
45
  await this.disconnect();
45
46
  await this.connect();
46
47
  }
48
+ async waitUntilDisconnected() {
49
+ const active = this.active;
50
+ if (!active)
51
+ return;
52
+ if (active.closed)
53
+ await active.closed;
54
+ else
55
+ await new Promise(() => undefined);
56
+ }
57
+ isConnected() {
58
+ return this.active !== undefined;
59
+ }
47
60
  async status() {
48
61
  const config = await this.options.platform.configStore.load();
49
62
  const summary = await this.options.runtimeSummary?.summary() ?? {
@@ -63,6 +76,9 @@ export class EdgeAgent {
63
76
  ...(this.active ? { connectedAt: this.active.connectedAt } : {}),
64
77
  };
65
78
  }
79
+ installationControl() {
80
+ return this.options.runtime?.installationControl?.();
81
+ }
66
82
  async disconnect() {
67
83
  const active = this.active;
68
84
  this.active = undefined;
@@ -88,15 +104,20 @@ export class WebSocketEdgeConnectionClient {
88
104
  }
89
105
  const socket = this.webSocketFactory(url.toString());
90
106
  const nonce = randomBytes(32).toString("base64url");
91
- const proof = sign(null, Buffer.from(`${input.edgeNodeId}.${nonce}`), input.privateKey).toString("base64url");
107
+ const proof = sign(null, Buffer.from(`${input.edgeNodeId}.${nonce}.edge.hello`), input.privateKey).toString("base64url");
92
108
  let ack;
93
109
  let heartbeat;
94
110
  let runtimeDisconnected = false;
95
111
  let resolveClosed;
96
- const closed = new Promise((resolve) => {
112
+ let rejectClosed;
113
+ const closed = new Promise((resolve, reject) => {
97
114
  resolveClosed = resolve;
115
+ rejectClosed = reject;
98
116
  });
99
- const disconnectRuntime = async () => {
117
+ // Embedders may ignore `closed`; keep terminal close metadata available to
118
+ // awaiters without producing an unhandled rejection in that case.
119
+ void closed.catch(() => undefined);
120
+ const disconnectRuntime = async (closeError) => {
100
121
  if (runtimeDisconnected)
101
122
  return;
102
123
  runtimeDisconnected = true;
@@ -105,8 +126,14 @@ export class WebSocketEdgeConnectionClient {
105
126
  try {
106
127
  await input.runtime?.disconnected();
107
128
  }
129
+ catch (error) {
130
+ closeError ??= error;
131
+ }
108
132
  finally {
109
- resolveClosed();
133
+ if (closeError)
134
+ rejectClosed(closeError);
135
+ else
136
+ resolveClosed();
110
137
  }
111
138
  };
112
139
  const send = async (message) => {
@@ -126,22 +153,20 @@ export class WebSocketEdgeConnectionClient {
126
153
  void disconnectRuntime();
127
154
  }
128
155
  };
129
- socket.addEventListener("error", () => {
130
- if (!ack)
131
- reject(new Error("Unable to establish the edge gateway connection"));
132
- });
156
+ // The close event carries the gateway's private close code. Wait for it
157
+ // instead of letting a preceding generic error event erase whether the
158
+ // identity was rejected/revoked or the network merely failed.
159
+ socket.addEventListener("error", () => undefined);
133
160
  socket.addEventListener("open", () => {
134
161
  socket.send(JSON.stringify({
135
162
  version: EDGE_PROTOCOL_VERSION,
136
163
  kind: "edge.hello",
137
164
  tenantId: input.tenantId,
138
165
  edgeNodeId: input.edgeNodeId,
139
- supportedVersions: [EDGE_PROTOCOL_VERSION],
166
+ supportedVersions: EDGE_SUPPORTED_PROTOCOL_VERSIONS,
140
167
  nonce,
141
168
  proof,
142
169
  deviceCredential: input.deviceCredential,
143
- accessToken: input.accessToken,
144
- publicKey: input.publicKey,
145
170
  }));
146
171
  }, { once: true });
147
172
  socket.addEventListener("message", (event) => {
@@ -156,25 +181,51 @@ export class WebSocketEdgeConnectionClient {
156
181
  throw edgeError("EDGE_PROTOCOL", "Edge gateway acknowledged a different device identity.");
157
182
  }
158
183
  ack = message;
184
+ const publishPresence = async () => {
185
+ if (!ack || ack.protocolVersion < 2)
186
+ return;
187
+ const snapshot = await input.runtime?.presenceSnapshot?.() ?? { readiness: [] };
188
+ const reportedAt = Date.now();
189
+ await send({
190
+ version: ack.protocolVersion,
191
+ kind: "edge.presence",
192
+ tenantId: ack.tenantId,
193
+ edgeNodeId: ack.edgeNodeId,
194
+ connectionGeneration: ack.connectionGeneration,
195
+ observed: input.observedFacts ?? defaultObservedFacts(reportedAt),
196
+ ...snapshot,
197
+ reportedAt,
198
+ });
199
+ };
159
200
  await input.runtime?.connected({
201
+ protocolVersion: message.protocolVersion,
160
202
  claims: {
161
203
  tenantId: message.tenantId,
162
204
  edgeNodeId: message.edgeNodeId,
163
205
  connectionGeneration: message.connectionGeneration,
164
206
  },
165
207
  send,
208
+ publishPresence,
166
209
  });
210
+ await publishPresence();
167
211
  heartbeat = setInterval(() => {
168
212
  if (!ack || socket.readyState !== WebSocket.OPEN)
169
213
  return;
170
- void send({
171
- version: EDGE_PROTOCOL_VERSION,
172
- kind: "edge.heartbeat",
173
- tenantId: ack.tenantId,
174
- edgeNodeId: ack.edgeNodeId,
175
- connectionGeneration: ack.connectionGeneration,
176
- sentAt: Date.now(),
177
- }).catch(() => socket.close(1011, "edge heartbeat failed"));
214
+ void (async () => {
215
+ const snapshot = ack && ack.protocolVersion >= 2
216
+ ? await input.runtime?.presenceSnapshot?.() ?? { readiness: [] }
217
+ : undefined;
218
+ await send({
219
+ version: ack.protocolVersion,
220
+ kind: "edge.heartbeat",
221
+ tenantId: ack.tenantId,
222
+ edgeNodeId: ack.edgeNodeId,
223
+ connectionGeneration: ack.connectionGeneration,
224
+ sentAt: Date.now(),
225
+ ...(snapshot?.capacity ? { capacity: snapshot.capacity } : {}),
226
+ ...(snapshot?.load ? { load: snapshot.load } : {}),
227
+ });
228
+ })().catch(() => socket.close(1011, "edge heartbeat failed"));
178
229
  }, 10_000);
179
230
  heartbeat.unref?.();
180
231
  resolve(message);
@@ -184,6 +235,7 @@ export class WebSocketEdgeConnectionClient {
184
235
  throw edgeError("EDGE_PROTOCOL", "Unexpected edge handshake frame after authentication.");
185
236
  }
186
237
  if (message.kind !== "edge.desired-state"
238
+ && message.kind !== "edge.installation-control"
187
239
  && message.kind !== "mcp.request"
188
240
  && message.kind !== "mcp.cancel") {
189
241
  throw edgeError("EDGE_PROTOCOL", "Unexpected message kind from the edge control plane.");
@@ -195,10 +247,11 @@ export class WebSocketEdgeConnectionClient {
195
247
  }
196
248
  });
197
249
  });
198
- socket.addEventListener("close", () => {
199
- void disconnectRuntime();
250
+ socket.addEventListener("close", (event) => {
251
+ const closeError = terminalGatewayClose(event);
252
+ void disconnectRuntime(closeError);
200
253
  if (!ack)
201
- reject(edgeError("EDGE_UNAVAILABLE", "Edge socket closed during authentication."));
254
+ reject(closeError ?? edgeError("EDGE_UNAVAILABLE", "Edge socket closed during authentication."));
202
255
  }, { once: true });
203
256
  });
204
257
  const authenticatedAck = await authenticated;
@@ -210,22 +263,42 @@ export class WebSocketEdgeConnectionClient {
210
263
  void disconnectRuntime().then(resolve);
211
264
  return;
212
265
  }
213
- closed.then(resolve);
266
+ closed.then(resolve, resolve);
214
267
  socket.close(1000, "local disconnect");
215
268
  }),
216
269
  };
217
270
  }
218
271
  }
272
+ function terminalGatewayClose(event) {
273
+ const code = "code" in event && typeof event.code === "number" ? event.code : undefined;
274
+ if (code === 4401 || code === 4403) {
275
+ return edgeError("EDGE_UNAUTHORIZED_TARGET", "Edge gateway rejected or revoked this device identity.", {
276
+ details: { closeCode: code },
277
+ });
278
+ }
279
+ return undefined;
280
+ }
281
+ function defaultObservedFacts(reportedAt = Date.now()) {
282
+ return {
283
+ platform: operatingSystem(),
284
+ architecture: arch(),
285
+ agentVersion: "0.1.0",
286
+ executionFeatures: ["mcp-stdio"],
287
+ reportedAt,
288
+ };
289
+ }
219
290
  export function createDefaultEdgeAgent(options) {
220
291
  const platform = options.platform ?? nodeEdgePlatform();
221
292
  const enrollment = new EdgeEnrollmentService({
222
293
  platform,
294
+ controlPlaneUrl: options.controlPlaneUrl,
223
295
  authorization: new HttpDeviceAuthorizationProvider(options.controlPlaneUrl),
224
296
  enrollment: new HttpEdgeEnrollmentClient(options.controlPlaneUrl),
225
297
  callbacks: { onVerification: options.onVerification },
226
298
  hostnameLabel: hostname,
227
299
  });
228
300
  const runtimeRef = {};
301
+ const installationRef = {};
229
302
  const setup = new LocalSetupManager({
230
303
  store: new ProtectedJsonStore(path.join(platform.paths.dataDir, "grants.json")),
231
304
  credentials: platform.credentialStore,
@@ -234,6 +307,11 @@ export function createDefaultEdgeAgent(options) {
234
307
  const activeSupervisor = supervisor;
235
308
  await Promise.all(deploymentIds.map((deploymentId) => activeSupervisor.blockDeployment(deploymentId)));
236
309
  },
310
+ resolveInstalledArtifact: (reference) => {
311
+ if (!installationRef.current)
312
+ throw edgeError("EDGE_SETUP_REQUIRED", "Managed installation is not initialized.");
313
+ return installationRef.current.resolveArtifact(reference);
314
+ },
237
315
  });
238
316
  const supervisor = new EdgeWorkloadSupervisor({
239
317
  setup,
@@ -249,7 +327,31 @@ export function createDefaultEdgeAgent(options) {
249
327
  return runtimeRef.current.reportCapabilityManifest(deploymentId, recipeDigest, manifest);
250
328
  },
251
329
  });
252
- const runtime = new EdgeAgentRuntime({ setup, supervisor });
330
+ const installationState = new ProtectedInstallationState(new ProtectedJsonStore(path.join(platform.paths.dataDir, "installations.json")));
331
+ const installationConsent = new InstallationConsentManager(installationState);
332
+ const installationRunner = new BoundedInstallerRunner(commandIsolationAdapter({
333
+ executable: process.env.FENTARIS_EDGE_INSTALLATION_SANDBOX,
334
+ }));
335
+ const installationSource = new ManagedInstallationSourceResolver({
336
+ credentials: platform.credentialStore,
337
+ local: { resolve: (grantRef) => setup.resolveGrantedPath(grantRef) },
338
+ });
339
+ const installation = new InstallationCoordinator({
340
+ state: installationState,
341
+ consent: installationConsent,
342
+ lock: new InMemoryInstallationMutationLock(),
343
+ providers: createDefaultInstallationProviders({ source: installationSource, runner: installationRunner }),
344
+ installationRoot: path.join(platform.paths.dataDir, "managed-installations"),
345
+ stagingRoot: path.join(platform.paths.dataDir, "installation-staging"),
346
+ terminateProcess: async (pid) => {
347
+ try {
348
+ process.kill(process.platform === "win32" ? pid : -pid, "SIGKILL");
349
+ }
350
+ catch { /* already stopped */ }
351
+ },
352
+ });
353
+ installationRef.current = installation;
354
+ const runtime = new EdgeAgentRuntime({ setup, supervisor, installation });
253
355
  runtimeRef.current = runtime;
254
356
  return new EdgeAgent({
255
357
  enrollment,
package/dist/agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts CHANGED
@@ -1,7 +1,13 @@
1
1
  import type { EdgeAgent } from "./agent.js";
2
+ import type { EdgeServiceOperation, EdgeServiceResult } from "./service.js";
2
3
  export interface EdgeCliIo {
3
4
  out(value: string): void;
4
5
  error(value: string): void;
5
6
  }
6
- export declare function runEdgeCli(argv: readonly string[], agent: EdgeAgent, io: EdgeCliIo): Promise<number>;
7
+ export interface EdgeCliOperations {
8
+ installService(): Promise<EdgeServiceResult>;
9
+ service(operation: EdgeServiceOperation): Promise<EdgeServiceResult>;
10
+ run(): Promise<void>;
11
+ }
12
+ export declare function runEdgeCli(argv: readonly string[], agent: EdgeAgent, io: EdgeCliIo, operations?: EdgeCliOperations): Promise<number>;
7
13
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAoC1G"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAG5E,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC7C,OAAO,CAAC,SAAS,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACrE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,SAAS,EAChB,EAAE,EAAE,SAAS,EACb,UAAU,CAAC,EAAE,iBAAiB,GAC7B,OAAO,CAAC,MAAM,CAAC,CA+EjB"}
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { redactEdgeValue, safeEdgeError } from "./redaction.js";
2
- export async function runEdgeCli(argv, agent, io) {
2
+ export async function runEdgeCli(argv, agent, io, operations) {
3
3
  const command = argv[0] ?? "status";
4
4
  try {
5
5
  switch (command) {
@@ -10,25 +10,73 @@ export async function runEdgeCli(argv, agent, io) {
10
10
  edgeNodeId: result.config.edgeNodeId,
11
11
  tenantId: result.config.tenantId,
12
12
  connected: true,
13
+ warnings: ["fentaris-edge login is deprecated; use fentaris edge join <control-plane-url>."],
13
14
  })));
14
15
  return 0;
15
16
  }
17
+ case "join": {
18
+ const parsed = parseJoin(argv.slice(1));
19
+ const result = await agent.login(parsed.metadata);
20
+ let service;
21
+ const warnings = [];
22
+ if (!parsed.noService) {
23
+ if (!operations)
24
+ throw new Error("Persistent service operations are unavailable in this embedding.");
25
+ try {
26
+ service = await operations.installService();
27
+ }
28
+ catch (error) {
29
+ warnings.push("Persistent service installation was unavailable; enrollment identity was retained.");
30
+ if (parsed.requireService)
31
+ throw error;
32
+ }
33
+ }
34
+ await agent.disconnect();
35
+ const envelope = {
36
+ ok: true,
37
+ data: {
38
+ status: result.repeated ? "already-enrolled" : "enrolled",
39
+ device: { name: parsed.metadata.name ?? result.config.hostnameLabel ?? "edge-device" },
40
+ service: service ?? { persistent: false, adapter: "foreground" },
41
+ },
42
+ pagination: null,
43
+ warnings,
44
+ nextActions: service?.persistent ? [] : [{ description: "Run Edge in the foreground", command: "fentaris edge run" }],
45
+ };
46
+ io.out(parsed.json ? JSON.stringify(envelope) : `${envelope.data.device.name} ${envelope.data.status}`);
47
+ return 0;
48
+ }
49
+ case "run":
50
+ if (!operations)
51
+ throw new Error("Persistent Edge runtime is unavailable in this embedding.");
52
+ await operations.run();
53
+ return 0;
54
+ case "service": {
55
+ if (!operations)
56
+ throw new Error("Persistent service operations are unavailable in this embedding.");
57
+ const operation = serviceOperation(argv[1]);
58
+ io.out(JSON.stringify({ ok: true, data: await operations.service(operation), pagination: null, warnings: [], nextActions: [] }));
59
+ return 0;
60
+ }
16
61
  case "status":
17
- io.out(JSON.stringify(redactEdgeValue(await agent.status())));
62
+ io.out(JSON.stringify(redactEdgeValue({
63
+ ...await agent.status(),
64
+ warnings: ["fentaris-edge status is deprecated; use fentaris edge status."],
65
+ })));
18
66
  return 0;
19
67
  case "disconnect":
20
68
  await agent.disconnect();
21
- io.out(JSON.stringify({ status: "disconnected" }));
69
+ io.out(JSON.stringify({ status: "disconnected", warnings: ["fentaris-edge disconnect is deprecated; use fentaris edge disconnect."] }));
22
70
  return 0;
23
71
  case "revoke":
24
72
  await agent.revoke();
25
- io.out(JSON.stringify({ status: "revoked" }));
73
+ io.out(JSON.stringify({ status: "revoked", warnings: ["fentaris-edge revoke is deprecated; use fentaris edge revoke."] }));
26
74
  return 0;
27
75
  case "add":
28
76
  io.error("MCP definitions and assignments are managed by Fentaris; fentaris-edge has no add command.");
29
77
  return 2;
30
78
  default:
31
- io.error("Usage: fentaris-edge <login|status|disconnect|revoke>");
79
+ io.error("Usage: fentaris-edge <join|run|service|login|status|disconnect|revoke>");
32
80
  return 2;
33
81
  }
34
82
  }
@@ -37,4 +85,41 @@ export async function runEdgeCli(argv, agent, io) {
37
85
  return 1;
38
86
  }
39
87
  }
88
+ function parseJoin(argv) {
89
+ const metadata = { tags: [] };
90
+ let json = false;
91
+ let noService = false;
92
+ let requireService = false;
93
+ for (let index = 1; index < argv.length; index += 1) {
94
+ const value = argv[index];
95
+ if (value === "--json")
96
+ json = true;
97
+ else if (value === "--no-service")
98
+ noService = true;
99
+ else if (value === "--service")
100
+ requireService = true;
101
+ else if (value === "--name" || value === "--description" || value === "--tag") {
102
+ const next = argv[index + 1];
103
+ if (!next)
104
+ throw new Error(`${value} requires a value.`);
105
+ if (value === "--name")
106
+ metadata.name = next;
107
+ else if (value === "--description")
108
+ metadata.description = next;
109
+ else
110
+ metadata.tags.push(next);
111
+ index += 1;
112
+ }
113
+ else if (value?.startsWith("-"))
114
+ throw new Error(`Unknown join option ${value}.`);
115
+ }
116
+ if (noService && requireService)
117
+ throw new Error("--service and --no-service cannot be combined.");
118
+ return { metadata, json, noService, requireService };
119
+ }
120
+ function serviceOperation(value) {
121
+ if (value === "install" || value === "start" || value === "stop" || value === "restart" || value === "uninstall")
122
+ return value;
123
+ throw new Error("service requires install, start, stop, restart, or uninstall.");
124
+ }
40
125
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAOhE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAuB,EAAE,KAAgB,EAAE,EAAa;IACvF,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;IACpC,IAAI,CAAC;QACH,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;gBACnC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;oBACpC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,UAAU;oBACzD,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;oBACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ;oBAChC,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC,CAAC,CAAC;gBACL,OAAO,CAAC,CAAC;YACX,CAAC;YACD,KAAK,QAAQ;gBACX,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC9D,OAAO,CAAC,CAAC;YACX,KAAK,YAAY;gBACf,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;gBACzB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;gBACnD,OAAO,CAAC,CAAC;YACX,KAAK,QAAQ;gBACX,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;gBACrB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBAC9C,OAAO,CAAC,CAAC;YACX,KAAK,KAAK;gBACR,EAAE,CAAC,KAAK,CAAC,4FAA4F,CAAC,CAAC;gBACvG,OAAO,CAAC,CAAC;YACX;gBACE,EAAE,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;gBAClE,OAAO,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}