agent-embassy 3.1.0 → 4.1.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 (118) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/CONTRIBUTING.md +92 -202
  3. package/README.md +179 -162
  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 +9 -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 +14 -0
  27. package/dist/src/gateway/core-cli.js +293 -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/core-version.d.ts +1 -0
  33. package/dist/src/gateway/core-version.js +2 -0
  34. package/dist/src/gateway/core-version.js.map +1 -0
  35. package/dist/src/gateway/endpoint-directory.d.ts +33 -0
  36. package/dist/src/gateway/endpoint-directory.js +223 -0
  37. package/dist/src/gateway/endpoint-directory.js.map +1 -0
  38. package/dist/src/gateway/federation.d.ts +89 -0
  39. package/dist/src/gateway/federation.js +632 -0
  40. package/dist/src/gateway/federation.js.map +1 -0
  41. package/dist/src/gateway/ledger-codec.d.ts +3 -0
  42. package/dist/src/gateway/ledger-codec.js +159 -0
  43. package/dist/src/gateway/ledger-codec.js.map +1 -0
  44. package/dist/src/gateway/ledger.d.ts +138 -0
  45. package/dist/src/gateway/ledger.js +319 -0
  46. package/dist/src/gateway/ledger.js.map +1 -0
  47. package/dist/src/gateway/local-control.d.ts +23 -0
  48. package/dist/src/gateway/local-control.js +489 -0
  49. package/dist/src/gateway/local-control.js.map +1 -0
  50. package/dist/src/gateway/native-destinations.d.ts +34 -0
  51. package/dist/src/gateway/native-destinations.js +272 -0
  52. package/dist/src/gateway/native-destinations.js.map +1 -0
  53. package/dist/src/gateway/owned-state.d.ts +57 -0
  54. package/dist/src/gateway/owned-state.js +398 -0
  55. package/dist/src/gateway/owned-state.js.map +1 -0
  56. package/dist/src/gateway/provenance-envelope.d.ts +3 -3
  57. package/dist/src/gateway/provenance-envelope.js +3 -23
  58. package/dist/src/gateway/provenance-envelope.js.map +1 -1
  59. package/dist/src/gateway/runtime.d.ts +41 -0
  60. package/dist/src/gateway/runtime.js +175 -0
  61. package/dist/src/gateway/runtime.js.map +1 -0
  62. package/dist/src/gateway/tui.d.ts +67 -0
  63. package/dist/src/gateway/tui.js +516 -0
  64. package/dist/src/gateway/tui.js.map +1 -0
  65. package/docs/CONFIGURATION.md +178 -266
  66. package/docs/DELIVERY.md +133 -82
  67. package/docs/GATEWAY-ARCHITECTURE.md +281 -949
  68. package/package.json +5 -5
  69. package/skills/embassy-peer/SKILL.md +38 -196
  70. package/skills/embassy-peer/agents/openai.yaml +2 -2
  71. package/dist/src/gateway/claude-helper-protocol.d.ts +0 -117
  72. package/dist/src/gateway/claude-helper-protocol.js +0 -122
  73. package/dist/src/gateway/claude-helper-protocol.js.map +0 -1
  74. package/dist/src/gateway/claude-helper-supervisor.d.ts +0 -87
  75. package/dist/src/gateway/claude-helper-supervisor.js +0 -374
  76. package/dist/src/gateway/claude-helper-supervisor.js.map +0 -1
  77. package/dist/src/gateway/claude-helper.d.ts +0 -1
  78. package/dist/src/gateway/claude-helper.js +0 -252
  79. package/dist/src/gateway/claude-helper.js.map +0 -1
  80. package/dist/src/gateway/cli.d.ts +0 -56
  81. package/dist/src/gateway/cli.js +0 -1532
  82. package/dist/src/gateway/cli.js.map +0 -1
  83. package/dist/src/gateway/codex-socket-holder.d.ts +0 -26
  84. package/dist/src/gateway/codex-socket-holder.js +0 -76
  85. package/dist/src/gateway/codex-socket-holder.js.map +0 -1
  86. package/dist/src/gateway/control.d.ts +0 -279
  87. package/dist/src/gateway/control.js +0 -933
  88. package/dist/src/gateway/control.js.map +0 -1
  89. package/dist/src/gateway/peer-client.d.ts +0 -58
  90. package/dist/src/gateway/peer-client.js +0 -217
  91. package/dist/src/gateway/peer-client.js.map +0 -1
  92. package/dist/src/gateway/peer-mailbox.d.ts +0 -78
  93. package/dist/src/gateway/peer-mailbox.js +0 -168
  94. package/dist/src/gateway/peer-mailbox.js.map +0 -1
  95. package/dist/src/gateway/peer-protocol.d.ts +0 -110
  96. package/dist/src/gateway/peer-protocol.js +0 -79
  97. package/dist/src/gateway/peer-protocol.js.map +0 -1
  98. package/dist/src/gateway/peer-stdio.d.ts +0 -23
  99. package/dist/src/gateway/peer-stdio.js +0 -100
  100. package/dist/src/gateway/peer-stdio.js.map +0 -1
  101. package/dist/src/gateway/providers.d.ts +0 -164
  102. package/dist/src/gateway/providers.js +0 -975
  103. package/dist/src/gateway/providers.js.map +0 -1
  104. package/dist/src/gateway/server.d.ts +0 -46
  105. package/dist/src/gateway/server.js +0 -216
  106. package/dist/src/gateway/server.js.map +0 -1
  107. package/dist/src/gateway/service.d.ts +0 -371
  108. package/dist/src/gateway/service.js +0 -2335
  109. package/dist/src/gateway/service.js.map +0 -1
  110. package/dist/src/gateway/status-view.d.ts +0 -119
  111. package/dist/src/gateway/status-view.js +0 -484
  112. package/dist/src/gateway/status-view.js.map +0 -1
  113. package/dist/src/gateway/store.d.ts +0 -188
  114. package/dist/src/gateway/store.js +0 -2360
  115. package/dist/src/gateway/store.js.map +0 -1
  116. package/dist/src/gateway/types.d.ts +0 -541
  117. package/dist/src/gateway/types.js +0 -332
  118. package/dist/src/gateway/types.js.map +0 -1
