agent-embassy 1.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 (145) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/CONTRIBUTING.md +122 -0
  3. package/LICENSE +21 -0
  4. package/README.md +185 -0
  5. package/README.zh-CN.md +185 -0
  6. package/SECURITY.md +224 -0
  7. package/assets/live-dashboard/app.css +1610 -0
  8. package/assets/mark-seal.svg +7 -0
  9. package/assets/mark.svg +7 -0
  10. package/assets/social-preview.png +0 -0
  11. package/assets/vendor/react/LICENSE +21 -0
  12. package/assets/vendor/react/react-dom.production.min.js +267 -0
  13. package/assets/vendor/react/react.production.min.js +31 -0
  14. package/dist/src/errors.d.ts +5 -0
  15. package/dist/src/errors.js +11 -0
  16. package/dist/src/errors.js.map +1 -0
  17. package/dist/src/gateway/claude-compatibility-scratch.d.ts +18 -0
  18. package/dist/src/gateway/claude-compatibility-scratch.js +158 -0
  19. package/dist/src/gateway/claude-compatibility-scratch.js.map +1 -0
  20. package/dist/src/gateway/claude-helper-client.d.ts +43 -0
  21. package/dist/src/gateway/claude-helper-client.js +212 -0
  22. package/dist/src/gateway/claude-helper-client.js.map +1 -0
  23. package/dist/src/gateway/claude-helper-protocol.d.ts +172 -0
  24. package/dist/src/gateway/claude-helper-protocol.js +373 -0
  25. package/dist/src/gateway/claude-helper-protocol.js.map +1 -0
  26. package/dist/src/gateway/claude-helper-supervisor.d.ts +74 -0
  27. package/dist/src/gateway/claude-helper-supervisor.js +497 -0
  28. package/dist/src/gateway/claude-helper-supervisor.js.map +1 -0
  29. package/dist/src/gateway/claude-helper.d.ts +1 -0
  30. package/dist/src/gateway/claude-helper.js +269 -0
  31. package/dist/src/gateway/claude-helper.js.map +1 -0
  32. package/dist/src/gateway/claude-peer.d.ts +273 -0
  33. package/dist/src/gateway/claude-peer.js +2359 -0
  34. package/dist/src/gateway/claude-peer.js.map +1 -0
  35. package/dist/src/gateway/claude-runtime.d.ts +40 -0
  36. package/dist/src/gateway/claude-runtime.js +302 -0
  37. package/dist/src/gateway/claude-runtime.js.map +1 -0
  38. package/dist/src/gateway/cli-copy.d.ts +8 -0
  39. package/dist/src/gateway/cli-copy.en.d.ts +13 -0
  40. package/dist/src/gateway/cli-copy.en.js +43 -0
  41. package/dist/src/gateway/cli-copy.en.js.map +1 -0
  42. package/dist/src/gateway/cli-copy.js +19 -0
  43. package/dist/src/gateway/cli-copy.js.map +1 -0
  44. package/dist/src/gateway/cli-copy.zh-CN.d.ts +13 -0
  45. package/dist/src/gateway/cli-copy.zh-CN.js +43 -0
  46. package/dist/src/gateway/cli-copy.zh-CN.js.map +1 -0
  47. package/dist/src/gateway/cli.d.ts +44 -0
  48. package/dist/src/gateway/cli.js +969 -0
  49. package/dist/src/gateway/cli.js.map +1 -0
  50. package/dist/src/gateway/codex-app-server.d.ts +310 -0
  51. package/dist/src/gateway/codex-app-server.js +1746 -0
  52. package/dist/src/gateway/codex-app-server.js.map +1 -0
  53. package/dist/src/gateway/codex-local-transport.d.ts +81 -0
  54. package/dist/src/gateway/codex-local-transport.js +617 -0
  55. package/dist/src/gateway/codex-local-transport.js.map +1 -0
  56. package/dist/src/gateway/codex-registration-generation.d.ts +5 -0
  57. package/dist/src/gateway/codex-registration-generation.js +19 -0
  58. package/dist/src/gateway/codex-registration-generation.js.map +1 -0
  59. package/dist/src/gateway/codex-registration-succession.d.ts +209 -0
  60. package/dist/src/gateway/codex-registration-succession.js +588 -0
  61. package/dist/src/gateway/codex-registration-succession.js.map +1 -0
  62. package/dist/src/gateway/compatibility.d.ts +70 -0
  63. package/dist/src/gateway/compatibility.js +252 -0
  64. package/dist/src/gateway/compatibility.js.map +1 -0
  65. package/dist/src/gateway/config.d.ts +24 -0
  66. package/dist/src/gateway/config.js +130 -0
  67. package/dist/src/gateway/config.js.map +1 -0
  68. package/dist/src/gateway/control.d.ts +308 -0
  69. package/dist/src/gateway/control.js +1573 -0
  70. package/dist/src/gateway/control.js.map +1 -0
  71. package/dist/src/gateway/dashboard-copy.d.ts +7 -0
  72. package/dist/src/gateway/dashboard-copy.en.d.ts +506 -0
  73. package/dist/src/gateway/dashboard-copy.en.js +507 -0
  74. package/dist/src/gateway/dashboard-copy.en.js.map +1 -0
  75. package/dist/src/gateway/dashboard-copy.js +516 -0
  76. package/dist/src/gateway/dashboard-copy.js.map +1 -0
  77. package/dist/src/gateway/dashboard-copy.zh-CN.d.ts +506 -0
  78. package/dist/src/gateway/dashboard-copy.zh-CN.js +507 -0
  79. package/dist/src/gateway/dashboard-copy.zh-CN.js.map +1 -0
  80. package/dist/src/gateway/dashboard-model.d.ts +207 -0
  81. package/dist/src/gateway/dashboard-model.js +720 -0
  82. package/dist/src/gateway/dashboard-model.js.map +1 -0
  83. package/dist/src/gateway/dashboard.d.ts +26 -0
  84. package/dist/src/gateway/dashboard.js +941 -0
  85. package/dist/src/gateway/dashboard.js.map +1 -0
  86. package/dist/src/gateway/delivery-machine.d.ts +235 -0
  87. package/dist/src/gateway/delivery-machine.js +540 -0
  88. package/dist/src/gateway/delivery-machine.js.map +1 -0
  89. package/dist/src/gateway/instance-lease.d.ts +21 -0
  90. package/dist/src/gateway/instance-lease.js +549 -0
  91. package/dist/src/gateway/instance-lease.js.map +1 -0
  92. package/dist/src/gateway/live-dashboard-app/app.js +2914 -0
  93. package/dist/src/gateway/live-dashboard-assets.d.ts +10 -0
  94. package/dist/src/gateway/live-dashboard-assets.js +73 -0
  95. package/dist/src/gateway/live-dashboard-assets.js.map +1 -0
  96. package/dist/src/gateway/live-dashboard-bootstrap.d.ts +36 -0
  97. package/dist/src/gateway/live-dashboard-bootstrap.js +176 -0
  98. package/dist/src/gateway/live-dashboard-bootstrap.js.map +1 -0
  99. package/dist/src/gateway/live-dashboard-command.d.ts +54 -0
  100. package/dist/src/gateway/live-dashboard-command.js +324 -0
  101. package/dist/src/gateway/live-dashboard-command.js.map +1 -0
  102. package/dist/src/gateway/live-dashboard-http.d.ts +41 -0
  103. package/dist/src/gateway/live-dashboard-http.js +445 -0
  104. package/dist/src/gateway/live-dashboard-http.js.map +1 -0
  105. package/dist/src/gateway/live-dashboard-protocol.d.ts +38 -0
  106. package/dist/src/gateway/live-dashboard-protocol.js +156 -0
  107. package/dist/src/gateway/live-dashboard-protocol.js.map +1 -0
  108. package/dist/src/gateway/live-dashboard-server.d.ts +33 -0
  109. package/dist/src/gateway/live-dashboard-server.js +130 -0
  110. package/dist/src/gateway/live-dashboard-server.js.map +1 -0
  111. package/dist/src/gateway/live-dashboard-stream.d.ts +46 -0
  112. package/dist/src/gateway/live-dashboard-stream.js +233 -0
  113. package/dist/src/gateway/live-dashboard-stream.js.map +1 -0
  114. package/dist/src/gateway/live-dashboard.d.ts +31 -0
  115. package/dist/src/gateway/live-dashboard.js +190 -0
  116. package/dist/src/gateway/live-dashboard.js.map +1 -0
  117. package/dist/src/gateway/locale.d.ts +4 -0
  118. package/dist/src/gateway/locale.js +10 -0
  119. package/dist/src/gateway/locale.js.map +1 -0
  120. package/dist/src/gateway/progress-watch-machine.d.ts +97 -0
  121. package/dist/src/gateway/progress-watch-machine.js +172 -0
  122. package/dist/src/gateway/progress-watch-machine.js.map +1 -0
  123. package/dist/src/gateway/providers.d.ts +287 -0
  124. package/dist/src/gateway/providers.js +2451 -0
  125. package/dist/src/gateway/providers.js.map +1 -0
  126. package/dist/src/gateway/server.d.ts +57 -0
  127. package/dist/src/gateway/server.js +264 -0
  128. package/dist/src/gateway/server.js.map +1 -0
  129. package/dist/src/gateway/service.d.ts +449 -0
  130. package/dist/src/gateway/service.js +4831 -0
  131. package/dist/src/gateway/service.js.map +1 -0
  132. package/dist/src/gateway/store.d.ts +340 -0
  133. package/dist/src/gateway/store.js +4047 -0
  134. package/dist/src/gateway/store.js.map +1 -0
  135. package/dist/src/gateway/types.d.ts +514 -0
  136. package/dist/src/gateway/types.js +414 -0
  137. package/dist/src/gateway/types.js.map +1 -0
  138. package/dist/src/mutex.d.ts +4 -0
  139. package/dist/src/mutex.js +23 -0
  140. package/dist/src/mutex.js.map +1 -0
  141. package/docs/DESIGN.md +134 -0
  142. package/docs/GATEWAY-ARCHITECTURE.md +858 -0
  143. package/package.json +80 -0
  144. package/skills/embassy-peer/SKILL.md +198 -0
  145. package/skills/embassy-peer/agents/openai.yaml +4 -0
