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,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
+ }