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,127 +0,0 @@
|
|
|
1
|
-
import { execFile } from "node:child_process";
|
|
2
|
-
import { promisify } from "node:util";
|
|
3
|
-
export const CODEX_DOCTOR_MAX_PROCESSES = 512;
|
|
4
|
-
export const CODEX_DOCTOR_MAX_SOCKET_HOLDERS = 32;
|
|
5
|
-
const run = promisify(execFile);
|
|
6
|
-
const UNKNOWN = Object.freeze({ conditions: ["unknown"] });
|
|
7
|
-
const validPid = (value) => Number.isSafeInteger(value) && value > 0;
|
|
8
|
-
const desktop = (process) => process.bundleIdentifier === "com.openai.codex" && /^\/Applications\/[^/]+\.app\/.+/.test(process.executablePath);
|
|
9
|
-
function embassyOwned(pid, embassyPid, processes) {
|
|
10
|
-
const seen = new Set();
|
|
11
|
-
while (!seen.has(pid) && seen.size <= processes.size) {
|
|
12
|
-
if (pid === embassyPid)
|
|
13
|
-
return true;
|
|
14
|
-
seen.add(pid);
|
|
15
|
-
const parent = processes.get(pid)?.parentPid;
|
|
16
|
-
if (parent === undefined || !validPid(parent) || parent === pid)
|
|
17
|
-
return false;
|
|
18
|
-
pid = parent;
|
|
19
|
-
}
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
function validate(inspection) {
|
|
23
|
-
if (inspection.processes.length > CODEX_DOCTOR_MAX_PROCESSES || inspection.socketHolderPids.length > CODEX_DOCTOR_MAX_SOCKET_HOLDERS)
|
|
24
|
-
return undefined;
|
|
25
|
-
const processes = new Map();
|
|
26
|
-
for (const process of inspection.processes) {
|
|
27
|
-
if (!validPid(process.pid) || typeof process.executablePath !== "string" || process.executablePath.includes("\0") ||
|
|
28
|
-
processes.has(process.pid) || (process.parentPid !== undefined && !validPid(process.parentPid)))
|
|
29
|
-
return undefined;
|
|
30
|
-
processes.set(process.pid, process);
|
|
31
|
-
}
|
|
32
|
-
const holders = new Set();
|
|
33
|
-
for (const pid of inspection.socketHolderPids) {
|
|
34
|
-
if (!validPid(pid))
|
|
35
|
-
return undefined;
|
|
36
|
-
holders.add(pid);
|
|
37
|
-
}
|
|
38
|
-
return { processes, holders };
|
|
39
|
-
}
|
|
40
|
-
function classify(inspection, options) {
|
|
41
|
-
const validated = validate(inspection);
|
|
42
|
-
if (validated === undefined)
|
|
43
|
-
return UNKNOWN;
|
|
44
|
-
const { processes, holders } = validated;
|
|
45
|
-
const daemon = [...holders].filter((pid) => processes.get(pid)?.executablePath === options.daemonExecutablePath);
|
|
46
|
-
if (daemon.length !== 1)
|
|
47
|
-
return UNKNOWN;
|
|
48
|
-
const external = [];
|
|
49
|
-
for (const pid of holders) {
|
|
50
|
-
if (pid === daemon[0] || embassyOwned(pid, options.embassyPid, processes))
|
|
51
|
-
continue;
|
|
52
|
-
const process = processes.get(pid);
|
|
53
|
-
if (process === undefined)
|
|
54
|
-
return UNKNOWN;
|
|
55
|
-
external.push(process);
|
|
56
|
-
}
|
|
57
|
-
if (external.some(desktop))
|
|
58
|
-
return { conditions: ["attached"] };
|
|
59
|
-
if (external.length)
|
|
60
|
-
return UNKNOWN;
|
|
61
|
-
return { conditions: [inspection.processes.some(desktop) ? "split_brain" : "orphaned"] };
|
|
62
|
-
}
|
|
63
|
-
async function inspect(options) {
|
|
64
|
-
return await options.inspector.inspect({ socketPath: options.socketPath,
|
|
65
|
-
maximumProcesses: CODEX_DOCTOR_MAX_PROCESSES, maximumSocketHolders: CODEX_DOCTOR_MAX_SOCKET_HOLDERS });
|
|
66
|
-
}
|
|
67
|
-
/** Returns bounded public state; raw process evidence never crosses this module. */
|
|
68
|
-
export async function diagnoseCodexAttachment(options) {
|
|
69
|
-
if (!options.socketPath || options.socketPath.includes("\0") || !options.daemonExecutablePath.startsWith("/") ||
|
|
70
|
-
options.daemonExecutablePath.includes("\0") || !validPid(options.embassyPid))
|
|
71
|
-
return UNKNOWN;
|
|
72
|
-
try {
|
|
73
|
-
return classify(await inspect(options), options);
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
return UNKNOWN;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
/** Missing managed files are actionable only when the fixed private socket is still held outside Embassy. */
|
|
80
|
-
export async function diagnoseMissingManagedCodexLayout(options) {
|
|
81
|
-
if (!options.socketPath || options.socketPath.includes("\0") || !validPid(options.embassyPid))
|
|
82
|
-
return UNKNOWN;
|
|
83
|
-
try {
|
|
84
|
-
const validated = validate(await inspect(options));
|
|
85
|
-
if (validated === undefined)
|
|
86
|
-
return UNKNOWN;
|
|
87
|
-
return [...validated.holders].some((pid) => validated.processes.has(pid) &&
|
|
88
|
-
!embassyOwned(pid, options.embassyPid, validated.processes))
|
|
89
|
-
? { conditions: ["managed_layout_missing"] } : UNKNOWN;
|
|
90
|
-
}
|
|
91
|
-
catch {
|
|
92
|
-
return UNKNOWN;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
/** Bounded macOS inspection; commands and outputs are fixed and private. */
|
|
96
|
-
export function createSystemCodexDoctorInspector() {
|
|
97
|
-
return { inspect: async ({ socketPath, maximumProcesses, maximumSocketHolders }) => {
|
|
98
|
-
const execOptions = { encoding: "utf8", maxBuffer: 64 * 1024, timeout: 2_000 };
|
|
99
|
-
const [{ stdout: lsof }, { stdout: ps }] = await Promise.all([
|
|
100
|
-
run("/usr/sbin/lsof", ["-n", "-F", "p", "--", socketPath], execOptions),
|
|
101
|
-
run("/bin/ps", ["-ww", "-axo", "pid=,ppid=,comm="], execOptions),
|
|
102
|
-
]);
|
|
103
|
-
const socketHolderPids = [...new Set(lsof.split("\n").flatMap((line) => /^p[1-9][0-9]*$/.test(line) ? [Number(line.slice(1))] : []))];
|
|
104
|
-
if (socketHolderPids.length > maximumSocketHolders)
|
|
105
|
-
throw new Error("bounded socket-holder evidence exceeded");
|
|
106
|
-
const processes = ps.split("\n").flatMap((line) => {
|
|
107
|
-
const match = /^\s*([1-9][0-9]*)\s+([1-9][0-9]*)\s+(.+?)\s*$/.exec(line);
|
|
108
|
-
return match === null ? [] : [{ pid: Number(match[1]), parentPid: Number(match[2]), executablePath: match[3] }];
|
|
109
|
-
});
|
|
110
|
-
if (processes.length > maximumProcesses)
|
|
111
|
-
throw new Error("bounded process evidence exceeded");
|
|
112
|
-
const appRoots = [...new Set(processes.flatMap(({ executablePath }) => /^(\/Applications\/[^/]+\.app)\//.exec(executablePath)?.[1] ?? []))];
|
|
113
|
-
if (appRoots.length > 32)
|
|
114
|
-
throw new Error("bounded app evidence exceeded");
|
|
115
|
-
const identifiers = new Map();
|
|
116
|
-
await Promise.all(appRoots.map(async (root) => {
|
|
117
|
-
const { stdout } = await run("/usr/bin/mdls", ["-raw", "-name", "kMDItemCFBundleIdentifier", root], execOptions);
|
|
118
|
-
identifiers.set(root, stdout.trim());
|
|
119
|
-
}));
|
|
120
|
-
return { socketHolderPids, processes: processes.map((process) => {
|
|
121
|
-
const root = /^(\/Applications\/[^/]+\.app)\//.exec(process.executablePath)?.[1];
|
|
122
|
-
const bundleIdentifier = root === undefined ? undefined : identifiers.get(root);
|
|
123
|
-
return { ...process, ...(bundleIdentifier === undefined ? {} : { bundleIdentifier }) };
|
|
124
|
-
}) };
|
|
125
|
-
} };
|
|
126
|
-
}
|
|
127
|
-
//# sourceMappingURL=codex-doctor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-doctor.js","sourceRoot":"","sources":["../../../src/gateway/codex-doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { DashboardLocale } from "./locale.js";
|
|
2
|
-
export { assertDashboardLocale, dashboardLocales, isDashboardLocale, type DashboardLocale, } from "./locale.js";
|
|
3
|
-
export declare const dashboardCopyKeys: readonly ["meta.title", "skip", "language.label", "language.en", "language.zhCn", "brand.eyebrow", "brand.title", "brand.subtitle", "snapshot.asOf", "snapshot.static", "overall.ready", "overall.setup", "overall.attention", "exchange.eyebrow", "exchange.title", "exchange.note", "inbound.paired.badge", "inbound.paired.body", "inbound.open.badge", "inbound.open.body", "inbound.noPair.body", "exchange.claude.title", "exchange.claude.note", "exchange.codex.title", "exchange.codex.note", "exchange.provider.note", "exchange.pouch.title", "exchange.pouch.empty", "exchange.pouch.queued", "exchange.pouch.oldest", "exchange.count.claude", "exchange.count.codex", "app.overview.count.provider", "status.ready", "status.busy", "status.waiting", "status.missing", "status.attention", "status.selected", "status.available", "status.notSelectable", "status.enabled", "status.disabled", "next.label", "next.none", "next.discoverClaude", "next.selectClaude", "next.pairRoutes", "next.restoreClaude", "next.repairClaude", "next.registerCodex", "attention.eyebrow", "attention.title", "attention.count", "attention.countVisible", "attention.projectionOnly", "attention.scope", "severity.info", "severity.warning", "severity.error", "guidance.reobserveClaude.title", "guidance.reobserveClaude.body", "guidance.reobserveClaude.action", "guidance.consentEdgeUnavailable.title", "guidance.consentEdgeUnavailable.body", "guidance.consentEdgeUnavailable.action", "guidance.claudeNotObserved.title", "guidance.claudeNotObserved.body", "guidance.claudeNotObserved.action", "guidance.connectorOffline.title", "guidance.connectorOffline.body", "guidance.connectorOffline.action", "guidance.routeStale.title", "guidance.routeStale.body", "guidance.routeStale.action", "guidance.queueStalled.title", "guidance.queueStalled.body", "guidance.queueStalled.action", "guidance.queueStalled.busy", "guidance.recipientWaitingInput.title", "guidance.recipientWaitingInput.body", "guidance.recipientWaitingInput.action", "guidance.unconfirmed.title", "guidance.unconfirmed.body", "guidance.unconfirmed.action", "guidance.degraded.title", "guidance.degraded.body", "guidance.degraded.action", "guidance.generic.title", "guidance.generic.body", "guidance.generic.action", "guidance.progressWatch.title", "guidance.progressWatch.body", "guidance.progressWatch.action", "guidance.registryEmpty.title", "guidance.registryEmpty.body", "guidance.registryEmpty.action", "guidance.registryRejected.title", "guidance.registryRejected.body", "guidance.registryRejected.action", "transit.eyebrow", "transit.title", "transit.queued", "transit.active", "transit.oldest", "transit.empty", "transit.unavailable", "count.atLeast", "watches.eyebrow", "watches.title", "watches.note", "watches.empty", "watches.column.conversation", "watches.column.parties", "watches.column.quietFor", "watches.column.nextAction", "watches.column.nudges", "watches.history.title", "watches.event.opened", "watches.event.replaced", "watches.event.settled", "watches.actor.owner", "watches.actor.worker", "watches.actor.operator", "watches.actor.gateway", "watches.actor.unknown", "watches.reason.done", "watches.reason.untracked", "watches.reason.idleTimeout", "watches.reason.pairRemoved", "watches.reason.endpointRetired", "watches.reason.trackingDisabled", "activity.eyebrow", "activity.title", "activity.note", "activity.empty", "activity.column.updated", "activity.column.route", "activity.column.id", "activity.column.result", "activity.column.elapsed", "activity.column.size", "activity.column.history", "activity.history.one", "activity.history.many", "activity.meaning.delivered", "activity.meaning.delivered.toClaude", "activity.meaning.delivered.toCodex", "activity.meaning.delivered.toDeepSeek", "activity.meaning.delivered.toGrok", "activity.meaning.delivered.toPeer", "activity.meaning.unconfirmed", "activity.meaning.ambiguous", "activity.meaning.other", "activity.meaning.queued", "activity.meaning.dispatching", "activity.meaning.transportWritten", "activity.meaning.held", "activity.meaning.duplicate", "activity.meaning.rejected", "activity.meaning.senderNotPaired", "activity.meaning.failed", "activity.meaning.expired", "activity.meaning.cancelled", "activity.meaning.abandoned.controllerRestarted", "activity.meaning.abandoned.transientBody", "activity.meaning.abandoned.routeTerminated", "activity.meaning.abandoned.generic", "direction.claudeToCodex", "direction.codexToClaude", "delivery.queued", "delivery.duplicate", "delivery.dispatching", "delivery.transportWritten", "delivery.held", "delivery.delivered", "delivery.unconfirmed", "delivery.failed", "delivery.ambiguous", "delivery.expired", "delivery.cancelled", "delivery.abandoned", "delivery.rejected", "sessions.eyebrow", "sessions.title", "sessions.note", "sessions.peers.title", "sessions.peers.empty", "sessions.peers.caption", "sessions.routes.title", "sessions.routes.empty", "sessions.routes.caption", "column.alias", "column.host", "column.provider", "column.state", "column.selection", "column.validation", "status.validated", "status.validationRejected", "column.queue", "column.observed", "column.issue", "diagnostics.title", "diagnostics.note", "diagnostics.connectors", "diagnostics.connectors.empty", "diagnostics.connectors.caption", "diagnostics.codexDoctor.split_brain", "diagnostics.codexDoctor.orphaned", "diagnostics.codexDoctor.attached", "diagnostics.codexDoctor.observation_stale", "diagnostics.codexDoctor.managed_layout_missing", "diagnostics.codexDoctor.unknown", "diagnostics.registry.title", "diagnostics.registry.entriesScanned", "diagnostics.registry.parseableRecords", "diagnostics.registry.rejected", "diagnostics.registry.rejectedNone", "diagnostics.registry.rejectedCodesOmitted", "diagnostics.registry.state.parseableRecordObserved", "diagnostics.registry.state.emptySinceBoot", "diagnostics.registry.state.noParseableRecordSinceBoot", "diagnostics.protocol", "diagnostics.health", "diagnostics.accounting", "diagnostics.accepted", "diagnostics.duplicates", "diagnostics.delivered", "diagnostics.unconfirmed", "diagnostics.ambiguous", "diagnostics.failed", "diagnostics.expired", "diagnostics.cancelled", "diagnostics.abandoned", "diagnostics.rejected", "diagnostics.bytesAccepted", "diagnostics.queuedBytes", "diagnostics.omissions", "diagnostics.omissions.none", "diagnostics.omissions.connectors", "diagnostics.omissions.peers", "diagnostics.omissions.routes", "diagnostics.omissions.consentEdges", "diagnostics.omissions.progressWatches", "diagnostics.omissions.upstreamProgressWatchEvents", "diagnostics.omissions.progressWatchEvents", "diagnostics.omissions.upstreamMessageEvents", "diagnostics.omissions.messageGroups", "diagnostics.omissions.messageEvents", "diagnostics.omissions.upstreamAlerts", "diagnostics.omissions.attentionItems", "diagnostics.omissions.upstreamActivityEvents", "diagnostics.omissions.activityEvents", "provider.claude", "provider.codex", "provider.deepseek", "provider.grok", "provider.peer", "health.offline", "health.connecting", "health.healthy", "health.degraded", "health.meaning.healthy", "health.meaning.connecting", "health.meaning.degraded", "health.meaning.offline", "route.stale", "route.idle", "route.busy", "route.awaitingApproval", "route.offline", "route.disabled", "route.meaning.idle", "route.meaning.busy", "route.meaning.awaitingApproval", "route.meaning.stale", "route.meaning.offline", "route.meaning.disabled", "peer.idle", "peer.busy", "peer.awaitingApproval", "peer.offline", "peer.meaning.idle", "peer.meaning.busy", "peer.meaning.awaitingApproval", "peer.meaning.offline", "peer.reason.aliasCollision", "peer.reason.sessionCollision", "peer.reason.discoveryIncomplete", "peer.reason.offline", "time.atSnapshot", "time.beforeSnapshot", "time.afterSnapshot", "time.unavailable", "time.ago", "live.title", "live.noscript", "live.label", "live.mastheadSubtitle", "live.readonlyFooter", "live.action.authorityLabel", "live.action.authorityBody", "live.action.sectionTitle", "live.action.scope", "live.action.pair", "live.action.unpair", "live.action.removeCodexRegistration", "live.action.refresh", "live.action.confirm", "live.action.cancel", "live.action.pending", "live.action.succeeded", "live.action.failed", "live.action.requiresConnected", "live.connection.connecting", "live.connection.connected", "live.connection.unavailable", "live.connection.capacity", "live.connection.disconnected", "live.connection.fatal", "live.connection.paused", "live.connection.stopped", "live.control.pause", "live.control.reconnect", "live.control.refresh", "live.filter.placeholder", "live.metric.queued", "live.metric.active", "live.attention.empty", "live.activity.empty", "live.sessions.title", "live.diagnostics.title", "live.metric.revision", "live.stream.reset", "live.http.badRequest", "live.http.forbidden", "live.http.notFound", "live.http.methodNotAllowed", "live.http.bodyTooLarge", "live.http.targetTooLarge", "live.http.unsupportedMediaType", "live.http.tooManyStreams", "live.http.headersTooLarge", "live.http.snapshotUnavailable", "live.http.requestFailed", "live.http.starting", "app.tab.overview", "app.tab.deliveries", "app.tab.routes", "app.tab.activity", "app.tab.diagnostics", "app.search.label", "app.search.placeholder", "app.asOf", "app.stale", "app.missedFrames", "app.lowerBound", "app.copy", "app.copied", "app.copyFailed", "app.staleQuiet", "app.notLanded.title", "app.notLanded.body", "app.show", "app.hide", "app.overview.statusStrip", "app.overview.broker", "app.overview.claudeConn", "app.overview.codexConn", "app.overview.connectorMissing", "app.overview.node.claude.title", "app.overview.node.claude.sub", "app.overview.node.codex.title", "app.overview.node.codex.sub", "app.overview.count.codex", "app.overview.noPair.title", "app.overview.noPair.body", "app.overview.degradedEdge", "app.overview.degradedEdges", "app.overview.queueC2x", "app.overview.queueX2c", "app.overview.depth", "app.overview.oldest", "app.overview.pulse.title", "app.overview.pulse.caption", "app.overview.pulse.empty", "app.overview.viewIn", "app.deliveries.title", "app.deliveries.caption", "app.deliveries.dir.label", "app.deliveries.dir.all", "app.deliveries.dir.codexToClaude", "app.deliveries.fromProvider", "app.deliveries.toProvider", "app.deliveries.providerAll", "app.deliveries.view.label", "app.deliveries.view.byRoute", "app.deliveries.view.flat", "app.deliveries.state.all", "app.deliveries.search", "app.deliveries.noMatch", "app.deliveries.pickRow", "app.deliveries.lifecycle", "app.deliveries.frames", "app.deliveries.noFrames", "app.deliveries.raw", "app.deliveries.hideRaw", "app.deliveries.bodyLabel", "app.deliveries.bodiesNote", "app.deliveries.noConv", "app.deliveries.eventsTruncated", "app.deliveries.earliestRetained", "app.routes.topology", "app.routes.candidates", "app.routes.claudeSessions", "app.routes.codexRoutes", "app.routes.pairs", "app.routes.pairDescription", "app.routes.unpairedProvider", "app.routes.consentEndpoint", "app.routes.consentEdge", "app.routes.pairState.degraded", "app.routes.pairState.unavailable", "app.routes.pairDegradedReason", "app.routes.pairUnavailableReason", "app.routes.pairSummary", "app.routes.unpairedSummary", "app.routes.pairCmd.consequence", "app.routes.unpairCmd.consequence", "app.routes.selectCmd.title", "app.routes.selectCmd.consequence", "app.routes.selectCmd.consequenceOpen", "app.routes.unselectCmd.consequence", "app.routes.unselectCmd.consequenceOpen", "app.routes.refreshCmd", "app.routes.removeCodex.consequence", "app.routes.noPeers", "app.routes.noCodex", "app.routes.detail.absent", "app.routes.expandDetails", "app.routes.collapseDetails", "app.routes.queueDepth", "app.routes.counters", "app.routes.registered", "app.routes.registerHint", "app.routes.noPairInline", "app.omitted.pairs", "app.activity.title", "app.activity.kinds.all", "app.activity.kinds.delivery", "app.activity.kinds.operation", "app.activity.kinds.alert", "app.activity.operation.discoveryRefreshed", "app.activity.operation.claudeSelected", "app.activity.operation.claudeUnselected", "app.activity.operation.codexRegistered", "app.activity.operation.codexSucceeded", "app.activity.operation.codexUnregistered", "app.activity.operation.routesPaired", "app.activity.operation.routesUnpaired", "app.activity.operation.watchEnded", "app.activity.operation.operator", "app.activity.operation.automatic", "app.activity.operation.accepted", "app.activity.operation.rejected", "app.activity.limited", "app.activity.empty", "app.diag.versions", "app.diag.versions.caption", "app.diag.versions.rangeAbsent", "app.diag.col.provider", "app.diag.col.host", "app.diag.col.protocol", "app.diag.col.version", "app.diag.lease.title", "app.diag.lease.absent", "app.diag.limits", "app.diag.limits.hint", "app.diag.deadline.title", "app.diag.deadline.body", "app.diag.deadline.retained", "app.diag.deadline.bucket.under1m", "app.diag.deadline.bucket.1to5m", "app.diag.deadline.bucket.5to15m", "app.diag.deadline.bucket.15to60m", "app.diag.deadline.bucket.over60m", "app.diag.queue.title", "app.diag.queue.body", "app.diag.bytes.title", "app.diag.bytes.body", "app.diag.steering.title", "app.diag.steering.absent", "app.diag.deliveryNotices.title", "app.diag.deliveryNotices.note", "app.diag.editable.title", "app.diag.editable.note", "app.diag.counters", "app.diag.counters.caption", "app.diag.omissions", "app.diag.omissions.caption", "footer"];
|
|
4
|
-
export type DashboardCopyKey = (typeof dashboardCopyKeys)[number];
|
|
5
|
-
export type DashboardCopy = Readonly<Record<DashboardCopyKey, string>>;
|
|
6
|
-
export declare function getDashboardCopy(locale: DashboardLocale): DashboardCopy;
|
|
7
|
-
export declare function formatDashboardCopy(copy: DashboardCopy, key: DashboardCopyKey, values?: Readonly<Record<string, string | number>>): string;
|