@@ -0,0 +1,324 @@
1
+ import { execFile } from "node:child_process";
2
+ import { BridgeError } from "../errors.js";
3
+ import { loadGatewayConfig } from "./config.js";
4
+ import { GATEWAY_CONTROL_PROTOCOL_VERSION, sendGatewayControlRequest, } from "./control.js";
5
+ import { isLiveDashboardStartupCancelled, startLiveDashboard, } from "./live-dashboard.js";
6
+ const OPEN_EXECUTABLE = "/usr/bin/open";
7
+ const OPEN_TIMEOUT_MS = 10_000;
8
+ const OPEN_MAX_OUTPUT_BYTES = 16 * 1024;
9
+ const OPEN_ENVIRONMENT = Object.freeze({
10
+ PATH: "/usr/bin:/bin",
11
+ LANG: "C",
12
+ LC_ALL: "C",
13
+ });
14
+ function defaultOpenExecutor(executable, args, options) {
15
+ return new Promise((resolve, reject) => {
16
+ execFile(executable, [...args], options, (error) => {
17
+ if (error === null)
18
+ resolve();
19
+ else
20
+ reject(error);
21
+ });
22
+ });
23
+ }
24
+ function createShutdownLatch(signal, addSignalListener, removeSignalListener) {
25
+ let resolveWait;
26
+ let stopped = false;
27
+ let disposed = false;
28
+ let sigintOwned = false;
29
+ let sigtermOwned = false;
30
+ let abortOwned = false;
31
+ const shutdown = new AbortController();
32
+ const wait = new Promise((resolve) => {
33
+ resolveWait = resolve;
34
+ });
35
+ const stop = () => {
36
+ if (stopped)
37
+ return;
38
+ stopped = true;
39
+ shutdown.abort();
40
+ resolveWait?.();
41
+ };
42
+ const onSigint = () => stop();
43
+ const onSigterm = () => stop();
44
+ const releaseOwnedListeners = () => {
45
+ const errors = [];
46
+ if (abortOwned) {
47
+ abortOwned = false;
48
+ try {
49
+ signal?.removeEventListener("abort", stop);
50
+ }
51
+ catch (error) {
52
+ errors.push(error);
53
+ }
54
+ }
55
+ if (sigtermOwned) {
56
+ sigtermOwned = false;
57
+ try {
58
+ removeSignalListener("SIGTERM", onSigterm);
59
+ }
60
+ catch (error) {
61
+ errors.push(error);
62
+ }
63
+ }
64
+ if (sigintOwned) {
65
+ sigintOwned = false;
66
+ try {
67
+ removeSignalListener("SIGINT", onSigint);
68
+ }
69
+ catch (error) {
70
+ errors.push(error);
71
+ }
72
+ }
73
+ return errors;
74
+ };
75
+ try {
76
+ addSignalListener("SIGINT", onSigint);
77
+ sigintOwned = true;
78
+ addSignalListener("SIGTERM", onSigterm);
79
+ sigtermOwned = true;
80
+ if (signal !== undefined) {
81
+ signal.addEventListener("abort", stop, { once: true });
82
+ abortOwned = true;
83
+ }
84
+ if (signal?.aborted === true)
85
+ stop();
86
+ }
87
+ catch (error) {
88
+ const cleanupErrors = releaseOwnedListeners();
89
+ if (cleanupErrors.length > 0) {
90
+ throw new AggregateError([error, ...cleanupErrors], "Live dashboard signal setup failed.");
91
+ }
92
+ throw error;
93
+ }
94
+ return {
95
+ wait,
96
+ signal: shutdown.signal,
97
+ isStopped: () => stopped,
98
+ dispose: () => {
99
+ if (disposed)
100
+ return;
101
+ disposed = true;
102
+ const cleanupErrors = releaseOwnedListeners();
103
+ if (cleanupErrors.length > 0) {
104
+ throw new AggregateError(cleanupErrors, "Live dashboard signal cleanup failed.");
105
+ }
106
+ },
107
+ };
108
+ }
109
+ function withoutProviderIdentity(env) {
110
+ const operatorEnvironment = { ...env };
111
+ // The live dashboard is an operator command. Inherited provider identity is
112
+ // neither an authorization requirement nor forwarded to a child process.
113
+ delete operatorEnvironment.CODEX_THREAD_ID;
114
+ delete operatorEnvironment.CLAUDE_CODE_MESSAGING_SOCKET;
115
+ return operatorEnvironment;
116
+ }
117
+ export function createGatewayLiveDashboardObserver(socketPath, sendRequest = sendGatewayControlRequest) {
118
+ return {
119
+ observe: async () => {
120
+ const response = await sendRequest({
121
+ socketPath,
122
+ request: {
123
+ protocolVersion: GATEWAY_CONTROL_PROTOCOL_VERSION,
124
+ method: "observe_snapshot",
125
+ params: {},
126
+ },
127
+ });
128
+ if (!response.ok) {
129
+ // Stream machinery converts this closed failure into its fixed offline
130
+ // event. Wire diagnostics are intentionally never forwarded to the UI.
131
+ throw new Error("LIVE_DASHBOARD_OBSERVER_UNAVAILABLE");
132
+ }
133
+ return response.result;
134
+ },
135
+ };
136
+ }
137
+ export function createGatewayLiveDashboardActions(socketPath, sendRequest = sendGatewayControlRequest) {
138
+ return {
139
+ execute: async (action) => {
140
+ try {
141
+ let response;
142
+ switch (action.action) {
143
+ case "pair":
144
+ response = await sendRequest({
145
+ socketPath,
146
+ request: {
147
+ protocolVersion: GATEWAY_CONTROL_PROTOCOL_VERSION,
148
+ method: "pair",
149
+ params: {
150
+ claudeAlias: action.claudeAlias,
151
+ codexAlias: action.codexAlias,
152
+ },
153
+ },
154
+ });
155
+ break;
156
+ case "unpair":
157
+ response = await sendRequest({
158
+ socketPath,
159
+ request: {
160
+ protocolVersion: GATEWAY_CONTROL_PROTOCOL_VERSION,
161
+ method: "unpair",
162
+ params: {
163
+ claudeAlias: action.claudeAlias,
164
+ codexAlias: action.codexAlias,
165
+ },
166
+ },
167
+ });
168
+ break;
169
+ case "refresh_dashboard":
170
+ response = await sendRequest({
171
+ socketPath,
172
+ request: {
173
+ protocolVersion: GATEWAY_CONTROL_PROTOCOL_VERSION,
174
+ method: "refresh_dashboard",
175
+ params: {},
176
+ },
177
+ });
178
+ break;
179
+ }
180
+ if (!response.ok)
181
+ return { ok: false, code: "unavailable" };
182
+ return {
183
+ ok: response.result.accepted,
184
+ code: response.result.code,
185
+ };
186
+ }
187
+ catch {
188
+ return { ok: false, code: "unavailable" };
189
+ }
190
+ },
191
+ };
192
+ }
193
+ async function openPrivateBootstrap(bootstrapPath, executeOpen, signal) {
194
+ try {
195
+ await executeOpen(OPEN_EXECUTABLE, [bootstrapPath], {
196
+ cwd: "/",
197
+ env: OPEN_ENVIRONMENT,
198
+ shell: false,
199
+ timeout: OPEN_TIMEOUT_MS,
200
+ maxBuffer: OPEN_MAX_OUTPUT_BYTES,
201
+ windowsHide: true,
202
+ signal,
203
+ });
204
+ }
205
+ catch {
206
+ throw new BridgeError("LIVE_DASHBOARD_OPEN_FAILED", "Embassy could not ask the operating system to open the live dashboard.", true);
207
+ }
208
+ }
209
+ function ownLateStartup(outcome) {
210
+ void outcome.then(async (result) => {
211
+ if (result.kind !== "started")
212
+ return;
213
+ await result.dashboard.close().catch(() => undefined);
214
+ });
215
+ }
216
+ /**
217
+ * Run the opt-in live dashboard in the foreground until interrupted.
218
+ *
219
+ * The controller remains the only source of state. This command exposes one
220
+ * observer plus three closed, authenticated actions; it has no provider API
221
+ * or generic control-plane escape hatch.
222
+ */
223
+ export async function runLiveDashboardCommand(options, dependencies = {}) {
224
+ const env = withoutProviderIdentity(options.env ?? process.env);
225
+ const loadConfig = options.loadConfig ?? loadGatewayConfig;
226
+ const sendRequest = options.sendRequest ?? sendGatewayControlRequest;
227
+ const startDashboard = dependencies.startDashboard ?? startLiveDashboard;
228
+ const executeOpen = dependencies.executeOpen ?? defaultOpenExecutor;
229
+ const addSignalListener = dependencies.addSignalListener ??
230
+ ((signal, listener) => {
231
+ process.on(signal, listener);
232
+ });
233
+ const removeSignalListener = dependencies.removeSignalListener ??
234
+ ((signal, listener) => {
235
+ process.off(signal, listener);
236
+ });
237
+ const config = loadConfig(env);
238
+ await options.validateControlSocket(config.stateDir, config.controlSocketPath);
239
+ let latch;
240
+ let running;
241
+ let operationError;
242
+ try {
243
+ latch = createShutdownLatch(options.signal, addSignalListener, removeSignalListener);
244
+ if (!latch.isStopped()) {
245
+ const startup = startDashboard({
246
+ privateStateRoot: config.stateDir,
247
+ observer: createGatewayLiveDashboardObserver(config.controlSocketPath, sendRequest),
248
+ actions: createGatewayLiveDashboardActions(config.controlSocketPath, sendRequest),
249
+ locale: options.locale,
250
+ signal: latch.signal,
251
+ dependencies: {
252
+ openBootstrap: async (bootstrapPath) => {
253
+ if (latch?.isStopped() !== false) {
254
+ throw new Error("LIVE_DASHBOARD_START_CANCELLED");
255
+ }
256
+ await openPrivateBootstrap(bootstrapPath, executeOpen, latch.signal);
257
+ },
258
+ },
259
+ })
260
+ .then((dashboard) => ({
261
+ kind: "started",
262
+ dashboard,
263
+ }))
264
+ .catch((error) => ({
265
+ kind: "failed",
266
+ error,
267
+ }));
268
+ const startupOrShutdown = await Promise.race([
269
+ startup,
270
+ latch.wait.then(() => ({ kind: "cancelled" })),
271
+ ]);
272
+ if (startupOrShutdown.kind === "cancelled") {
273
+ // A Promise alone cannot keep the process alive. If startup owns a
274
+ // late server handle, that handle does keep the foreground process
275
+ // alive long enough for this exact continuation to close it.
276
+ ownLateStartup(startup);
277
+ }
278
+ else if (startupOrShutdown.kind === "failed" &&
279
+ !(latch.isStopped() &&
280
+ isLiveDashboardStartupCancelled(startupOrShutdown.error))) {
281
+ throw startupOrShutdown.error;
282
+ }
283
+ else if (startupOrShutdown.kind === "started") {
284
+ running = startupOrShutdown.dashboard;
285
+ if (!latch.isStopped()) {
286
+ await options.onReady({
287
+ status: "ready",
288
+ mode: "live",
289
+ locale: options.locale,
290
+ });
291
+ await latch.wait;
292
+ }
293
+ }
294
+ }
295
+ }
296
+ catch (error) {
297
+ operationError = error;
298
+ }
299
+ const cleanupErrors = [];
300
+ if (running !== undefined) {
301
+ await running.close().catch((error) => {
302
+ cleanupErrors.push(error);
303
+ });
304
+ }
305
+ if (latch !== undefined) {
306
+ try {
307
+ latch.dispose();
308
+ }
309
+ catch (error) {
310
+ cleanupErrors.push(error);
311
+ }
312
+ }
313
+ if (operationError !== undefined && cleanupErrors.length === 0) {
314
+ throw operationError;
315
+ }
316
+ if (operationError !== undefined || cleanupErrors.length > 0) {
317
+ throw new AggregateError([
318
+ ...(operationError === undefined ? [] : [operationError]),
319
+ ...cleanupErrors,
320
+ ], "Live dashboard command failed.");
321
+ }
322
+ return { status: "cancelled" };
323
+ }
324
+ //# sourceMappingURL=live-dashboard-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-dashboard-command.js","sourceRoot":"","sources":["../../../src/gateway/live-dashboard-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import { type GatewayDecisionCode } from "./control.js";
3
+ import { type DashboardLocale } from "./dashboard-copy.js";
4
+ import type { LiveDashboardStreamHub } from "./live-dashboard-stream.js";
5
+ export type LiveDashboardHttpAssets = Readonly<{
6
+ shellHtml: string;
7
+ clientJavaScript: string;
8
+ styleSheet: string;
9
+ appJavaScript: string;
10
+ vendorReactJavaScript: string;
11
+ vendorReactDomJavaScript: string;
12
+ }>;
13
+ export type LiveDashboardRequestHandler = (request: IncomingMessage, response: ServerResponse) => Promise<void>;
14
+ export type LiveDashboardAction = Readonly<{
15
+ action: "pair" | "unpair";
16
+ claudeAlias: string;
17
+ codexAlias: string;
18
+ }> | Readonly<{
19
+ action: "refresh_dashboard";
20
+ }>;
21
+ export type LiveDashboardActionResult = Readonly<{
22
+ ok: boolean;
23
+ code: GatewayDecisionCode | "rate_limited" | "unavailable";
24
+ }>;
25
+ export type LiveDashboardActionExecutor = Readonly<{
26
+ execute(action: LiveDashboardAction): Promise<LiveDashboardActionResult>;
27
+ }>;
28
+ export type LiveDashboardRequestHandlerOptions = Readonly<{
29
+ instancePath: string;
30
+ expectedHost: string;
31
+ expectedOrigin: string;
32
+ capability: string;
33
+ sessionSecret: string;
34
+ cookieName: string;
35
+ lang: DashboardLocale;
36
+ assets: LiveDashboardHttpAssets;
37
+ hub: LiveDashboardStreamHub;
38
+ actions: LiveDashboardActionExecutor;
39
+ now?: () => number;
40
+ }>;
41
+ export declare function createLiveDashboardRequestHandler(options: LiveDashboardRequestHandlerOptions): LiveDashboardRequestHandler;