agent-embassy 2.0.1 → 3.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 (147) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/CONTRIBUTING.md +23 -36
  3. package/README.md +123 -222
  4. package/SECURITY.md +72 -93
  5. package/dist/src/errors.d.ts +10 -1
  6. package/dist/src/errors.js +3 -1
  7. package/dist/src/errors.js.map +1 -1
  8. package/dist/src/gateway/claude-helper-protocol.d.ts +8 -11
  9. package/dist/src/gateway/claude-helper-protocol.js +12 -11
  10. package/dist/src/gateway/claude-helper-protocol.js.map +1 -1
  11. package/dist/src/gateway/claude-helper-supervisor.d.ts +1 -5
  12. package/dist/src/gateway/claude-helper-supervisor.js +45 -17
  13. package/dist/src/gateway/claude-helper-supervisor.js.map +1 -1
  14. package/dist/src/gateway/claude-helper.js +6 -6
  15. package/dist/src/gateway/claude-helper.js.map +1 -1
  16. package/dist/src/gateway/claude-peer.d.ts +0 -3
  17. package/dist/src/gateway/claude-peer.js +7 -19
  18. package/dist/src/gateway/claude-peer.js.map +1 -1
  19. package/dist/src/gateway/cli.d.ts +17 -7
  20. package/dist/src/gateway/cli.js +945 -265
  21. package/dist/src/gateway/cli.js.map +1 -1
  22. package/dist/src/gateway/codex-socket-holder.d.ts +26 -0
  23. package/dist/src/gateway/codex-socket-holder.js +76 -0
  24. package/dist/src/gateway/codex-socket-holder.js.map +1 -0
  25. package/dist/src/gateway/codex-stateless-transport.js +1 -1
  26. package/dist/src/gateway/codex-stateless-transport.js.map +1 -1
  27. package/dist/src/gateway/config.d.ts +1 -10
  28. package/dist/src/gateway/config.js +4 -10
  29. package/dist/src/gateway/config.js.map +1 -1
  30. package/dist/src/gateway/control.d.ts +66 -80
  31. package/dist/src/gateway/control.js +92 -147
  32. package/dist/src/gateway/control.js.map +1 -1
  33. package/dist/src/gateway/federation-nodes.d.ts +29 -2
  34. package/dist/src/gateway/federation-nodes.js +177 -7
  35. package/dist/src/gateway/federation-nodes.js.map +1 -1
  36. package/dist/src/gateway/peer-client.d.ts +4 -3
  37. package/dist/src/gateway/peer-client.js +22 -13
  38. package/dist/src/gateway/peer-client.js.map +1 -1
  39. package/dist/src/gateway/peer-protocol.d.ts +13 -11
  40. package/dist/src/gateway/peer-protocol.js +14 -12
  41. package/dist/src/gateway/peer-protocol.js.map +1 -1
  42. package/dist/src/gateway/provenance-envelope.d.ts +0 -1
  43. package/dist/src/gateway/provenance-envelope.js +4 -19
  44. package/dist/src/gateway/provenance-envelope.js.map +1 -1
  45. package/dist/src/gateway/providers.d.ts +11 -7
  46. package/dist/src/gateway/providers.js +49 -50
  47. package/dist/src/gateway/providers.js.map +1 -1
  48. package/dist/src/gateway/server.d.ts +4 -14
  49. package/dist/src/gateway/server.js +32 -54
  50. package/dist/src/gateway/server.js.map +1 -1
  51. package/dist/src/gateway/service-agent.d.ts +187 -0
  52. package/dist/src/gateway/service-agent.js +758 -0
  53. package/dist/src/gateway/service-agent.js.map +1 -0
  54. package/dist/src/gateway/service.d.ts +119 -38
  55. package/dist/src/gateway/service.js +754 -798
  56. package/dist/src/gateway/service.js.map +1 -1
  57. package/dist/src/gateway/status-view.d.ts +119 -0
  58. package/dist/src/gateway/status-view.js +484 -0
  59. package/dist/src/gateway/status-view.js.map +1 -0
  60. package/dist/src/gateway/store.d.ts +106 -21
  61. package/dist/src/gateway/store.js +463 -537
  62. package/dist/src/gateway/store.js.map +1 -1
  63. package/dist/src/gateway/types.d.ts +64 -102
  64. package/dist/src/gateway/types.js +40 -86
  65. package/dist/src/gateway/types.js.map +1 -1
  66. package/docs/CONFIGURATION.md +174 -45
  67. package/docs/DELIVERY.md +11 -11
  68. package/docs/GATEWAY-ARCHITECTURE.md +292 -384
  69. package/package.json +4 -12
  70. package/skills/embassy-peer/SKILL.md +69 -92
  71. package/skills/embassy-peer/agents/openai.yaml +1 -1
  72. package/README.zh-CN.md +0 -275
  73. package/assets/live-dashboard/app.css +0 -1619
  74. package/assets/vendor/react/LICENSE +0 -21
  75. package/assets/vendor/react/react-dom.production.min.js +0 -267
  76. package/assets/vendor/react/react.production.min.js +0 -31
  77. package/dist/src/gateway/acp-client.d.ts +0 -110
  78. package/dist/src/gateway/acp-client.js +0 -407
  79. package/dist/src/gateway/acp-client.js.map +0 -1
  80. package/dist/src/gateway/acp-provider.d.ts +0 -66
  81. package/dist/src/gateway/acp-provider.js +0 -275
  82. package/dist/src/gateway/acp-provider.js.map +0 -1
  83. package/dist/src/gateway/claude-helper-client.d.ts +0 -2
  84. package/dist/src/gateway/claude-helper-client.js +0 -2
  85. package/dist/src/gateway/claude-helper-client.js.map +0 -1
  86. package/dist/src/gateway/cli-copy.d.ts +0 -8
  87. package/dist/src/gateway/cli-copy.en.d.ts +0 -22
  88. package/dist/src/gateway/cli-copy.en.js +0 -62
  89. package/dist/src/gateway/cli-copy.en.js.map +0 -1
  90. package/dist/src/gateway/cli-copy.js +0 -27
  91. package/dist/src/gateway/cli-copy.js.map +0 -1
  92. package/dist/src/gateway/cli-copy.zh-CN.d.ts +0 -22
  93. package/dist/src/gateway/cli-copy.zh-CN.js +0 -62
  94. package/dist/src/gateway/cli-copy.zh-CN.js.map +0 -1
  95. package/dist/src/gateway/codex-doctor.d.ts +0 -36
  96. package/dist/src/gateway/codex-doctor.js +0 -127
  97. package/dist/src/gateway/codex-doctor.js.map +0 -1
  98. package/dist/src/gateway/dashboard-copy.d.ts +0 -7
  99. package/dist/src/gateway/dashboard-copy.en.d.ts +0 -504
  100. package/dist/src/gateway/dashboard-copy.en.js +0 -505
  101. package/dist/src/gateway/dashboard-copy.en.js.map +0 -1
  102. package/dist/src/gateway/dashboard-copy.js +0 -514
  103. package/dist/src/gateway/dashboard-copy.js.map +0 -1
  104. package/dist/src/gateway/dashboard-copy.zh-CN.d.ts +0 -504
  105. package/dist/src/gateway/dashboard-copy.zh-CN.js +0 -505
  106. package/dist/src/gateway/dashboard-copy.zh-CN.js.map +0 -1
  107. package/dist/src/gateway/dashboard-model.d.ts +0 -343
  108. package/dist/src/gateway/dashboard-model.js +0 -1061
  109. package/dist/src/gateway/dashboard-model.js.map +0 -1
  110. package/dist/src/gateway/dashboard.d.ts +0 -20
  111. package/dist/src/gateway/dashboard.js +0 -874
  112. package/dist/src/gateway/dashboard.js.map +0 -1
  113. package/dist/src/gateway/deepseek-detect.d.ts +0 -14
  114. package/dist/src/gateway/deepseek-detect.js +0 -41
  115. package/dist/src/gateway/deepseek-detect.js.map +0 -1
  116. package/dist/src/gateway/live-dashboard-app/app.js +0 -2385
  117. package/dist/src/gateway/live-dashboard-assets.d.ts +0 -10
  118. package/dist/src/gateway/live-dashboard-assets.js +0 -74
  119. package/dist/src/gateway/live-dashboard-assets.js.map +0 -1
  120. package/dist/src/gateway/live-dashboard-command.d.ts +0 -60
  121. package/dist/src/gateway/live-dashboard-command.js +0 -334
  122. package/dist/src/gateway/live-dashboard-command.js.map +0 -1
  123. package/dist/src/gateway/live-dashboard-http.d.ts +0 -39
  124. package/dist/src/gateway/live-dashboard-http.js +0 -383
  125. package/dist/src/gateway/live-dashboard-http.js.map +0 -1
  126. package/dist/src/gateway/live-dashboard-protocol.d.ts +0 -34
  127. package/dist/src/gateway/live-dashboard-protocol.js +0 -114
  128. package/dist/src/gateway/live-dashboard-protocol.js.map +0 -1
  129. package/dist/src/gateway/live-dashboard-server.d.ts +0 -33
  130. package/dist/src/gateway/live-dashboard-server.js +0 -144
  131. package/dist/src/gateway/live-dashboard-server.js.map +0 -1
  132. package/dist/src/gateway/live-dashboard-stream.d.ts +0 -46
  133. package/dist/src/gateway/live-dashboard-stream.js +0 -234
  134. package/dist/src/gateway/live-dashboard-stream.js.map +0 -1
  135. package/dist/src/gateway/live-dashboard.d.ts +0 -28
  136. package/dist/src/gateway/live-dashboard.js +0 -154
  137. package/dist/src/gateway/live-dashboard.js.map +0 -1
  138. package/dist/src/gateway/locale.d.ts +0 -4
  139. package/dist/src/gateway/locale.js +0 -10
  140. package/dist/src/gateway/locale.js.map +0 -1
  141. package/dist/src/gateway/progress-watch-machine.d.ts +0 -45
  142. package/dist/src/gateway/progress-watch-machine.js +0 -70
  143. package/dist/src/gateway/progress-watch-machine.js.map +0 -1
  144. package/docs/CONFIGURATION.zh-CN.md +0 -97
  145. package/docs/DASHBOARD.md +0 -98
  146. package/docs/DASHBOARD.zh-CN.md +0 -49
  147. package/docs/DELIVERY.zh-CN.md +0 -55
