agent-embassy 3.0.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 (115) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/CONTRIBUTING.md +92 -200
  3. package/README.md +159 -138
  4. package/SECURITY.md +191 -335
  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 +62 -1053
  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 -943
  62. package/package.json +5 -5
  63. package/skills/embassy-peer/SKILL.md +38 -194
  64. package/skills/embassy-peer/agents/openai.yaml +2 -2
  65. package/dist/src/gateway/claude-helper-client.d.ts +0 -2
  66. package/dist/src/gateway/claude-helper-client.js +0 -2
  67. package/dist/src/gateway/claude-helper-client.js.map +0 -1
  68. package/dist/src/gateway/claude-helper-protocol.d.ts +0 -117
  69. package/dist/src/gateway/claude-helper-protocol.js +0 -122
  70. package/dist/src/gateway/claude-helper-protocol.js.map +0 -1
  71. package/dist/src/gateway/claude-helper-supervisor.d.ts +0 -87
  72. package/dist/src/gateway/claude-helper-supervisor.js +0 -347
  73. package/dist/src/gateway/claude-helper-supervisor.js.map +0 -1
  74. package/dist/src/gateway/claude-helper.d.ts +0 -1
  75. package/dist/src/gateway/claude-helper.js +0 -252
  76. package/dist/src/gateway/claude-helper.js.map +0 -1
  77. package/dist/src/gateway/cli.d.ts +0 -57
  78. package/dist/src/gateway/cli.js +0 -1503
  79. package/dist/src/gateway/cli.js.map +0 -1
  80. package/dist/src/gateway/codex-socket-holder.d.ts +0 -26
  81. package/dist/src/gateway/codex-socket-holder.js +0 -76
  82. package/dist/src/gateway/codex-socket-holder.js.map +0 -1
  83. package/dist/src/gateway/control.d.ts +0 -261
  84. package/dist/src/gateway/control.js +0 -903
  85. package/dist/src/gateway/control.js.map +0 -1
  86. package/dist/src/gateway/peer-client.d.ts +0 -58
  87. package/dist/src/gateway/peer-client.js +0 -217
  88. package/dist/src/gateway/peer-client.js.map +0 -1
  89. package/dist/src/gateway/peer-mailbox.d.ts +0 -78
  90. package/dist/src/gateway/peer-mailbox.js +0 -168
  91. package/dist/src/gateway/peer-mailbox.js.map +0 -1
  92. package/dist/src/gateway/peer-protocol.d.ts +0 -105
  93. package/dist/src/gateway/peer-protocol.js +0 -70
  94. package/dist/src/gateway/peer-protocol.js.map +0 -1
  95. package/dist/src/gateway/peer-stdio.d.ts +0 -23
  96. package/dist/src/gateway/peer-stdio.js +0 -100
  97. package/dist/src/gateway/peer-stdio.js.map +0 -1
  98. package/dist/src/gateway/providers.d.ts +0 -163
  99. package/dist/src/gateway/providers.js +0 -972
  100. package/dist/src/gateway/providers.js.map +0 -1
  101. package/dist/src/gateway/server.d.ts +0 -47
  102. package/dist/src/gateway/server.js +0 -219
  103. package/dist/src/gateway/server.js.map +0 -1
  104. package/dist/src/gateway/service.d.ts +0 -373
  105. package/dist/src/gateway/service.js +0 -2274
  106. package/dist/src/gateway/service.js.map +0 -1
  107. package/dist/src/gateway/status-view.d.ts +0 -167
  108. package/dist/src/gateway/status-view.js +0 -488
  109. package/dist/src/gateway/status-view.js.map +0 -1
  110. package/dist/src/gateway/store.d.ts +0 -185
  111. package/dist/src/gateway/store.js +0 -2359
  112. package/dist/src/gateway/store.js.map +0 -1
  113. package/dist/src/gateway/types.d.ts +0 -528
  114. package/dist/src/gateway/types.js +0 -341
  115. 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
+ }