agent-embassy 3.1.0 → 4.0.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 (112) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/CONTRIBUTING.md +92 -202
  3. package/README.md +157 -155
  4. package/SECURITY.md +191 -348
  5. package/dist/src/gateway/broker-check.d.ts +26 -0
  6. package/dist/src/gateway/broker-check.js +89 -0
  7. package/dist/src/gateway/broker-check.js.map +1 -0
  8. package/dist/src/gateway/broker-control.d.ts +72 -0
  9. package/dist/src/gateway/broker-control.js +164 -0
  10. package/dist/src/gateway/broker-control.js.map +1 -0
  11. package/dist/src/gateway/broker.d.ts +117 -0
  12. package/dist/src/gateway/broker.js +186 -0
  13. package/dist/src/gateway/broker.js.map +1 -0
  14. package/dist/src/gateway/claude-peer.d.ts +1 -124
  15. package/dist/src/gateway/claude-peer.js +61 -1052
  16. package/dist/src/gateway/claude-peer.js.map +1 -1
  17. package/dist/src/gateway/codex-stateless-transport.d.ts +0 -12
  18. package/dist/src/gateway/codex-stateless-transport.js +8 -142
  19. package/dist/src/gateway/codex-stateless-transport.js.map +1 -1
  20. package/dist/src/gateway/config.d.ts +2 -6
  21. package/dist/src/gateway/config.js +17 -27
  22. package/dist/src/gateway/config.js.map +1 -1
  23. package/dist/src/gateway/coordinator.d.ts +57 -0
  24. package/dist/src/gateway/coordinator.js +217 -0
  25. package/dist/src/gateway/coordinator.js.map +1 -0
  26. package/dist/src/gateway/core-cli.d.ts +15 -0
  27. package/dist/src/gateway/core-cli.js +282 -0
  28. package/dist/src/gateway/core-cli.js.map +1 -0
  29. package/dist/src/gateway/core-service-command.d.ts +16 -0
  30. package/dist/src/gateway/core-service-command.js +71 -0
  31. package/dist/src/gateway/core-service-command.js.map +1 -0
  32. package/dist/src/gateway/endpoint-directory.d.ts +33 -0
  33. package/dist/src/gateway/endpoint-directory.js +223 -0
  34. package/dist/src/gateway/endpoint-directory.js.map +1 -0
  35. package/dist/src/gateway/federation.d.ts +89 -0
  36. package/dist/src/gateway/federation.js +632 -0
  37. package/dist/src/gateway/federation.js.map +1 -0
  38. package/dist/src/gateway/ledger-codec.d.ts +3 -0
  39. package/dist/src/gateway/ledger-codec.js +159 -0
  40. package/dist/src/gateway/ledger-codec.js.map +1 -0
  41. package/dist/src/gateway/ledger.d.ts +138 -0
  42. package/dist/src/gateway/ledger.js +319 -0
  43. package/dist/src/gateway/ledger.js.map +1 -0
  44. package/dist/src/gateway/local-control.d.ts +23 -0
  45. package/dist/src/gateway/local-control.js +489 -0
  46. package/dist/src/gateway/local-control.js.map +1 -0
  47. package/dist/src/gateway/native-destinations.d.ts +34 -0
  48. package/dist/src/gateway/native-destinations.js +272 -0
  49. package/dist/src/gateway/native-destinations.js.map +1 -0
  50. package/dist/src/gateway/owned-state.d.ts +57 -0
  51. package/dist/src/gateway/owned-state.js +398 -0
  52. package/dist/src/gateway/owned-state.js.map +1 -0
  53. package/dist/src/gateway/provenance-envelope.d.ts +3 -3
  54. package/dist/src/gateway/provenance-envelope.js +3 -23
  55. package/dist/src/gateway/provenance-envelope.js.map +1 -1
  56. package/dist/src/gateway/runtime.d.ts +41 -0
  57. package/dist/src/gateway/runtime.js +175 -0
  58. package/dist/src/gateway/runtime.js.map +1 -0
  59. package/docs/CONFIGURATION.md +178 -266
  60. package/docs/DELIVERY.md +133 -82
  61. package/docs/GATEWAY-ARCHITECTURE.md +276 -949
  62. package/package.json +5 -5
  63. package/skills/embassy-peer/SKILL.md +38 -196
  64. package/skills/embassy-peer/agents/openai.yaml +2 -2
  65. package/dist/src/gateway/claude-helper-protocol.d.ts +0 -117
  66. package/dist/src/gateway/claude-helper-protocol.js +0 -122
  67. package/dist/src/gateway/claude-helper-protocol.js.map +0 -1
  68. package/dist/src/gateway/claude-helper-supervisor.d.ts +0 -87
  69. package/dist/src/gateway/claude-helper-supervisor.js +0 -374
  70. package/dist/src/gateway/claude-helper-supervisor.js.map +0 -1
  71. package/dist/src/gateway/claude-helper.d.ts +0 -1
  72. package/dist/src/gateway/claude-helper.js +0 -252
  73. package/dist/src/gateway/claude-helper.js.map +0 -1
  74. package/dist/src/gateway/cli.d.ts +0 -56
  75. package/dist/src/gateway/cli.js +0 -1532
  76. package/dist/src/gateway/cli.js.map +0 -1
  77. package/dist/src/gateway/codex-socket-holder.d.ts +0 -26
  78. package/dist/src/gateway/codex-socket-holder.js +0 -76
  79. package/dist/src/gateway/codex-socket-holder.js.map +0 -1
  80. package/dist/src/gateway/control.d.ts +0 -279
  81. package/dist/src/gateway/control.js +0 -933
  82. package/dist/src/gateway/control.js.map +0 -1
  83. package/dist/src/gateway/peer-client.d.ts +0 -58
  84. package/dist/src/gateway/peer-client.js +0 -217
  85. package/dist/src/gateway/peer-client.js.map +0 -1
  86. package/dist/src/gateway/peer-mailbox.d.ts +0 -78
  87. package/dist/src/gateway/peer-mailbox.js +0 -168
  88. package/dist/src/gateway/peer-mailbox.js.map +0 -1
  89. package/dist/src/gateway/peer-protocol.d.ts +0 -110
  90. package/dist/src/gateway/peer-protocol.js +0 -79
  91. package/dist/src/gateway/peer-protocol.js.map +0 -1
  92. package/dist/src/gateway/peer-stdio.d.ts +0 -23
  93. package/dist/src/gateway/peer-stdio.js +0 -100
  94. package/dist/src/gateway/peer-stdio.js.map +0 -1
  95. package/dist/src/gateway/providers.d.ts +0 -164
  96. package/dist/src/gateway/providers.js +0 -975
  97. package/dist/src/gateway/providers.js.map +0 -1
  98. package/dist/src/gateway/server.d.ts +0 -46
  99. package/dist/src/gateway/server.js +0 -216
  100. package/dist/src/gateway/server.js.map +0 -1
  101. package/dist/src/gateway/service.d.ts +0 -371
  102. package/dist/src/gateway/service.js +0 -2335
  103. package/dist/src/gateway/service.js.map +0 -1
  104. package/dist/src/gateway/status-view.d.ts +0 -119
  105. package/dist/src/gateway/status-view.js +0 -484
  106. package/dist/src/gateway/status-view.js.map +0 -1
  107. package/dist/src/gateway/store.d.ts +0 -188
  108. package/dist/src/gateway/store.js +0 -2360
  109. package/dist/src/gateway/store.js.map +0 -1
  110. package/dist/src/gateway/types.d.ts +0 -541
  111. package/dist/src/gateway/types.js +0 -332
  112. package/dist/src/gateway/types.js.map +0 -1