@@ -1,10 +0,0 @@
1
- import { type DashboardLocale } from "./dashboard-copy.js";
2
- export type LiveDashboardAssets = Readonly<{
3
- shellHtml: string;
4
- clientJavaScript: string;
5
- styleSheet: string;
6
- appJavaScript: string;
7
- vendorReactJavaScript: string;
8
- vendorReactDomJavaScript: string;
9
- }>;
10
- export declare function renderLiveDashboardAssets(locale: DashboardLocale): LiveDashboardAssets;
@@ -1,74 +0,0 @@
1
- import { readFileSync } from "node:fs";
2
- import { BridgeError } from "../errors.js";
3
- import { assertDashboardLocale, getDashboardCopy, } from "./dashboard-copy.js";
4
- import { DASHBOARD_SEMANTICS } from "./dashboard-model.js";
5
- const APP_JAVASCRIPT_CANDIDATES = [
6
- "./live-dashboard-app/app.js",
7
- "../../dist/src/gateway/live-dashboard-app/app.js",
8
- ];
9
- const VENDOR_REACT_CANDIDATES = [
10
- "../../../assets/vendor/react/react.production.min.js",
11
- "../../assets/vendor/react/react.production.min.js",
12
- ];
13
- const VENDOR_REACT_DOM_CANDIDATES = [
14
- "../../../assets/vendor/react/react-dom.production.min.js",
15
- "../../assets/vendor/react/react-dom.production.min.js",
16
- ];
17
- const STYLE_SHEET_CANDIDATES = [
18
- "../../../assets/live-dashboard/app.css",
19
- "../../assets/live-dashboard/app.css",
20
- ];
21
- function readBundledAsset(candidates) {
22
- for (const rel of candidates) {
23
- try {
24
- return readFileSync(new URL(rel, import.meta.url), "utf8");
25
- }
26
- catch {
27
- // Try the next candidate location.
28
- }
29
- }
30
- throw new BridgeError("LIVE_DASHBOARD_ASSET_MISSING", `A bundled live dashboard asset is missing; looked for: ${candidates.join(", ")} (relative to ${import.meta.url}).`);
31
- }
32
- function escapeHtml(value) {
33
- return value
34
- .replaceAll("&", "&amp;")
35
- .replaceAll('"', "&quot;")
36
- .replaceAll("<", "&lt;")
37
- .replaceAll(">", "&gt;");
38
- }
39
- function shell(locale) {
40
- const copy = getDashboardCopy(locale);
41
- return `<!doctype html>
42
- <html lang="${locale}"><head><meta charset="utf-8">
43
- <meta name="viewport" content="width=device-width,initial-scale=1">
44
- <meta name="referrer" content="no-referrer">
45
- <title>${escapeHtml(copy["live.title"])}</title>
46
- <link rel="stylesheet" href="app.css">
47
- <script defer src="react.js"></script>
48
- <script defer src="react-dom.js"></script>
49
- <script defer src="client.js"></script>
50
- <script defer src="app.js"></script>
51
- </head><body><div id="root" aria-live="off"></div>
52
- <noscript>${escapeHtml(copy["live.noscript"])}</noscript></body></html>`;
53
- }
54
- function client(locale) {
55
- const copies = {
56
- en: getDashboardCopy("en"),
57
- "zh-CN": getDashboardCopy("zh-CN"),
58
- };
59
- return `"use strict";
60
- window.EMBASSY_BOOT=Object.freeze({locale:${JSON.stringify(locale)},copy:Object.freeze({en:Object.freeze(${JSON.stringify(copies.en)}),"zh-CN":Object.freeze(${JSON.stringify(copies["zh-CN"])})}),semantics:Object.freeze(${JSON.stringify(DASHBOARD_SEMANTICS)})});
61
- `;
62
- }
63
- export function renderLiveDashboardAssets(locale) {
64
- assertDashboardLocale(locale);
65
- return {
66
- shellHtml: shell(locale),
67
- clientJavaScript: client(locale),
68
- styleSheet: readBundledAsset(STYLE_SHEET_CANDIDATES),
69
- appJavaScript: readBundledAsset(APP_JAVASCRIPT_CANDIDATES),
70
- vendorReactJavaScript: readBundledAsset(VENDOR_REACT_CANDIDATES),
71
- vendorReactDomJavaScript: readBundledAsset(VENDOR_REACT_DOM_CANDIDATES),
72
- };
73
- }
74
- //# sourceMappingURL=live-dashboard-assets.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"live-dashboard-assets.js","sourceRoot":"","sources":["../../../src/gateway/live-dashboard-assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAW3D,MAAM,yBAAyB,GAAsB;IACnD,6BAA6B;IAC7B,kDAAkD;CACnD,CAAC;AAEF,MAAM,uBAAuB,GAAsB;IACjD,sDAAsD;IACtD,mDAAmD;CACpD,CAAC;AAEF,MAAM,2BAA2B,GAAsB;IACrD,0DAA0D;IAC1D,uDAAuD;CACxD,CAAC;AAEF,MAAM,sBAAsB,GAAsB;IAChD,wCAAwC;IACxC,qCAAqC;CACtC,CAAC;AAEF,SAAS,gBAAgB,CAAC,UAA6B;IACrD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;QACrC,CAAC;IACH,CAAC;IACD,MAAM,IAAI,WAAW,CACnB,8BAA8B,EAC9B,0DAA0D,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CACpH,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;SACzB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,KAAK,CAAC,MAAuB;IACpC,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO;cACK,MAAM;;;SAGX,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;;;;;;YAO3B,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,2BAA2B,CAAC;AACzE,CAAC;AAED,SAAS,MAAM,CAAC,MAAuB;IACrC,MAAM,MAAM,GAAG;QACb,EAAE,EAAE,gBAAgB,CAAC,IAAI,CAAC;QAC1B,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;KACnC,CAAC;IACF,OAAO;4CACmC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,yCAAyC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,+BAA+B,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC;CAC/P,CAAC;AACF,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,MAAuB;IAEvB,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC;QAChC,UAAU,EAAE,gBAAgB,CAAC,sBAAsB,CAAC;QACpD,aAAa,EAAE,gBAAgB,CAAC,yBAAyB,CAAC;QAC1D,qBAAqB,EAAE,gBAAgB,CAAC,uBAAuB,CAAC;QAChE,wBAAwB,EAAE,gBAAgB,CAAC,2BAA2B,CAAC;KACxE,CAAC;AACJ,CAAC"}
@@ -1,60 +0,0 @@
1
- import type { DashboardLocale } from "./dashboard-copy.js";
2
- import { type GatewayConfig } from "./config.js";
3
- import type { GatewayNodeInventory } from "./federation-nodes.js";
4
- import { type GatewayControlMethod, type GatewayControlResponse, type SendGatewayControlRequestOptions } from "./control.js";
5
- import { type RunningLiveDashboard, type StartLiveDashboardOptions } from "./live-dashboard.js";
6
- import type { LiveDashboardActionExecutor } from "./live-dashboard-http.js";
7
- import type { LiveDashboardObserver } from "./live-dashboard-stream.js";
8
- declare const OPEN_EXECUTABLE = "/usr/bin/open";
9
- declare const OPEN_TIMEOUT_MS = 10000;
10
- declare const OPEN_MAX_OUTPUT_BYTES: number;
11
- export declare const DEFAULT_LIVE_DASHBOARD_PORT = 41961;
12
- type GatewaySignal = "SIGINT" | "SIGTERM";
13
- export type LiveDashboardReadyResult = Readonly<{
14
- status: "ready";
15
- mode: "live";
16
- locale: DashboardLocale;
17
- url: string;
18
- }>;
19
- export type LiveDashboardCommandOutcome = Readonly<{
20
- status: "cancelled";
21
- }>;
22
- export type LiveDashboardCommandOptions = Readonly<{
23
- env?: NodeJS.ProcessEnv;
24
- locale: DashboardLocale;
25
- /** Explicit CLI-selected port; omitted direct callers receive the default. */
26
- port?: number;
27
- signal?: AbortSignal;
28
- onReady: (result: LiveDashboardReadyResult) => void | Promise<void>;
29
- inventory: GatewayNodeInventory;
30
- loadConfig?: (env: NodeJS.ProcessEnv, inventory: GatewayNodeInventory) => GatewayConfig;
31
- validateControlSocket: (stateDir: string, socketPath: string) => Promise<void>;
32
- sendRequest?: GatewayControlSender;
33
- }>;
34
- type GatewayControlSender = <M extends GatewayControlMethod>(options: SendGatewayControlRequestOptions<M>) => Promise<GatewayControlResponse<M>>;
35
- type OpenExecutor = (executable: typeof OPEN_EXECUTABLE, args: readonly [string], options: Readonly<{
36
- cwd: "/";
37
- env: Readonly<Record<string, string>>;
38
- shell: false;
39
- timeout: typeof OPEN_TIMEOUT_MS;
40
- maxBuffer: typeof OPEN_MAX_OUTPUT_BYTES;
41
- windowsHide: true;
42
- signal: AbortSignal;
43
- }>) => Promise<void>;
44
- export type LiveDashboardCommandDependencies = Readonly<{
45
- startDashboard?: (options: StartLiveDashboardOptions) => Promise<RunningLiveDashboard>;
46
- executeOpen?: OpenExecutor;
47
- addSignalListener?: (signal: GatewaySignal, listener: () => void) => void;
48
- removeSignalListener?: (signal: GatewaySignal, listener: () => void) => void;
49
- }>;
50
- export declare function createGatewayLiveDashboardObserver(socketPath: string, sendRequest?: GatewayControlSender): LiveDashboardObserver;
51
- export declare function createGatewayLiveDashboardActions(socketPath: string, sendRequest?: GatewayControlSender): LiveDashboardActionExecutor;
52
- /**
53
- * Run the opt-in live dashboard in the foreground until interrupted.
54
- *
55
- * The controller remains the only source of state. This command exposes one
56
- * observer plus four closed actions; it has no provider API
57
- * or generic control-plane escape hatch.
58
- */
59
- export declare function runLiveDashboardCommand(options: LiveDashboardCommandOptions, dependencies?: LiveDashboardCommandDependencies): Promise<LiveDashboardCommandOutcome>;
60
- export {};
@@ -1,334 +0,0 @@
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
- export const DEFAULT_LIVE_DASHBOARD_PORT = 41_961;
15
- function defaultOpenExecutor(executable, args, options) {
16
- return new Promise((resolve, reject) => {
17
- execFile(executable, [...args], options, (error) => {
18
- if (error === null)
19
- resolve();
20
- else
21
- reject(error);
22
- });
23
- });
24
- }
25
- function createShutdownLatch(signal, addSignalListener, removeSignalListener) {
26
- let resolveWait;
27
- let stopped = false;
28
- let disposed = false;
29
- let sigintOwned = false;
30
- let sigtermOwned = false;
31
- let abortOwned = false;
32
- const shutdown = new AbortController();
33
- const wait = new Promise((resolve) => {
34
- resolveWait = resolve;
35
- });
36
- const stop = () => {
37
- if (stopped)
38
- return;
39
- stopped = true;
40
- shutdown.abort();
41
- resolveWait?.();
42
- };
43
- const onSigint = () => stop();
44
- const onSigterm = () => stop();
45
- const releaseOwnedListeners = () => {
46
- const errors = [];
47
- if (abortOwned) {
48
- abortOwned = false;
49
- try {
50
- signal?.removeEventListener("abort", stop);
51
- }
52
- catch (error) {
53
- errors.push(error);
54
- }
55
- }
56
- if (sigtermOwned) {
57
- sigtermOwned = false;
58
- try {
59
- removeSignalListener("SIGTERM", onSigterm);
60
- }
61
- catch (error) {
62
- errors.push(error);
63
- }
64
- }
65
- if (sigintOwned) {
66
- sigintOwned = false;
67
- try {
68
- removeSignalListener("SIGINT", onSigint);
69
- }
70
- catch (error) {
71
- errors.push(error);
72
- }
73
- }
74
- return errors;
75
- };
76
- try {
77
- addSignalListener("SIGINT", onSigint);
78
- sigintOwned = true;
79
- addSignalListener("SIGTERM", onSigterm);
80
- sigtermOwned = true;
81
- if (signal !== undefined) {
82
- signal.addEventListener("abort", stop, { once: true });
83
- abortOwned = true;
84
- }
85
- if (signal?.aborted === true)
86
- stop();
87
- }
88
- catch (error) {
89
- const cleanupErrors = releaseOwnedListeners();
90
- if (cleanupErrors.length > 0) {
91
- throw new AggregateError([error, ...cleanupErrors], "Live dashboard signal setup failed.");
92
- }
93
- throw error;
94
- }
95
- return {
96
- wait,
97
- signal: shutdown.signal,
98
- isStopped: () => stopped,
99
- dispose: () => {
100
- if (disposed)
101
- return;
102
- disposed = true;
103
- const cleanupErrors = releaseOwnedListeners();
104
- if (cleanupErrors.length > 0) {
105
- throw new AggregateError(cleanupErrors, "Live dashboard signal cleanup failed.");
106
- }
107
- },
108
- };
109
- }
110
- function withoutProviderIdentity(env) {
111
- const operatorEnvironment = { ...env };
112
- // The live dashboard is an operator command. Inherited provider identity is
113
- // neither an authorization requirement nor forwarded to a child process.
114
- delete operatorEnvironment.CODEX_THREAD_ID;
115
- delete operatorEnvironment.CLAUDE_CODE_MESSAGING_SOCKET;
116
- return operatorEnvironment;
117
- }
118
- export function createGatewayLiveDashboardObserver(socketPath, sendRequest = sendGatewayControlRequest) {
119
- return {
120
- observe: async () => {
121
- const response = await sendRequest({
122
- socketPath,
123
- request: {
124
- protocolVersion: GATEWAY_CONTROL_PROTOCOL_VERSION,
125
- method: "observe_snapshot",
126
- params: {},
127
- },
128
- });
129
- if (!response.ok) {
130
- // Stream machinery converts this closed failure into its fixed offline
131
- // event. Wire diagnostics are intentionally never forwarded to the UI.
132
- throw new Error("LIVE_DASHBOARD_OBSERVER_UNAVAILABLE");
133
- }
134
- return response.result;
135
- },
136
- };
137
- }
138
- export function createGatewayLiveDashboardActions(socketPath, sendRequest = sendGatewayControlRequest) {
139
- return {
140
- execute: async (action) => {
141
- try {
142
- let response;
143
- switch (action.action) {
144
- case "pair":
145
- response = await sendRequest({
146
- socketPath,
147
- request: {
148
- protocolVersion: GATEWAY_CONTROL_PROTOCOL_VERSION,
149
- method: "pair",
150
- params: {
151
- aliases: action.aliases,
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
- aliases: action.aliases,
164
- },
165
- },
166
- });
167
- break;
168
- case "remove_codex_registration":
169
- response = await sendRequest({
170
- socketPath,
171
- request: {
172
- protocolVersion: GATEWAY_CONTROL_PROTOCOL_VERSION,
173
- method: "remove_codex_registration",
174
- params: { alias: action.alias },
175
- },
176
- });
177
- break;
178
- case "refresh_dashboard":
179
- response = await sendRequest({
180
- socketPath,
181
- request: {
182
- protocolVersion: GATEWAY_CONTROL_PROTOCOL_VERSION,
183
- method: "refresh_dashboard",
184
- params: {},
185
- },
186
- });
187
- break;
188
- }
189
- if (!response.ok)
190
- return { ok: false, code: "unavailable" };
191
- return {
192
- ok: response.result.accepted,
193
- code: response.result.code,
194
- };
195
- }
196
- catch {
197
- return { ok: false, code: "unavailable" };
198
- }
199
- },
200
- };
201
- }
202
- async function openLiveDashboard(url, executeOpen, signal) {
203
- try {
204
- await executeOpen(OPEN_EXECUTABLE, [url], {
205
- cwd: "/",
206
- env: OPEN_ENVIRONMENT,
207
- shell: false,
208
- timeout: OPEN_TIMEOUT_MS,
209
- maxBuffer: OPEN_MAX_OUTPUT_BYTES,
210
- windowsHide: true,
211
- signal,
212
- });
213
- }
214
- catch {
215
- throw new BridgeError("LIVE_DASHBOARD_OPEN_FAILED", "Embassy could not ask the operating system to open the live dashboard.", true);
216
- }
217
- }
218
- function ownLateStartup(outcome) {
219
- void outcome.then(async (result) => {
220
- if (result.kind !== "started")
221
- return;
222
- await result.dashboard.close().catch(() => undefined);
223
- });
224
- }
225
- /**
226
- * Run the opt-in live dashboard in the foreground until interrupted.
227
- *
228
- * The controller remains the only source of state. This command exposes one
229
- * observer plus four closed actions; it has no provider API
230
- * or generic control-plane escape hatch.
231
- */
232
- export async function runLiveDashboardCommand(options, dependencies = {}) {
233
- const env = withoutProviderIdentity(options.env ?? process.env);
234
- const loadConfig = options.loadConfig ?? loadGatewayConfig;
235
- const sendRequest = options.sendRequest ?? sendGatewayControlRequest;
236
- const startDashboard = dependencies.startDashboard ?? startLiveDashboard;
237
- const executeOpen = dependencies.executeOpen ?? defaultOpenExecutor;
238
- const addSignalListener = dependencies.addSignalListener ??
239
- ((signal, listener) => {
240
- process.on(signal, listener);
241
- });
242
- const removeSignalListener = dependencies.removeSignalListener ??
243
- ((signal, listener) => {
244
- process.off(signal, listener);
245
- });
246
- const config = loadConfig(env, options.inventory);
247
- await options.validateControlSocket(config.stateDir, config.controlSocketPath);
248
- let latch;
249
- let running;
250
- let operationError;
251
- try {
252
- latch = createShutdownLatch(options.signal, addSignalListener, removeSignalListener);
253
- if (!latch.isStopped()) {
254
- const startup = startDashboard({
255
- port: options.port ?? DEFAULT_LIVE_DASHBOARD_PORT,
256
- observer: createGatewayLiveDashboardObserver(config.controlSocketPath, sendRequest),
257
- actions: createGatewayLiveDashboardActions(config.controlSocketPath, sendRequest),
258
- locale: options.locale,
259
- signal: latch.signal,
260
- dependencies: {
261
- openDashboard: async (url) => {
262
- if (latch?.isStopped() !== false) {
263
- throw new Error("LIVE_DASHBOARD_START_CANCELLED");
264
- }
265
- await openLiveDashboard(url, executeOpen, latch.signal);
266
- },
267
- },
268
- })
269
- .then((dashboard) => ({
270
- kind: "started",
271
- dashboard,
272
- }))
273
- .catch((error) => ({
274
- kind: "failed",
275
- error,
276
- }));
277
- const startupOrShutdown = await Promise.race([
278
- startup,
279
- latch.wait.then(() => ({ kind: "cancelled" })),
280
- ]);
281
- if (startupOrShutdown.kind === "cancelled") {
282
- // A Promise alone cannot keep the process alive. If startup owns a
283
- // late server handle, that handle does keep the foreground process
284
- // alive long enough for this exact continuation to close it.
285
- ownLateStartup(startup);
286
- }
287
- else if (startupOrShutdown.kind === "failed" &&
288
- !(latch.isStopped() &&
289
- isLiveDashboardStartupCancelled(startupOrShutdown.error))) {
290
- throw startupOrShutdown.error;
291
- }
292
- else if (startupOrShutdown.kind === "started") {
293
- running = startupOrShutdown.dashboard;
294
- if (!latch.isStopped()) {
295
- await options.onReady({
296
- status: "ready",
297
- mode: "live",
298
- locale: options.locale,
299
- url: running.url,
300
- });
301
- await latch.wait;
302
- }
303
- }
304
- }
305
- }
306
- catch (error) {
307
- operationError = error;
308
- }
309
- const cleanupErrors = [];
310
- if (running !== undefined) {
311
- await running.close().catch((error) => {
312
- cleanupErrors.push(error);
313
- });
314
- }
315
- if (latch !== undefined) {
316
- try {
317
- latch.dispose();
318
- }
319
- catch (error) {
320
- cleanupErrors.push(error);
321
- }
322
- }
323
- if (operationError !== undefined && cleanupErrors.length === 0) {
324
- throw operationError;
325
- }
326
- if (operationError !== undefined || cleanupErrors.length > 0) {
327
- throw new AggregateError([
328
- ...(operationError === undefined ? [] : [operationError]),
329
- ...cleanupErrors,
330
- ], "Live dashboard command failed.");
331
- }
332
- return { status: "cancelled" };
333
- }
334
- //# sourceMappingURL=live-dashboard-command.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"live-dashboard-command.js","sourceRoot":"","sources":["../../../src/gateway/live-dashboard-command.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
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
- aliases: readonly [string, string];
17
- }> | Readonly<{
18
- action: "remove_codex_registration";
19
- alias: string;
20
- }> | Readonly<{
21
- action: "refresh_dashboard";
22
- }>;
23
- export type LiveDashboardActionResult = Readonly<{
24
- ok: boolean;
25
- code: GatewayDecisionCode | "rate_limited" | "unavailable";
26
- }>;
27
- export type LiveDashboardActionExecutor = Readonly<{
28
- execute(action: LiveDashboardAction): Promise<LiveDashboardActionResult>;
29
- }>;
30
- export type LiveDashboardRequestHandlerOptions = Readonly<{
31
- expectedHost: string;
32
- expectedOrigin: string;
33
- lang: DashboardLocale;
34
- assets: LiveDashboardHttpAssets;
35
- hub: LiveDashboardStreamHub;
36
- actions: LiveDashboardActionExecutor;
37
- now?: () => number;
38
- }>;
39
- export declare function createLiveDashboardRequestHandler(options: LiveDashboardRequestHandlerOptions): LiveDashboardRequestHandler;