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,26 @@
1
+ import { type Coordinator, type Destination, type WakeInput, type WakeResult } from "./coordinator.js";
2
+ import { type LedgerLimits, type LedgerState } from "./ledger.js";
3
+ import type { OwnedStateFile } from "./owned-state.js";
4
+ export type BrokerCheckOptions = Readonly<{
5
+ host: string;
6
+ limits: LedgerLimits;
7
+ store: OwnedStateFile<LedgerState>;
8
+ coordinator: Coordinator;
9
+ }>;
10
+ export type BrokerCheckResult = Readonly<{
11
+ status: "ok";
12
+ scope: "broker-loopback";
13
+ }>;
14
+ /** Adds a broker-only destination around the real Codex adapter. It intercepts only
15
+ * identities minted for the duration of check(); every production write delegates. */
16
+ export declare class LoopbackDestination implements Destination {
17
+ private readonly innerCodex;
18
+ private readonly expected;
19
+ private checking;
20
+ constructor(innerCodex: Destination);
21
+ deliver(input: WakeInput): Promise<WakeResult>;
22
+ cleanup({ host, limits, store }: Omit<BrokerCheckOptions, "coordinator">): Promise<void>;
23
+ check(options: BrokerCheckOptions): Promise<BrokerCheckResult>;
24
+ private runCheck;
25
+ close(): Promise<void>;
26
+ }
@@ -0,0 +1,89 @@
1
+ import { randomBytes, randomUUID } from "node:crypto";
2
+ import { Ledger, bodyHash, sameEndpoint } from "./ledger.js";
3
+ const LOOPBACK = /^loopback:([0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})$/i;
4
+ const ref = ({ id, host, provider }) => ({ id, host, provider });
5
+ const ids = () => ({ id: `msg_${randomUUID()}`, token: `dlv_${randomBytes(18).toString("base64url")}`,
6
+ reply: `conv_${randomBytes(24).toString("base64url")}` });
7
+ function isLoopback(endpoint, host) {
8
+ const match = endpoint.host === host && endpoint.provider === "codex" ? LOOPBACK.exec(endpoint.handle) : null;
9
+ return match !== null && endpoint.id === `reg_loopback_${match[1]}`;
10
+ }
11
+ /** Adds a broker-only destination around the real Codex adapter. It intercepts only
12
+ * identities minted for the duration of check(); every production write delegates. */
13
+ export class LoopbackDestination {
14
+ innerCodex;
15
+ expected = new Map();
16
+ checking;
17
+ constructor(innerCodex) {
18
+ this.innerCodex = innerCodex;
19
+ }
20
+ async deliver(input) {
21
+ const expected = this.expected.get(input.target.id);
22
+ if (!expected)
23
+ return this.innerCodex.deliver(input);
24
+ if (!sameEndpoint(input.target, expected.target) || input.messages.length !== 1 ||
25
+ !sameEndpoint(input.messages[0].source, expected.source))
26
+ throw new Error("INVALID_LOOPBACK_WAKE");
27
+ if (!await input.authorize({ bytes: Buffer.byteLength(input.text), sha256: bodyHash(input.text) })) {
28
+ return { outcome: "deferred", code: "WRITE_AUTHORIZATION_DENIED" };
29
+ }
30
+ await input.accepted("unconfirmed");
31
+ return { outcome: "delivered", code: "TRANSPORT_WRITTEN" };
32
+ }
33
+ async cleanup({ host, limits, store }) {
34
+ await store.transact((state, now) => {
35
+ const ledger = new Ledger(state, host, limits, now.getTime());
36
+ for (const endpoint of [...state.endpoints])
37
+ if (isLoopback(endpoint, host))
38
+ ledger.retire(endpoint);
39
+ });
40
+ }
41
+ check(options) {
42
+ return this.checking ??= this.runCheck(options).finally(() => { this.checking = undefined; });
43
+ }
44
+ async runCheck({ host, limits, store, coordinator }) {
45
+ await this.cleanup({ host, limits, store });
46
+ const nonceA = randomUUID(), nonceB = randomUUID();
47
+ const source = { id: `reg_loopback_${nonceA}`, handle: `loopback:${nonceA}`,
48
+ host, provider: "codex", alias: `loopback-a-${nonceA.slice(0, 8)}@${host}` };
49
+ const target = { id: `reg_loopback_${nonceB}`, handle: `loopback:${nonceB}`,
50
+ host, provider: "codex", alias: `loopback-b-${nonceB.slice(0, 8)}@${host}` };
51
+ const change = (operation) => store.transact((state, now) => operation(new Ledger(state, host, limits, now.getTime())));
52
+ try {
53
+ await change((ledger) => { ledger.register(source); ledger.register(target); });
54
+ this.expected.set(target.id, { source: ref(source), target: ref(target) });
55
+ const challenge = await change((ledger) => ledger.admit({ ...ids(), source: ref(source), target: ref(target),
56
+ body: "Embassy broker loopback challenge.", deadline: ledger.now + limits.deadlineMs, steer: false }).delivery);
57
+ await coordinator.wake(target);
58
+ const delivered = (await store.snapshot()).deliveries.find((row) => row.id === challenge.id);
59
+ if (delivered?.state.phase !== "terminal" || delivered.state.outcome !== "delivered")
60
+ throw new Error("LOOPBACK_NOT_DELIVERED");
61
+ this.expected.delete(target.id);
62
+ this.expected.set(source.id, { source: ref(target), target: ref(source) });
63
+ const response = await change((ledger) => {
64
+ const replyTarget = ledger.replyTarget(challenge.reply, target);
65
+ if (!sameEndpoint(replyTarget, source))
66
+ throw new Error("INVALID_LOOPBACK_REPLY_TARGET");
67
+ return ledger.admit({ ...ids(), source: ref(target), target: replyTarget,
68
+ body: "Embassy broker loopback reply.", deadline: ledger.now + limits.deadlineMs, steer: false }).delivery;
69
+ });
70
+ await coordinator.wake(source);
71
+ const replied = (await store.snapshot()).deliveries.find((row) => row.id === response.id);
72
+ if (replied?.state.phase !== "terminal" || replied.state.outcome !== "delivered")
73
+ throw new Error("LOOPBACK_REPLY_NOT_DELIVERED");
74
+ return { status: "ok", scope: "broker-loopback" };
75
+ }
76
+ finally {
77
+ this.expected.delete(source.id);
78
+ this.expected.delete(target.id);
79
+ await change((ledger) => {
80
+ if (ledger.endpoint(source))
81
+ ledger.retire(source);
82
+ if (ledger.endpoint(target))
83
+ ledger.retire(target);
84
+ });
85
+ }
86
+ }
87
+ close() { return this.innerCodex.close(); }
88
+ }
89
+ //# sourceMappingURL=broker-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker-check.js","sourceRoot":"","sources":["../../../src/gateway/broker-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import type { MessagingBroker } from "./broker.js";
2
+ import type { EndpointCaller } from "./endpoint-directory.js";
3
+ import type { EndpointRef } from "./ledger.js";
4
+ import type { FederatedHandoff } from "./federation.js";
5
+ export type BrokerCommand = {
6
+ method: "health" | "list_snapshot" | "refresh_discovery" | "check";
7
+ params: Record<string, never>;
8
+ } | {
9
+ method: "register_codex";
10
+ params: {
11
+ caller: EndpointCaller;
12
+ alias: string;
13
+ succeeds?: string;
14
+ };
15
+ } | {
16
+ method: "send";
17
+ params: {
18
+ caller: EndpointCaller;
19
+ body: string;
20
+ to?: string;
21
+ conversation?: string;
22
+ };
23
+ } | {
24
+ method: "retire_route";
25
+ params: {
26
+ alias: string;
27
+ } | {
28
+ endpoint: string;
29
+ };
30
+ } | {
31
+ method: "delivery_status";
32
+ params: {
33
+ token: string;
34
+ };
35
+ } | {
36
+ method: "peer_catalog";
37
+ params: {
38
+ node: string;
39
+ };
40
+ } | {
41
+ method: "peer_resolve";
42
+ params: {
43
+ node: string;
44
+ selector: string | EndpointRef;
45
+ };
46
+ } | {
47
+ method: "peer_handoff";
48
+ params: {
49
+ node: string;
50
+ handoff: FederatedHandoff;
51
+ };
52
+ };
53
+ /** One public projection contract, used before emission and after transport. Native
54
+ * handles and arbitrary adapter fields can never hitchhike in a valid result. */
55
+ export declare function isBrokerResult(method: BrokerCommand["method"], value: unknown): boolean;
56
+ /** Closed application vocabulary; the Unix envelope/version belongs to local-control. */
57
+ export declare function parseBrokerCommand(input: unknown, validateHandoff: (x: unknown) => boolean): BrokerCommand;
58
+ export type BrokerControlOptions = Readonly<{
59
+ broker: MessagingBroker;
60
+ validateHandoff: (x: unknown) => boolean;
61
+ check: () => Promise<unknown>;
62
+ }>;
63
+ export declare function handleBrokerCommand(input: unknown, options: BrokerControlOptions): Promise<{
64
+ ok: true;
65
+ result: unknown;
66
+ code?: never;
67
+ } | {
68
+ ok: false;
69
+ code: string;
70
+ result?: never;
71
+ }>;
72
+ export declare const commandMutates: (method: BrokerCommand["method"]) => boolean;
@@ -0,0 +1,164 @@
1
+ import { BridgeError } from "../errors.js";
2
+ const object = (x) => !!x && typeof x === "object" && !Array.isArray(x);
3
+ const exact = (x, keys, optional = []) => object(x) &&
4
+ keys.every((key) => Object.hasOwn(x, key)) && Object.keys(x).every((key) => keys.includes(key) || optional.includes(key));
5
+ const alias = (x) => typeof x === "string" && /^[a-z][a-z0-9_-]{0,31}@[a-z0-9](?:[a-z0-9.-]{0,61}[a-z0-9])?$/.test(x);
6
+ const host = (x) => typeof x === "string" && /^[a-z0-9](?:[a-z0-9.-]{0,61}[a-z0-9])?$/.test(x);
7
+ const uuid = (x) => typeof x === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(x);
8
+ const token = (x, prefix, length) => typeof x === "string" && new RegExp(`^${prefix}[A-Za-z0-9_-]{${length}}$`).test(x);
9
+ const ref = (x) => exact(x, ["id", "host", "provider"]) && token(x.id, "reg_", "1,252") && host(x.host) && (x.provider === "claude" || x.provider === "codex");
10
+ const caller = (x) => exact(x, ["kind", "handle"]) && x.kind === "codex" && uuid(x.handle) ||
11
+ exact(x, ["kind", "address"]) && x.kind === "claude" && typeof x.address === "string" &&
12
+ x.address.startsWith("uds:/") && x.address.length <= 256 && !x.address.includes("\0");
13
+ const invalid = () => { throw new BridgeError("INVALID_REQUEST", "The control request is invalid."); };
14
+ const count = (x) => Number.isSafeInteger(x) && x >= 0;
15
+ const code = (x) => typeof x === "string" && /^[A-Z][A-Z0-9_]{0,63}$/.test(x);
16
+ const date = (x) => typeof x === "string" && Number.isFinite(Date.parse(x)) && new Date(x).toISOString() === x;
17
+ const outcomes = ["delivered", "failed", "cancelled", "expired", "ambiguous", "unconfirmed"];
18
+ const endpoint = (x) => exact(x, ["id", "host", "provider", "alias"]) &&
19
+ ref({ id: x.id, host: x.host, provider: x.provider }) && alias(x.alias) && x.alias.endsWith(`@${x.host}`);
20
+ const rows = (x, maximum, accepts) => Array.isArray(x) && x.length <= maximum && x.every(accepts);
21
+ const endpoints = (x, accepts = endpoint) => rows(x, 128, accepts) &&
22
+ new Set(x.map((row) => JSON.stringify([row.host, row.id]))).size === x.length;
23
+ /** One public projection contract, used before emission and after transport. Native
24
+ * handles and arbitrary adapter fields can never hitchhike in a valid result. */
25
+ export function isBrokerResult(method, value) {
26
+ switch (method) {
27
+ case "health": return exact(value, ["status"]) && ["healthy", "degraded"].includes(String(value.status));
28
+ case "check": return exact(value, ["status", "scope"]) && value.status === "ok" && value.scope === "broker-loopback";
29
+ case "register_codex": return endpoint(value);
30
+ case "send": return exact(value, ["accepted", "conversationId", "deliveryToken"]) && value.accepted === true &&
31
+ token(value.conversationId, "conv_", "16,64") && token(value.deliveryToken, "dlv_", "24");
32
+ case "retire_route": return exact(value, ["cancelled", "ambiguous", "unconfirmed"]) && Object.values(value).every(count);
33
+ case "refresh_discovery": return exact(value, ["routes"]) && endpoints(value.routes);
34
+ case "peer_catalog": return endpoints(value);
35
+ case "peer_resolve": return value === null || endpoint(value);
36
+ case "peer_handoff": return exact(value, ["accepted"]) && value.accepted === true ||
37
+ exact(value, ["accepted", "code"]) && value.accepted === false && code(value.code);
38
+ case "delivery_status": return exact(value, ["found"]) && value.found === false ||
39
+ exact(value, ["found", "state", "terminal", "deadlineAt"], ["pendingForMs", "safeErrorCode"]) && value.found === true && date(value.deadlineAt) &&
40
+ (value.terminal === true ? outcomes.includes(String(value.state)) && code(value.safeErrorCode) && value.pendingForMs === undefined
41
+ : value.terminal === false && ["queued", "reserved", "armed", "accepted"].includes(String(value.state)) && count(value.pendingForMs) && value.safeErrorCode === undefined);
42
+ case "list_snapshot": return exact(value, ["health", "revision", "routes", "messages", "retirements"], ["safeErrorCode", "federation"]) &&
43
+ ["healthy", "degraded"].includes(String(value.health)) && count(value.revision) &&
44
+ (value.safeErrorCode === undefined || code(value.safeErrorCode)) &&
45
+ (value.federation === undefined || exact(value.federation, ["nodes", "truncated"]) && typeof value.federation.truncated === "boolean" &&
46
+ rows(value.federation.nodes, 32, (node) => exact(node, ["host", "routes"], ["observedAt", "safeErrorCode"]) && host(node.host) &&
47
+ endpoints(node.routes, (row) => endpoint(row) && row.host === node.host) &&
48
+ (node.observedAt === undefined || date(node.observedAt)) &&
49
+ (node.safeErrorCode === undefined || node.safeErrorCode === "PEER_TUNNEL_UNAVAILABLE")) &&
50
+ new Set(value.federation.nodes.map((node) => node.host)).size === value.federation.nodes.length &&
51
+ value.federation.nodes.reduce((sum, node) => sum + node.routes.length, 0) <= 128) &&
52
+ endpoints(value.routes, (row) => exact(row, ["id", "alias", "provider", "host", "queueDepth"], ["lastOperation"]) &&
53
+ endpoint({ id: row.id, alias: row.alias, provider: row.provider, host: row.host }) && count(row.queueDepth) &&
54
+ (row.lastOperation === undefined || exact(row.lastOperation, ["outcome", "code"]) &&
55
+ [...outcomes, "deferred"].includes(String(row.lastOperation.outcome)) && code(row.lastOperation.code))) &&
56
+ rows(value.messages, 600, (row) => exact(row, ["state", "ageMs"], ["source", "target", "safeErrorCode"]) &&
57
+ [...outcomes, "queued", "reserved", "armed", "accepted"].includes(String(row.state)) && count(row.ageMs) &&
58
+ (row.source === undefined || alias(row.source)) && (row.target === undefined || alias(row.target)) &&
59
+ (row.safeErrorCode === undefined || code(row.safeErrorCode))) &&
60
+ rows(value.retirements, 500, (row) => exact(row, ["alias", "at"]) && alias(row.alias) && date(row.at));
61
+ }
62
+ }
63
+ /** Closed application vocabulary; the Unix envelope/version belongs to local-control. */
64
+ export function parseBrokerCommand(input, validateHandoff) {
65
+ if (!exact(input, ["method", "params"]) || typeof input.method !== "string")
66
+ return invalid();
67
+ const p = input.params;
68
+ let valid = false;
69
+ switch (input.method) {
70
+ case "health":
71
+ case "list_snapshot":
72
+ case "refresh_discovery":
73
+ case "check":
74
+ valid = exact(p, []);
75
+ break;
76
+ case "register_codex":
77
+ valid = exact(p, ["caller", "alias"], ["succeeds"]) && caller(p.caller) && p.caller.kind === "codex" && alias(p.alias) &&
78
+ (p.succeeds === undefined || alias(p.succeeds));
79
+ break;
80
+ case "send":
81
+ valid = exact(p, ["caller", "body"], ["to", "conversation"]) && caller(p.caller) && typeof p.body === "string" &&
82
+ p.body.trim().length > 0 && !p.body.includes("\0") && Buffer.byteLength(p.body) <= 16_384 &&
83
+ (Object.hasOwn(p, "to") !== Object.hasOwn(p, "conversation")) &&
84
+ (p.to === undefined ? token(p.conversation, "conv_", "16,64") : alias(p.to) || uuid(p.to));
85
+ break;
86
+ case "retire_route":
87
+ valid = exact(p, ["alias"]) && alias(p.alias) ||
88
+ exact(p, ["endpoint"]) && token(p.endpoint, "reg_", "1,252");
89
+ break;
90
+ case "delivery_status":
91
+ valid = exact(p, ["token"]) && token(p.token, "dlv_", "24");
92
+ break;
93
+ case "peer_catalog":
94
+ valid = exact(p, ["node"]) && host(p.node);
95
+ break;
96
+ case "peer_resolve":
97
+ valid = exact(p, ["node", "selector"]) && host(p.node) && (alias(p.selector) || ref(p.selector));
98
+ break;
99
+ case "peer_handoff":
100
+ valid = exact(p, ["node", "handoff"]) && host(p.node) && validateHandoff(p.handoff);
101
+ break;
102
+ }
103
+ return valid ? input : invalid();
104
+ }
105
+ const publicEndpoint = ({ id, host, provider, alias }) => ({ id, host, provider, alias });
106
+ export async function handleBrokerCommand(input, options) {
107
+ try {
108
+ const command = parseBrokerCommand(input, options.validateHandoff);
109
+ const broker = options.broker;
110
+ let result;
111
+ switch (command.method) {
112
+ case "health":
113
+ result = { status: (await broker.status()).health };
114
+ break;
115
+ case "list_snapshot":
116
+ result = await broker.status();
117
+ break;
118
+ case "refresh_discovery":
119
+ result = await broker.refresh();
120
+ break;
121
+ case "register_codex":
122
+ result = await broker.register(command.params.caller, command.params.alias, command.params.succeeds);
123
+ break;
124
+ case "send":
125
+ result = await broker.send(command.params.caller, command.params.to === undefined ? { conversation: command.params.conversation } : { to: command.params.to }, command.params.body);
126
+ break;
127
+ case "retire_route":
128
+ result = await broker.retire("alias" in command.params ? command.params.alias : command.params);
129
+ break;
130
+ case "delivery_status":
131
+ result = await broker.delivery(command.params.token);
132
+ break;
133
+ case "check":
134
+ result = await options.check();
135
+ break;
136
+ case "peer_catalog":
137
+ case "peer_resolve":
138
+ case "peer_handoff": {
139
+ if (!broker.options.nodes?.includes(command.params.node))
140
+ throw new BridgeError("PEER_NOT_CONFIGURED", "The node is not configured.");
141
+ if (command.method === "peer_catalog")
142
+ result = (await broker.options.directory.refresh()).map(publicEndpoint);
143
+ else if (command.method === "peer_handoff")
144
+ result = await broker.handoff(command.params.node, command.params.handoff);
145
+ else {
146
+ const selected = command.params.selector;
147
+ if (typeof selected === "string" ? !selected.endsWith(`@${broker.options.host}`) : selected.host !== broker.options.host)
148
+ return invalid();
149
+ const endpoint = typeof selected === "string" ? await broker.options.directory.named(selected) : await broker.options.directory.exact(selected);
150
+ result = endpoint ? publicEndpoint(endpoint) : null;
151
+ }
152
+ break;
153
+ }
154
+ }
155
+ if (!isBrokerResult(command.method, result))
156
+ throw new BridgeError("INVALID_HANDLER_RESPONSE", "The result is outside the public projection.");
157
+ return { ok: true, result };
158
+ }
159
+ catch (error) {
160
+ return { ok: false, code: error instanceof BridgeError && /^[A-Z][A-Z0-9_]{0,63}$/.test(error.code) ? error.code : "HANDLER_FAILURE" };
161
+ }
162
+ }
163
+ export const commandMutates = (method) => !["health", "list_snapshot", "delivery_status", "peer_catalog", "peer_resolve"].includes(method);
164
+ //# sourceMappingURL=broker-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker-control.js","sourceRoot":"","sources":["../../../src/gateway/broker-control.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ import { Coordinator } from "./coordinator.js";
2
+ import { EndpointDirectory, type EndpointCaller } from "./endpoint-directory.js";
3
+ import { type LedgerLimits, type LedgerState } from "./ledger.js";
4
+ import type { OwnedStateFile } from "./owned-state.js";
5
+ import type { FederatedHandoff, Federation } from "./federation.js";
6
+ export type BrokerOptions = Readonly<{
7
+ host: string;
8
+ store: OwnedStateFile<LedgerState>;
9
+ limits: LedgerLimits;
10
+ directory: EndpointDirectory;
11
+ coordinator: Coordinator;
12
+ now?: () => number;
13
+ nodes?: readonly string[];
14
+ steeringEnabled?: boolean;
15
+ federation?: Pick<Federation, "catalog" | "snapshot">;
16
+ }>;
17
+ /** Application commands over the directory and the single delivery ledger. */
18
+ export declare class MessagingBroker {
19
+ readonly options: BrokerOptions;
20
+ private timer;
21
+ private stopped;
22
+ private started;
23
+ private pumping;
24
+ private requested;
25
+ private fault;
26
+ private readonly now;
27
+ constructor(options: BrokerOptions);
28
+ private change;
29
+ start(): Promise<void>;
30
+ register(caller: EndpointCaller, alias: string, succeeds?: string): Promise<{
31
+ id: string;
32
+ alias: string;
33
+ provider: "claude" | "codex";
34
+ host: string;
35
+ }>;
36
+ send(caller: EndpointCaller, address: {
37
+ to: string;
38
+ } | {
39
+ conversation: string;
40
+ }, body: string): Promise<{
41
+ accepted: true;
42
+ conversationId: string;
43
+ deliveryToken: string;
44
+ }>;
45
+ retire(selector: string | {
46
+ endpoint: string;
47
+ }): Promise<{
48
+ cancelled: number;
49
+ ambiguous: number;
50
+ unconfirmed: number;
51
+ }>;
52
+ handoff(peerHost: string, input: FederatedHandoff): Promise<{
53
+ accepted: false;
54
+ code: string;
55
+ } | {
56
+ accepted: true;
57
+ code?: never;
58
+ }>;
59
+ delivery(token: string): Promise<{
60
+ found: false;
61
+ } | {
62
+ safeErrorCode: string;
63
+ found: true;
64
+ state: import("./ledger.js").Outcome | "queued" | "reserved" | "armed" | "accepted";
65
+ terminal: boolean;
66
+ deadlineAt: string;
67
+ } | {
68
+ pendingForMs: number;
69
+ found: true;
70
+ state: import("./ledger.js").Outcome | "queued" | "reserved" | "armed" | "accepted";
71
+ terminal: boolean;
72
+ deadlineAt: string;
73
+ }>;
74
+ refresh(): Promise<{
75
+ routes: {
76
+ id: string;
77
+ alias: string;
78
+ provider: "claude" | "codex";
79
+ host: string;
80
+ }[];
81
+ }>;
82
+ status(): Promise<{
83
+ routes: {
84
+ queueDepth: number;
85
+ lastOperation?: Readonly<{
86
+ outcome: import("./ledger.js").Outcome | "deferred";
87
+ code: string;
88
+ unwritten?: true;
89
+ }> | undefined;
90
+ id: string;
91
+ alias: string;
92
+ provider: "claude" | "codex";
93
+ host: string;
94
+ }[];
95
+ messages: {
96
+ safeErrorCode?: string;
97
+ source: string | undefined;
98
+ target: string | undefined;
99
+ state: import("./ledger.js").Outcome | "queued" | "reserved" | "armed" | "accepted";
100
+ ageMs: number;
101
+ }[];
102
+ retirements: {
103
+ alias: string;
104
+ at: string;
105
+ }[];
106
+ federation?: Readonly<{
107
+ nodes: readonly import("./federation.js").FederationObservation[];
108
+ truncated: boolean;
109
+ }>;
110
+ revision: number;
111
+ safeErrorCode?: string;
112
+ health: string;
113
+ }>;
114
+ private kick;
115
+ private pump;
116
+ close(): Promise<void>;
117
+ }