agent-embassy 2.0.1 → 3.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.
- package/CHANGELOG.md +56 -0
- package/CONTRIBUTING.md +19 -34
- package/README.md +110 -228
- package/SECURITY.md +55 -89
- package/dist/src/errors.d.ts +10 -1
- package/dist/src/errors.js +3 -1
- package/dist/src/errors.js.map +1 -1
- package/dist/src/gateway/claude-helper-protocol.d.ts +8 -11
- package/dist/src/gateway/claude-helper-protocol.js +12 -11
- package/dist/src/gateway/claude-helper-protocol.js.map +1 -1
- package/dist/src/gateway/claude-helper-supervisor.d.ts +1 -5
- package/dist/src/gateway/claude-helper-supervisor.js +10 -9
- package/dist/src/gateway/claude-helper-supervisor.js.map +1 -1
- package/dist/src/gateway/claude-helper.js +6 -6
- package/dist/src/gateway/claude-helper.js.map +1 -1
- package/dist/src/gateway/claude-peer.d.ts +0 -3
- package/dist/src/gateway/claude-peer.js +6 -18
- package/dist/src/gateway/claude-peer.js.map +1 -1
- package/dist/src/gateway/cli.d.ts +17 -6
- package/dist/src/gateway/cli.js +912 -261
- package/dist/src/gateway/cli.js.map +1 -1
- package/dist/src/gateway/codex-socket-holder.d.ts +26 -0
- package/dist/src/gateway/codex-socket-holder.js +76 -0
- package/dist/src/gateway/codex-socket-holder.js.map +1 -0
- package/dist/src/gateway/codex-stateless-transport.js +1 -1
- package/dist/src/gateway/codex-stateless-transport.js.map +1 -1
- package/dist/src/gateway/config.d.ts +1 -10
- package/dist/src/gateway/config.js +4 -10
- package/dist/src/gateway/config.js.map +1 -1
- package/dist/src/gateway/control.d.ts +45 -77
- package/dist/src/gateway/control.js +56 -141
- package/dist/src/gateway/control.js.map +1 -1
- package/dist/src/gateway/federation-nodes.d.ts +29 -2
- package/dist/src/gateway/federation-nodes.js +177 -7
- package/dist/src/gateway/federation-nodes.js.map +1 -1
- package/dist/src/gateway/peer-client.d.ts +4 -3
- package/dist/src/gateway/peer-client.js +22 -13
- package/dist/src/gateway/peer-client.js.map +1 -1
- package/dist/src/gateway/peer-protocol.d.ts +8 -11
- package/dist/src/gateway/peer-protocol.js +5 -12
- package/dist/src/gateway/peer-protocol.js.map +1 -1
- package/dist/src/gateway/provenance-envelope.d.ts +0 -1
- package/dist/src/gateway/provenance-envelope.js +4 -19
- package/dist/src/gateway/provenance-envelope.js.map +1 -1
- package/dist/src/gateway/providers.d.ts +7 -4
- package/dist/src/gateway/providers.js +16 -20
- package/dist/src/gateway/providers.js.map +1 -1
- package/dist/src/gateway/server.d.ts +3 -12
- package/dist/src/gateway/server.js +31 -50
- package/dist/src/gateway/server.js.map +1 -1
- package/dist/src/gateway/service-agent.d.ts +187 -0
- package/dist/src/gateway/service-agent.js +758 -0
- package/dist/src/gateway/service-agent.js.map +1 -0
- package/dist/src/gateway/service.d.ts +114 -31
- package/dist/src/gateway/service.js +461 -566
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/gateway/status-view.d.ts +167 -0
- package/dist/src/gateway/status-view.js +488 -0
- package/dist/src/gateway/status-view.js.map +1 -0
- package/dist/src/gateway/store.d.ts +103 -21
- package/dist/src/gateway/store.js +454 -529
- package/dist/src/gateway/store.js.map +1 -1
- package/dist/src/gateway/types.d.ts +48 -99
- package/dist/src/gateway/types.js +15 -52
- package/dist/src/gateway/types.js.map +1 -1
- package/docs/CONFIGURATION.md +173 -44
- package/docs/DELIVERY.md +11 -11
- package/docs/GATEWAY-ARCHITECTURE.md +277 -375
- package/package.json +4 -12
- package/skills/embassy-peer/SKILL.md +65 -90
- package/skills/embassy-peer/agents/openai.yaml +1 -1
- package/README.zh-CN.md +0 -275
- package/assets/live-dashboard/app.css +0 -1619
- package/assets/vendor/react/LICENSE +0 -21
- package/assets/vendor/react/react-dom.production.min.js +0 -267
- package/assets/vendor/react/react.production.min.js +0 -31
- package/dist/src/gateway/acp-client.d.ts +0 -110
- package/dist/src/gateway/acp-client.js +0 -407
- package/dist/src/gateway/acp-client.js.map +0 -1
- package/dist/src/gateway/acp-provider.d.ts +0 -66
- package/dist/src/gateway/acp-provider.js +0 -275
- package/dist/src/gateway/acp-provider.js.map +0 -1
- package/dist/src/gateway/cli-copy.d.ts +0 -8
- package/dist/src/gateway/cli-copy.en.d.ts +0 -22
- package/dist/src/gateway/cli-copy.en.js +0 -62
- package/dist/src/gateway/cli-copy.en.js.map +0 -1
- package/dist/src/gateway/cli-copy.js +0 -27
- package/dist/src/gateway/cli-copy.js.map +0 -1
- package/dist/src/gateway/cli-copy.zh-CN.d.ts +0 -22
- package/dist/src/gateway/cli-copy.zh-CN.js +0 -62
- package/dist/src/gateway/cli-copy.zh-CN.js.map +0 -1
- package/dist/src/gateway/codex-doctor.d.ts +0 -36
- package/dist/src/gateway/codex-doctor.js +0 -127
- package/dist/src/gateway/codex-doctor.js.map +0 -1
- package/dist/src/gateway/dashboard-copy.d.ts +0 -7
- package/dist/src/gateway/dashboard-copy.en.d.ts +0 -504
- package/dist/src/gateway/dashboard-copy.en.js +0 -505
- package/dist/src/gateway/dashboard-copy.en.js.map +0 -1
- package/dist/src/gateway/dashboard-copy.js +0 -514
- package/dist/src/gateway/dashboard-copy.js.map +0 -1
- package/dist/src/gateway/dashboard-copy.zh-CN.d.ts +0 -504
- package/dist/src/gateway/dashboard-copy.zh-CN.js +0 -505
- package/dist/src/gateway/dashboard-copy.zh-CN.js.map +0 -1
- package/dist/src/gateway/dashboard-model.d.ts +0 -343
- package/dist/src/gateway/dashboard-model.js +0 -1061
- package/dist/src/gateway/dashboard-model.js.map +0 -1
- package/dist/src/gateway/dashboard.d.ts +0 -20
- package/dist/src/gateway/dashboard.js +0 -874
- package/dist/src/gateway/dashboard.js.map +0 -1
- package/dist/src/gateway/deepseek-detect.d.ts +0 -14
- package/dist/src/gateway/deepseek-detect.js +0 -41
- package/dist/src/gateway/deepseek-detect.js.map +0 -1
- package/dist/src/gateway/live-dashboard-app/app.js +0 -2385
- package/dist/src/gateway/live-dashboard-assets.d.ts +0 -10
- package/dist/src/gateway/live-dashboard-assets.js +0 -74
- package/dist/src/gateway/live-dashboard-assets.js.map +0 -1
- package/dist/src/gateway/live-dashboard-command.d.ts +0 -60
- package/dist/src/gateway/live-dashboard-command.js +0 -334
- package/dist/src/gateway/live-dashboard-command.js.map +0 -1
- package/dist/src/gateway/live-dashboard-http.d.ts +0 -39
- package/dist/src/gateway/live-dashboard-http.js +0 -383
- package/dist/src/gateway/live-dashboard-http.js.map +0 -1
- package/dist/src/gateway/live-dashboard-protocol.d.ts +0 -34
- package/dist/src/gateway/live-dashboard-protocol.js +0 -114
- package/dist/src/gateway/live-dashboard-protocol.js.map +0 -1
- package/dist/src/gateway/live-dashboard-server.d.ts +0 -33
- package/dist/src/gateway/live-dashboard-server.js +0 -144
- package/dist/src/gateway/live-dashboard-server.js.map +0 -1
- package/dist/src/gateway/live-dashboard-stream.d.ts +0 -46
- package/dist/src/gateway/live-dashboard-stream.js +0 -234
- package/dist/src/gateway/live-dashboard-stream.js.map +0 -1
- package/dist/src/gateway/live-dashboard.d.ts +0 -28
- package/dist/src/gateway/live-dashboard.js +0 -154
- package/dist/src/gateway/live-dashboard.js.map +0 -1
- package/dist/src/gateway/locale.d.ts +0 -4
- package/dist/src/gateway/locale.js +0 -10
- package/dist/src/gateway/locale.js.map +0 -1
- package/dist/src/gateway/progress-watch-machine.d.ts +0 -45
- package/dist/src/gateway/progress-watch-machine.js +0 -70
- package/dist/src/gateway/progress-watch-machine.js.map +0 -1
- package/docs/CONFIGURATION.zh-CN.md +0 -97
- package/docs/DASHBOARD.md +0 -98
- package/docs/DASHBOARD.zh-CN.md +0 -49
- 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("&", "&")
|
|
35
|
-
.replaceAll('"', """)
|
|
36
|
-
.replaceAll("<", "<")
|
|
37
|
-
.replaceAll(">", ">");
|
|
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;
|