@@ -0,0 +1,272 @@
1
+ import { BridgeError } from "../errors.js";
2
+ const CLAUDE_CLEAN_RETRY_CODES = new Set([
3
+ "CLAUDE_PEER_TARGET_UNKNOWN",
4
+ "CLAUDE_PEER_TARGET_CHANGED",
5
+ "CLAUDE_PEER_WORKSPACE_UNATTESTED",
6
+ ]);
7
+ const CODEX_CLEAN_RETRY_CODES = new Set([
8
+ "THREAD_NOT_OBSERVED",
9
+ "ROUTE_BUSY",
10
+ "APPROVAL_REQUIRED",
11
+ "MANAGED_CODEX_UNAVAILABLE",
12
+ "LOCAL_APP_SERVER_NOT_RUNNING",
13
+ "ENDPOINT_GENERATION_CHANGED",
14
+ "SPAWN_FAILED",
15
+ "SPAWN_TIMEOUT",
16
+ "TRANSPORT_CONNECT_FAILED",
17
+ "REQUEST_TIMEOUT",
18
+ ]);
19
+ function systemCode(error) {
20
+ return typeof error === "object" && error !== null && "code" in error &&
21
+ typeof error.code === "string" ? error.code : undefined;
22
+ }
23
+ function claudePrewrite(error) {
24
+ if (error instanceof BridgeError && error.code === "CLAUDE_PEER_MESSAGE_EXPIRED") {
25
+ return { outcome: "expired", code: "MESSAGE_EXPIRED", unwritten: true };
26
+ }
27
+ if (error instanceof BridgeError && CLAUDE_CLEAN_RETRY_CODES.has(error.code)) {
28
+ return { outcome: "deferred", code: "ROUTE_BUSY" };
29
+ }
30
+ const code = systemCode(error);
31
+ return {
32
+ outcome: "failed",
33
+ code: error instanceof BridgeError ? error.code
34
+ : code === "ENOENT" ? "CLAUDE_DISPATCH_PREWRITE_PATH_MISSING"
35
+ : code === "EACCES" || code === "EPERM" ? "CLAUDE_DISPATCH_PREWRITE_ACCESS_DENIED"
36
+ : code === "ETIMEDOUT" ? "CLAUDE_DISPATCH_PREWRITE_TIMEOUT"
37
+ : "CLAUDE_DISPATCH_PREWRITE_FAILED",
38
+ };
39
+ }
40
+ function claudePostAuthorization(error) {
41
+ // perform() re-attests the prepared generation before it invokes authorization.
42
+ if (error instanceof BridgeError && error.code === "CLAUDE_PEER_TARGET_CHANGED") {
43
+ return { outcome: "deferred", code: "ROUTE_BUSY" };
44
+ }
45
+ if (error instanceof BridgeError && error.code === "WRITE_AUTHORIZATION_DENIED") {
46
+ return { outcome: "deferred", code: error.code };
47
+ }
48
+ if (error instanceof BridgeError && error.recoverable) {
49
+ if (error.code === "CLAUDE_PEER_MESSAGE_EXPIRED")
50
+ return { outcome: "expired", code: "MESSAGE_EXPIRED", unwritten: true };
51
+ return {
52
+ outcome: "failed",
53
+ code: error.code === "CLAUDE_PEER_MESSAGE_EXPIRED" ? "MESSAGE_EXPIRED" : error.code,
54
+ };
55
+ }
56
+ return {
57
+ outcome: "ambiguous",
58
+ code: error instanceof BridgeError && /^[A-Z][A-Z0-9_]{0,95}$/.test(error.code)
59
+ ? error.code : "CLAUDE_DISPATCH_OUTCOME_AMBIGUOUS",
60
+ };
61
+ }
62
+ function localClaudeName(target, host) {
63
+ if (target.provider !== "claude" || target.host !== host)
64
+ return undefined;
65
+ const suffix = `@${host}`;
66
+ if (!target.alias.endsWith(suffix))
67
+ return undefined;
68
+ const name = target.alias.slice(0, -suffix.length);
69
+ return /^[a-z][a-z0-9_-]{0,31}$/.test(name) ? name : undefined;
70
+ }
71
+ export class ClaudeDestination {
72
+ options;
73
+ inFlight = new Set();
74
+ closing = false;
75
+ constructor(options) {
76
+ this.options = options;
77
+ }
78
+ async deliver(input) {
79
+ if (this.closing)
80
+ return { outcome: "failed", code: "CLAUDE_ROUTE_UNAVAILABLE" };
81
+ const delivery = this.deliverOnce(input);
82
+ this.inFlight.add(delivery);
83
+ try {
84
+ return await delivery;
85
+ }
86
+ finally {
87
+ this.inFlight.delete(delivery);
88
+ }
89
+ }
90
+ async deliverOnce(input) {
91
+ const name = localClaudeName(input.target, this.options.host);
92
+ if (name === undefined)
93
+ return { outcome: "failed", code: "CLAUDE_ROUTE_UNAVAILABLE" };
94
+ let discovery;
95
+ let prepared;
96
+ try {
97
+ discovery = await this.options.peer.discover();
98
+ const exact = discovery.peers.find((candidate) => candidate.targetId === input.target.handle && candidate.alias === name &&
99
+ (candidate.kind === "interactive" || candidate.kind === "bg"));
100
+ if (exact === undefined) {
101
+ throw new BridgeError("CLAUDE_PEER_TARGET_UNKNOWN", "The exact Claude peer target is no longer discoverable.", true);
102
+ }
103
+ await this.options.peer.assertTargetWorkspaceDisjoint(input.target.handle, this.options.stateRoot);
104
+ prepared = await this.options.peer.prepareSend(input.target.handle, input.text, {
105
+ deadlineAt: input.deadline,
106
+ });
107
+ }
108
+ catch (error) {
109
+ return claudePrewrite(error);
110
+ }
111
+ try {
112
+ // Final attestation, authorization, and the exact prepared write share
113
+ // one continuation; retirement during preparation cannot leak a write.
114
+ const operation = prepared.perform(async () => await input.authorize({
115
+ bytes: prepared.frameBytes,
116
+ sha256: prepared.sha256,
117
+ }));
118
+ await operation;
119
+ return { outcome: "delivered", code: "DELIVERED" };
120
+ }
121
+ catch (error) {
122
+ return claudePostAuthorization(error);
123
+ }
124
+ }
125
+ async close() {
126
+ if (this.closing)
127
+ return;
128
+ this.closing = true;
129
+ await this.options.peer.close();
130
+ await Promise.allSettled([...this.inFlight]);
131
+ }
132
+ }
133
+ function mapCodexClean(result) {
134
+ if (result.safeErrorCode === "MESSAGE_EXPIRED") {
135
+ return { outcome: "expired", code: "MESSAGE_EXPIRED", unwritten: true };
136
+ }
137
+ return CODEX_CLEAN_RETRY_CODES.has(result.safeErrorCode)
138
+ ? { outcome: "deferred", code: result.safeErrorCode }
139
+ : { outcome: "failed", code: result.safeErrorCode };
140
+ }
141
+ function mapCodexStart(result) {
142
+ if (result.phase === "clean")
143
+ return mapCodexClean(result);
144
+ if (result.phase === "armed")
145
+ return { outcome: "ambiguous", code: result.safeErrorCode };
146
+ if (result.phase === "accepted")
147
+ return { outcome: "unconfirmed", code: result.safeErrorCode };
148
+ if (result.outcome === "failed")
149
+ return { outcome: "failed", code: "CODEX_TURN_FAILED" };
150
+ if (result.outcome === "interrupted") {
151
+ return { outcome: "cancelled", code: "CODEX_TURN_INTERRUPTED" };
152
+ }
153
+ return { outcome: "delivered", code: "DELIVERED" };
154
+ }
155
+ function mapCodexSteer(result) {
156
+ if (result.phase === "clean")
157
+ return mapCodexClean(result);
158
+ if (result.phase === "armed")
159
+ return { outcome: "ambiguous", code: result.safeErrorCode };
160
+ return { outcome: "delivered", code: "DELIVERED" };
161
+ }
162
+ export class CodexDestination {
163
+ options;
164
+ active = new Map();
165
+ starting = new Map();
166
+ controllers = new Set();
167
+ inFlight = new Set();
168
+ closing = false;
169
+ constructor(options) {
170
+ this.options = options;
171
+ }
172
+ async deliver(input) {
173
+ if (this.closing || input.target.provider !== "codex" ||
174
+ input.target.host !== this.options.host) {
175
+ return { outcome: "failed", code: "CODEX_ROUTE_UNAVAILABLE" };
176
+ }
177
+ const delivery = input.steer ? this.deliverSteer(input) : this.deliverStart(input);
178
+ this.inFlight.add(delivery);
179
+ try {
180
+ return await delivery;
181
+ }
182
+ finally {
183
+ this.inFlight.delete(delivery);
184
+ }
185
+ }
186
+ async deliverSteer(input) {
187
+ const active = this.active.get(input.target.id);
188
+ if (active === undefined)
189
+ return await this.deliverStart(input);
190
+ if (active.target.host !== input.target.host ||
191
+ active.target.handle !== input.target.handle) {
192
+ return { outcome: "deferred", code: "ROUTE_BUSY" };
193
+ }
194
+ const result = await active.operation.steer({
195
+ attemptId: input.attempt,
196
+ deadlineAt: new Date(input.deadline).toISOString(),
197
+ text: input.text,
198
+ authorizeWrite: async (evidence) => await input.authorize({
199
+ bytes: evidence.frameBytes,
200
+ sha256: evidence.sha256,
201
+ }),
202
+ });
203
+ return mapCodexSteer(result);
204
+ }
205
+ async deliverStart(input) {
206
+ if (this.active.has(input.target.id) || this.starting.has(input.target.id)) {
207
+ return { outcome: "deferred", code: "ROUTE_BUSY" };
208
+ }
209
+ const starting = {
210
+ attempt: input.attempt,
211
+ target: { ...input.target },
212
+ };
213
+ this.starting.set(input.target.id, starting);
214
+ const controller = new AbortController();
215
+ this.controllers.add(controller);
216
+ let accepted;
217
+ try {
218
+ const result = await this.options.operation.execute({
219
+ attemptId: input.attempt,
220
+ authorizeWrite: async (evidence) => await input.authorize({
221
+ bytes: evidence.frameBytes,
222
+ sha256: evidence.sha256,
223
+ }),
224
+ deadlineAt: new Date(input.deadline).toISOString(),
225
+ kind: "start",
226
+ signal: controller.signal,
227
+ route: {
228
+ alias: input.target.alias,
229
+ hostId: input.target.host,
230
+ registrationId: input.target.id,
231
+ threadId: input.target.handle,
232
+ },
233
+ text: input.text,
234
+ onAccepted: async (operation) => {
235
+ if (this.closing || operation.attemptId !== input.attempt ||
236
+ this.active.has(input.target.id)) {
237
+ throw new BridgeError("ACCEPTANCE_UNCONFIRMED", "The exact Codex attempt cannot acquire its active-turn slot.");
238
+ }
239
+ await input.accepted("unconfirmed");
240
+ accepted = operation;
241
+ this.active.set(input.target.id, {
242
+ attempt: input.attempt,
243
+ target: { ...input.target },
244
+ operation,
245
+ });
246
+ },
247
+ });
248
+ return mapCodexStart(result);
249
+ }
250
+ finally {
251
+ this.controllers.delete(controller);
252
+ if (this.starting.get(input.target.id) === starting) {
253
+ this.starting.delete(input.target.id);
254
+ }
255
+ if (accepted !== undefined && this.active.get(input.target.id)?.attempt === input.attempt) {
256
+ this.active.delete(input.target.id);
257
+ }
258
+ }
259
+ }
260
+ async close() {
261
+ if (this.closing)
262
+ return;
263
+ this.closing = true;
264
+ for (const controller of this.controllers)
265
+ controller.abort();
266
+ await Promise.allSettled([...this.inFlight]);
267
+ this.controllers.clear();
268
+ this.starting.clear();
269
+ this.active.clear();
270
+ }
271
+ }
272
+ //# sourceMappingURL=native-destinations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-destinations.js","sourceRoot":"","sources":["../../../src/gateway/native-destinations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ export type OwnedStateCommit = Readonly<{
2
+ sequence: number;
3
+ id: string;
4
+ }>;
5
+ export type OwnedStateDocument = Readonly<{
6
+ schemaVersion: number;
7
+ commit: OwnedStateCommit;
8
+ }>;
9
+ export type OwnedStateCodec<T extends OwnedStateDocument> = Readonly<{
10
+ schemaVersion: number;
11
+ maximumBytes: number;
12
+ decode: (value: unknown) => T | undefined;
13
+ create: (input: Readonly<{
14
+ now: Date;
15
+ commit: OwnedStateCommit;
16
+ }>) => T;
17
+ assertBounds?: (value: T) => void;
18
+ }>;
19
+ export type OwnedStateDependencies = Readonly<{
20
+ assertWritable?: () => void;
21
+ now?: () => Date;
22
+ randomId?: () => string;
23
+ renameStateFile?: (source: string, target: string) => Promise<void>;
24
+ syncStateDirectory?: (directory: string) => Promise<void>;
25
+ afterStateFileRename?: () => void | Promise<void>;
26
+ }>;
27
+ /**
28
+ * One owned, bounded JSON document. The caller's host-wide instance lease is
29
+ * the process-exclusion boundary; this class deliberately creates no second
30
+ * PID lock. Domain transitions and restart settlement belong to the ledger.
31
+ */
32
+ export declare class OwnedStateFile<T extends OwnedStateDocument> {
33
+ rootDir: string;
34
+ private readonly codec;
35
+ private readonly now;
36
+ private readonly randomId;
37
+ private readonly renameStateFile;
38
+ private readonly syncStateDirectory;
39
+ private readonly afterStateFileRename;
40
+ private readonly mutex;
41
+ private state;
42
+ private poisoned;
43
+ private readonly assertWritable;
44
+ constructor(stateDir: string, codec: OwnedStateCodec<T>, dependencies?: OwnedStateDependencies);
45
+ get stateFilePath(): string;
46
+ initialize(): Promise<void>;
47
+ snapshot(): Promise<T>;
48
+ transact<R>(operation: (draft: T, now: Date) => R): Promise<R>;
49
+ close(): Promise<void>;
50
+ private requireState;
51
+ private assertDocument;
52
+ private assertOwnedPrivate;
53
+ private prepareOwnedDirectory;
54
+ private readPrivateFile;
55
+ private loadStateFile;
56
+ private persist;
57
+ }