@@ -0,0 +1,282 @@
1
+ #!/usr/bin/env node
2
+ import { userInfo } from "node:os";
3
+ import { realpathSync } from "node:fs";
4
+ import path from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { TextDecoder } from "node:util";
7
+ import { BridgeError } from "../errors.js";
8
+ import { commandMutates, isBrokerResult } from "./broker-control.js";
9
+ import { defaultGatewayStateDir, loadGatewayConfig } from "./config.js";
10
+ import { loadGatewayNodeInventory } from "./federation-nodes.js";
11
+ import { runFederationStdio } from "./federation.js";
12
+ import { LocalControlError, requestLocalControl } from "./local-control.js";
13
+ import { runCoreRuntime } from "./runtime.js";
14
+ import { defaultRunLaunchctl } from "./service-agent.js";
15
+ import { runCoreServiceCommand } from "./core-service-command.js";
16
+ export const CORE_VERSION = "4.0.0";
17
+ const HELP = `Embassy — named Claude/Codex messaging over local gateways and SSH
18
+
19
+ embassy register-codex --alias <codex-name@host> [--succeeds <old-alias>]
20
+ embassy send --to <name@host> # body on stdin
21
+ embassy send --conversation <reference> # identity-bound reply
22
+ embassy status [--json]
23
+ embassy refresh
24
+ embassy delivery-status --token <delivery-token>
25
+ embassy wait-delivery --token <delivery-token>
26
+ embassy retire --alias <local-alias>
27
+ embassy retire --endpoint <public-endpoint-id> # exact local retirement
28
+ embassy check # broker-only loopback, no live agent
29
+ embassy health
30
+ embassy serve
31
+ embassy service install|uninstall|status
32
+ embassy peer-stdio # SSH broker transport
33
+ embassy --version | --help
34
+
35
+ The sender is resolved from the calling Claude/Codex session; do not supply an identity.
36
+ Use exactly one of --to or --conversation. A receipt proves transport, not comprehension.
37
+ `;
38
+ const invalid = (code = "INVALID_ARGUMENTS") => { throw new BridgeError(code, "The command arguments are invalid."); };
39
+ const object = (x) => !!x && typeof x === "object" && !Array.isArray(x);
40
+ function argumentsFor(args, allowed) {
41
+ const options = new Map();
42
+ for (let i = 0; i < args.length; i++) {
43
+ const flag = args[i];
44
+ if (!allowed.includes(flag) || options.has(flag))
45
+ return invalid();
46
+ if (flag === "--json")
47
+ options.set(flag, true);
48
+ else {
49
+ const value = args[++i];
50
+ if (!value || value.startsWith("--"))
51
+ return invalid();
52
+ options.set(flag, value);
53
+ }
54
+ }
55
+ return options;
56
+ }
57
+ const required = (options, flag) => {
58
+ const value = options.get(flag);
59
+ return typeof value === "string" ? value : invalid();
60
+ };
61
+ function caller(env) {
62
+ const codex = env.CODEX_THREAD_ID, claude = env.CLAUDE_CODE_MESSAGING_SOCKET;
63
+ if (codex !== undefined && claude !== undefined)
64
+ return invalid("CALLER_IDENTITY_CONFLICT");
65
+ if (codex !== undefined)
66
+ return { kind: "codex", handle: codex };
67
+ if (claude !== undefined && path.isAbsolute(claude))
68
+ return { kind: "claude", address: `uds:${claude}` };
69
+ return invalid("CALLER_IDENTITY_REQUIRED");
70
+ }
71
+ async function body(input) {
72
+ const chunks = [];
73
+ let size = 0;
74
+ for await (const chunk of input) {
75
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));
76
+ size += bytes.length;
77
+ if (size > 16_384)
78
+ return invalid("MESSAGE_TOO_LARGE");
79
+ chunks.push(bytes);
80
+ }
81
+ let value;
82
+ try {
83
+ value = new TextDecoder("utf-8", { fatal: true }).decode(Buffer.concat(chunks));
84
+ }
85
+ catch {
86
+ return invalid("INVALID_MESSAGE_BODY");
87
+ }
88
+ if (!value.trim() || value.includes("\0"))
89
+ return invalid("INVALID_MESSAGE_BODY");
90
+ return value;
91
+ }
92
+ function hint(command, code, stateDir) {
93
+ if (code === "CALLER_IDENTITY_CONFLICT")
94
+ return "Use env -u CLAUDE_CODE_MESSAGING_SOCKET for a Codex call, or env -u CODEX_THREAD_ID for a Claude call; do not restart the broker.";
95
+ if (code === "CONTROL_CONNECT_DENIED")
96
+ return command === "serve"
97
+ ? `Grant local-policy access to ${stateDir}; verify EMBASSY_STATE_DIR names this user's own directory.`
98
+ : `Grant this task read/write access to ${stateDir}. Verify EMBASSY_STATE_DIR names this user's own directory. The broker may already be running; do not start a second broker.`;
99
+ if (code === "GATEWAY_STATE_SCHEMA_UNSUPPORTED" || code === "CORRUPT_GATEWAY_STATE")
100
+ return "Follow docs/CONFIGURATION.md#private-state-reset. Inspect unsettled work with the old version before resetting; a reset abandons it. Preserve the old state backup.";
101
+ if (code === "CONTROL_VERSION_MISMATCH")
102
+ return "Rebuild or repoint the CLI and broker to the same installation; restarting an unchanged binary cannot fix version skew.";
103
+ if (code === "CONTROL_WRITE_OUTCOME_AMBIGUOUS")
104
+ return "The operation may have applied. Inspect status; do not resend an uncertain write.";
105
+ if (code === "CONTROL_INVALID_RESPONSE")
106
+ return "If installations changed, rebuild or repoint the CLI and broker; otherwise inspect the broker and restart it if necessary.";
107
+ if (code === "CONTROL_SOCKET_UNSAFE" || code === "INSECURE_STATE_DIR")
108
+ return `Check ownership and private modes for ${stateDir}, and local sandbox access. Do not move state or start a second broker.`;
109
+ if (code === "CONTROL_SOCKET_MISSING" || code === "CONTROL_LISTENER_UNAVAILABLE")
110
+ return `No broker is reachable at ${stateDir}. Run embassy service install, or embassy serve in a trusted terminal.`;
111
+ return "";
112
+ }
113
+ function renderStatus(value) {
114
+ if (!object(value) || !Array.isArray(value.routes))
115
+ return invalid("CONTROL_INVALID_RESPONSE");
116
+ const lines = [`Broker: ${String(value.health)}${value.safeErrorCode ? ` / ${value.safeErrorCode}` : ""} (control/ledger; not a provider readiness proof)`];
117
+ for (const row of value.routes) {
118
+ if (!object(row))
119
+ return invalid("CONTROL_INVALID_RESPONSE");
120
+ const last = object(row.lastOperation) ? ` last ${String(row.lastOperation.outcome)} / ${String(row.lastOperation.code)}` : " not yet observed";
121
+ const collision = value.routes.filter((candidate) => object(candidate) && candidate.alias === row.alias).length > 1;
122
+ lines.push(`${String(row.alias)}${collision ? ` [ambiguous name; endpoint ${row.id}]` : ""} ${String(row.provider)} queued ${String(row.queueDepth)}${last}`);
123
+ }
124
+ if (value.routes.length === 0)
125
+ lines.push("No registered endpoints.");
126
+ if (object(value.federation) && Array.isArray(value.federation.nodes)) {
127
+ for (const node of value.federation.nodes) {
128
+ lines.push(`SSH ${node.host}: ${node.safeErrorCode ?? "catalog observation"} ${node.observedAt ?? "not yet refreshed"}`);
129
+ for (const row of node.routes)
130
+ lines.push(` ${row.alias} ${row.provider} owner ${row.host}`);
131
+ }
132
+ if (value.federation.truncated)
133
+ lines.push("Remote display limited to 128 rows; named lookup still asks the owner.");
134
+ }
135
+ const messages = value.messages;
136
+ if (messages.length)
137
+ lines.push("Recent deliveries:", ...messages.slice(-10).map((row) => ` ${row.source ?? "retired sender"} -> ${row.target ?? "remote/retired recipient"}: ${row.state}${row.safeErrorCode ? ` / ${row.safeErrorCode}` : ""} (${row.ageMs} ms)`));
138
+ const retirements = value.retirements;
139
+ if (retirements.length)
140
+ lines.push("Recent retirements:", ...retirements.slice(-10).map((row) => ` ${row.alias} ${row.at}`));
141
+ return `${lines.join("\n")}\n`;
142
+ }
143
+ export async function runCoreCli(args, dependencies = {}) {
144
+ const env = dependencies.env ?? process.env, stdin = dependencies.stdin ?? process.stdin;
145
+ const stdout = dependencies.stdout ?? process.stdout, stderr = dependencies.stderr ?? process.stderr;
146
+ const write = (command, result) => { stdout.write(`${JSON.stringify({ ok: true, command, result })}\n`); };
147
+ const verbs = ["--help", "--version", "serve", "service", "send", "register-codex", "retire", "status", "refresh", "health", "check", "delivery-status", "wait-delivery", "peer-stdio"];
148
+ const command = args[0] === undefined ? "--help" : verbs.includes(args[0]) ? args[0] : "unknown";
149
+ let stateDir = "the configured state directory";
150
+ try {
151
+ if (command === "--help" && args.length <= 1) {
152
+ stdout.write(HELP);
153
+ return 0;
154
+ }
155
+ if (command === "--version" && args.length === 1) {
156
+ stdout.write(`embassy ${CORE_VERSION}\n`);
157
+ return 0;
158
+ }
159
+ stateDir = path.resolve(defaultGatewayStateDir(env));
160
+ if (command === "serve") {
161
+ if (args.length !== 1)
162
+ return invalid();
163
+ await runCoreRuntime({ env, ...(dependencies.signal ? { signal: dependencies.signal } : {}), onReady: (ready) => { write(command, ready); } });
164
+ return 0;
165
+ }
166
+ if (command === "service") {
167
+ const subcommand = args[1];
168
+ if (args.length !== 2 || (subcommand !== "install" && subcommand !== "uninstall" && subcommand !== "status"))
169
+ return invalid();
170
+ write(command, await runCoreServiceCommand(subcommand, env, {
171
+ homeDir: userInfo().homedir, runLaunchctl: defaultRunLaunchctl,
172
+ execPath: process.execPath, cliPath: fileURLToPath(import.meta.url), uid: process.getuid(),
173
+ }));
174
+ return 0;
175
+ }
176
+ const inventory = await loadGatewayNodeInventory(stateDir);
177
+ const config = loadGatewayConfig(env, inventory);
178
+ const call = async (request) => {
179
+ const mutating = commandMutates(request.method);
180
+ const malformed = () => invalid(mutating ? "CONTROL_WRITE_OUTCOME_AMBIGUOUS" : "CONTROL_INVALID_RESPONSE");
181
+ const response = await requestLocalControl({ stateDir, socketPath: config.controlSocketPath,
182
+ request, mutating, timeoutMs: request.method === "check" ? 30_000 : 15_000 });
183
+ if (!object(response) || typeof response.ok !== "boolean")
184
+ return malformed();
185
+ if (!response.ok) {
186
+ if (Object.keys(response).length !== 2 || typeof response.code !== "string" || !/^[A-Z][A-Z0-9_]{0,63}$/.test(response.code))
187
+ return malformed();
188
+ if (mutating && ["HANDLER_FAILURE", "INVALID_HANDLER_RESPONSE", "GATEWAY_STATE_COMMIT_OUTCOME_UNKNOWN"].includes(response.code))
189
+ return malformed();
190
+ throw new BridgeError(response.code, "The gateway refused the command.");
191
+ }
192
+ if (Object.keys(response).length !== 2 || !isBrokerResult(request.method, response.result))
193
+ return malformed();
194
+ return response.result;
195
+ };
196
+ if (command === "peer-stdio") {
197
+ if (args.length !== 1)
198
+ return invalid();
199
+ const session = runFederationStdio({ host: inventory.host, nodes: inventory.nodes, input: stdin,
200
+ output: stdout, handlers: {
201
+ resolve: async (node, selector) => await call({ method: "peer_resolve", params: { node, selector } }),
202
+ catalog: async (node) => await call({ method: "peer_catalog", params: { node } }),
203
+ handoff: async (peerHost, handoff) => await call({ method: "peer_handoff", params: { node: peerHost, handoff } }),
204
+ } });
205
+ await session.done;
206
+ return 0;
207
+ }
208
+ let request;
209
+ let json = false;
210
+ if (command === "send") {
211
+ const options = argumentsFor(args.slice(1), ["--to", "--conversation"]);
212
+ if (options.size !== 1)
213
+ return invalid();
214
+ request = { method: "send", params: { caller: caller(env), body: await body(stdin),
215
+ ...(options.has("--to") ? { to: required(options, "--to") } : { conversation: required(options, "--conversation") }) } };
216
+ }
217
+ else if (command === "register-codex") {
218
+ const options = argumentsFor(args.slice(1), ["--alias", "--succeeds"]);
219
+ request = { method: "register_codex", params: { caller: caller(env), alias: required(options, "--alias"),
220
+ ...(options.has("--succeeds") ? { succeeds: required(options, "--succeeds") } : {}) } };
221
+ }
222
+ else if (command === "retire") {
223
+ const options = argumentsFor(args.slice(1), ["--alias", "--endpoint"]);
224
+ if (options.size !== 1)
225
+ return invalid();
226
+ request = { method: "retire_route", params: options.has("--alias")
227
+ ? { alias: required(options, "--alias") } : { endpoint: required(options, "--endpoint") } };
228
+ }
229
+ else if (command === "delivery-status" || command === "wait-delivery") {
230
+ request = { method: "delivery_status", params: { token: required(argumentsFor(args.slice(1), ["--token"]), "--token") } };
231
+ }
232
+ else if (command === "status") {
233
+ json = argumentsFor(args.slice(1), ["--json"]).has("--json");
234
+ request = { method: "list_snapshot", params: {} };
235
+ }
236
+ else {
237
+ if (args.length !== 1)
238
+ return invalid();
239
+ const method = command === "health" ? "health" : command === "refresh" ? "refresh_discovery" : command === "check" ? "check" : undefined;
240
+ if (!method)
241
+ return invalid();
242
+ request = { method, params: {} };
243
+ }
244
+ let result = await call(request);
245
+ if (command === "wait-delivery") {
246
+ const wallLimit = Date.now() + 86_403_000;
247
+ for (let attempts = 0; attempts < 345_612; attempts++) {
248
+ if (!object(result) || result.found !== true || result.terminal === true)
249
+ break;
250
+ if (dependencies.signal?.aborted || Date.now() >= Math.min(wallLimit, Date.parse(String(result.deadlineAt)) + 3_000))
251
+ return invalid("CONTROL_TIMEOUT");
252
+ await new Promise((resolve) => setTimeout(resolve, 250));
253
+ result = await call(request);
254
+ }
255
+ }
256
+ if (command === "status" && !json && stdout.isTTY)
257
+ stdout.write(renderStatus(result));
258
+ else
259
+ write(command, result);
260
+ if (command === "wait-delivery")
261
+ return object(result) && result.found === true ? result.state === "delivered" ? 0 : 6 : 3;
262
+ return 0;
263
+ }
264
+ catch (error) {
265
+ const code = error instanceof BridgeError || error instanceof LocalControlError ? error.code : "INTERNAL_ERROR";
266
+ stdout.write(`${JSON.stringify({ ok: false, command, error: { code } })}\n`);
267
+ stderr.write(`[embassy] ${code}\n`);
268
+ const guidance = hint(command, code, stateDir);
269
+ if (guidance)
270
+ stderr.write(`[embassy] ${guidance}\n`);
271
+ return code === "INVALID_ARGUMENTS" || code === "INVALID_REQUEST" ? 2 : 3;
272
+ }
273
+ }
274
+ let entrypoint = false;
275
+ try {
276
+ entrypoint = !!process.argv[1] && realpathSync(process.argv[1]) === fileURLToPath(import.meta.url);
277
+ }
278
+ catch { /* Imported module, not a CLI entry. */ }
279
+ if (entrypoint) {
280
+ runCoreCli(process.argv.slice(2)).then((code) => { process.exitCode = code; });
281
+ }
282
+ //# sourceMappingURL=core-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-cli.js","sourceRoot":"","sources":["../../../src/gateway/core-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type ServiceAgentDependencies, type ServiceAgentInstallResult, type ServiceAgentStatus, type ServiceAgentUninstallResult } from "./service-agent.js";
2
+ export type CoreServiceCommandDependencies = Omit<ServiceAgentDependencies, "env">;
3
+ export type CoreServiceCommandResult = ({
4
+ subcommand: "install";
5
+ health: {
6
+ status: "healthy" | "degraded";
7
+ elapsedMs: number;
8
+ };
9
+ } & ServiceAgentInstallResult) | ({
10
+ subcommand: "uninstall";
11
+ } & ServiceAgentUninstallResult) | ({
12
+ subcommand: "status";
13
+ } & ServiceAgentStatus);
14
+ /** Retained launchd lifecycle wrapper. Only install inspects broker inventory;
15
+ * status and uninstall remain usable when gateway state cannot be loaded. */
16
+ export declare function runCoreServiceCommand(subcommand: "install" | "uninstall" | "status", env: NodeJS.ProcessEnv, dependencies: CoreServiceCommandDependencies): Promise<CoreServiceCommandResult>;
@@ -0,0 +1,71 @@
1
+ import { BridgeError } from "../errors.js";
2
+ import { isBrokerResult } from "./broker-control.js";
3
+ import { defaultGatewayStateDir, loadGatewayConfig } from "./config.js";
4
+ import { loadGatewayNodeInventory } from "./federation-nodes.js";
5
+ import { LocalControlError, requestLocalControl } from "./local-control.js";
6
+ import { boundedServiceDetail, installServiceAgent, serviceAgentStatus, uninstallServiceAgent, } from "./service-agent.js";
7
+ const HEALTH_WAIT_MS = 10_000;
8
+ const HEALTH_POLL_MS = 200;
9
+ const HEALTH_REQUEST_MS = 1_000;
10
+ const HEALTH_ATTEMPTS = HEALTH_WAIT_MS / HEALTH_POLL_MS;
11
+ const object = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
12
+ async function waitForHealth(stateDir, socketPath, delay, now) {
13
+ const started = now();
14
+ let lastObserved = "SERVICE_HEALTH_NO_RESPONSE";
15
+ for (let attempt = 0; attempt < HEALTH_ATTEMPTS; attempt += 1) {
16
+ const elapsed = Math.max(0, now() - started);
17
+ const remaining = HEALTH_WAIT_MS - elapsed;
18
+ if (remaining < 50)
19
+ break;
20
+ try {
21
+ const response = await requestLocalControl({ stateDir, socketPath,
22
+ request: { method: "health", params: {} }, mutating: false,
23
+ timeoutMs: Math.min(remaining, HEALTH_REQUEST_MS) });
24
+ if (object(response) && response.ok === true && Object.keys(response).length === 2 &&
25
+ isBrokerResult("health", response.result)) {
26
+ return { status: response.result.status,
27
+ elapsedMs: Math.max(0, now() - started) };
28
+ }
29
+ lastObserved = object(response) && response.ok === false &&
30
+ typeof response.code === "string" && /^[A-Z][A-Z0-9_]{0,63}$/.test(response.code)
31
+ ? response.code : "CONTROL_INVALID_RESPONSE";
32
+ }
33
+ catch (error) {
34
+ lastObserved = error instanceof LocalControlError || error instanceof BridgeError
35
+ ? error.code : "SERVICE_HEALTH_NO_RESPONSE";
36
+ }
37
+ const left = HEALTH_WAIT_MS - Math.max(0, now() - started);
38
+ if (left < 50)
39
+ break;
40
+ await delay(Math.min(HEALTH_POLL_MS, left));
41
+ }
42
+ throw new BridgeError("SERVICE_HEALTH_UNAVAILABLE", `Installed, but the broker did not answer within 10.0 s; last observed ${lastObserved}.`, true);
43
+ }
44
+ /** Retained launchd lifecycle wrapper. Only install inspects broker inventory;
45
+ * status and uninstall remain usable when gateway state cannot be loaded. */
46
+ export async function runCoreServiceCommand(subcommand, env, dependencies) {
47
+ const service = { ...dependencies, env };
48
+ try {
49
+ if (subcommand === "status")
50
+ return { subcommand, ...await serviceAgentStatus(service) };
51
+ if (subcommand === "uninstall")
52
+ return { subcommand, ...await uninstallServiceAgent(service) };
53
+ const stateDir = defaultGatewayStateDir(env);
54
+ const inventory = await loadGatewayNodeInventory(stateDir);
55
+ const config = loadGatewayConfig(env, inventory);
56
+ const installed = await installServiceAgent(service);
57
+ const now = dependencies.now ?? (() => performance.now());
58
+ const delay = dependencies.delay ?? (async (milliseconds) => await new Promise((resolve) => setTimeout(resolve, milliseconds)));
59
+ const health = await waitForHealth(config.stateDir, config.controlSocketPath, delay, now);
60
+ return { subcommand, ...installed, health };
61
+ }
62
+ catch (error) {
63
+ if (error instanceof BridgeError)
64
+ throw error;
65
+ const errno = object(error) && (typeof error.errno === "number" || typeof error.syscall === "string");
66
+ throw new BridgeError(errno ? "SERVICE_AGENT_FILESYSTEM_FAILED" : "SERVICE_AGENT_COMMAND_FAILED", errno && error instanceof Error
67
+ ? `The service command could not complete: ${boundedServiceDetail(error.message)}`
68
+ : "The service command could not complete.", true);
69
+ }
70
+ }
71
+ //# sourceMappingURL=core-service-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-service-command.js","sourceRoot":"","sources":["../../../src/gateway/core-service-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { ClaudePeerAdapter } from "./claude-peer.js";
2
+ import { type Endpoint, type EndpointRef, type LedgerLimits, type LedgerState } from "./ledger.js";
3
+ import type { OwnedStateFile } from "./owned-state.js";
4
+ export type ClaudeDirectoryAdapter = Pick<ClaudePeerAdapter, "discover" | "resolveReplyAddress" | "assertTargetWorkspaceDisjoint">;
5
+ export type RemoteEndpointResolver = Readonly<{
6
+ named: (alias: string) => Promise<readonly Endpoint[]>;
7
+ exact: (identity: EndpointRef) => Promise<Endpoint | undefined>;
8
+ }>;
9
+ export type EndpointCaller = Readonly<{
10
+ kind: "codex";
11
+ handle: string;
12
+ }> | Readonly<{
13
+ kind: "claude";
14
+ address: string;
15
+ }>;
16
+ export type EndpointDirectoryOptions = Readonly<{
17
+ host: string;
18
+ limits: LedgerLimits;
19
+ store: OwnedStateFile<LedgerState>;
20
+ claude: ClaudeDirectoryAdapter;
21
+ remote?: RemoteEndpointResolver;
22
+ createRegistrationId?: (provider: "claude" | "codex", handle: string) => string;
23
+ }>;
24
+ export declare class EndpointDirectory {
25
+ #private;
26
+ readonly options: EndpointDirectoryOptions;
27
+ constructor(options: EndpointDirectoryOptions);
28
+ registerCodex(handle: string, alias: string, succeeds?: string): Promise<Endpoint>;
29
+ caller(input: EndpointCaller): Promise<Endpoint>;
30
+ named(selector: string): Promise<Endpoint | undefined>;
31
+ exact(identity: EndpointRef): Promise<Endpoint | undefined>;
32
+ refresh(): Promise<Endpoint[]>;
33
+ }