agent-embassy 1.2.0 → 1.4.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 (109) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/CONTRIBUTING.md +50 -16
  3. package/README.md +57 -25
  4. package/README.zh-CN.md +45 -23
  5. package/SECURITY.md +68 -48
  6. package/dist/src/gateway/claude-helper-protocol.d.ts +1 -0
  7. package/dist/src/gateway/claude-helper-protocol.js +4 -2
  8. package/dist/src/gateway/claude-helper-protocol.js.map +1 -1
  9. package/dist/src/gateway/claude-helper-supervisor.d.ts +1 -0
  10. package/dist/src/gateway/claude-helper-supervisor.js +3 -1
  11. package/dist/src/gateway/claude-helper-supervisor.js.map +1 -1
  12. package/dist/src/gateway/claude-runtime.d.ts +0 -2
  13. package/dist/src/gateway/claude-runtime.js +6 -17
  14. package/dist/src/gateway/claude-runtime.js.map +1 -1
  15. package/dist/src/gateway/cli-copy.d.ts +1 -1
  16. package/dist/src/gateway/cli-copy.en.d.ts +4 -1
  17. package/dist/src/gateway/cli-copy.en.js +7 -3
  18. package/dist/src/gateway/cli-copy.en.js.map +1 -1
  19. package/dist/src/gateway/cli-copy.js +3 -0
  20. package/dist/src/gateway/cli-copy.js.map +1 -1
  21. package/dist/src/gateway/cli-copy.zh-CN.d.ts +4 -1
  22. package/dist/src/gateway/cli-copy.zh-CN.js +7 -3
  23. package/dist/src/gateway/cli-copy.zh-CN.js.map +1 -1
  24. package/dist/src/gateway/cli.d.ts +2 -5
  25. package/dist/src/gateway/cli.js +41 -67
  26. package/dist/src/gateway/cli.js.map +1 -1
  27. package/dist/src/gateway/codex-app-server.d.ts +2 -8
  28. package/dist/src/gateway/codex-app-server.js +36 -62
  29. package/dist/src/gateway/codex-app-server.js.map +1 -1
  30. package/dist/src/gateway/codex-local-transport.d.ts +4 -10
  31. package/dist/src/gateway/codex-local-transport.js +13 -16
  32. package/dist/src/gateway/codex-local-transport.js.map +1 -1
  33. package/dist/src/gateway/compatibility.d.ts +0 -27
  34. package/dist/src/gateway/compatibility.js +1 -101
  35. package/dist/src/gateway/compatibility.js.map +1 -1
  36. package/dist/src/gateway/config.d.ts +1 -4
  37. package/dist/src/gateway/config.js +0 -10
  38. package/dist/src/gateway/config.js.map +1 -1
  39. package/dist/src/gateway/control.d.ts +2 -21
  40. package/dist/src/gateway/control.js +7 -36
  41. package/dist/src/gateway/control.js.map +1 -1
  42. package/dist/src/gateway/dashboard-copy.d.ts +1 -1
  43. package/dist/src/gateway/dashboard-copy.en.d.ts +21 -8
  44. package/dist/src/gateway/dashboard-copy.en.js +40 -27
  45. package/dist/src/gateway/dashboard-copy.en.js.map +1 -1
  46. package/dist/src/gateway/dashboard-copy.js +21 -8
  47. package/dist/src/gateway/dashboard-copy.js.map +1 -1
  48. package/dist/src/gateway/dashboard-copy.zh-CN.d.ts +21 -8
  49. package/dist/src/gateway/dashboard-copy.zh-CN.js +40 -27
  50. package/dist/src/gateway/dashboard-copy.zh-CN.js.map +1 -1
  51. package/dist/src/gateway/dashboard-model.d.ts +4 -9
  52. package/dist/src/gateway/dashboard-model.js +159 -46
  53. package/dist/src/gateway/dashboard-model.js.map +1 -1
  54. package/dist/src/gateway/dashboard.js +27 -16
  55. package/dist/src/gateway/dashboard.js.map +1 -1
  56. package/dist/src/gateway/instance-lease.d.ts +2 -3
  57. package/dist/src/gateway/instance-lease.js +17 -140
  58. package/dist/src/gateway/instance-lease.js.map +1 -1
  59. package/dist/src/gateway/live-dashboard-app/app.js +62 -63
  60. package/dist/src/gateway/live-dashboard-command.d.ts +5 -1
  61. package/dist/src/gateway/live-dashboard-command.js +8 -6
  62. package/dist/src/gateway/live-dashboard-command.js.map +1 -1
  63. package/dist/src/gateway/live-dashboard-http.d.ts +0 -4
  64. package/dist/src/gateway/live-dashboard-http.js +20 -94
  65. package/dist/src/gateway/live-dashboard-http.js.map +1 -1
  66. package/dist/src/gateway/live-dashboard-protocol.d.ts +1 -5
  67. package/dist/src/gateway/live-dashboard-protocol.js +0 -42
  68. package/dist/src/gateway/live-dashboard-protocol.js.map +1 -1
  69. package/dist/src/gateway/live-dashboard-server.d.ts +2 -2
  70. package/dist/src/gateway/live-dashboard-server.js +18 -4
  71. package/dist/src/gateway/live-dashboard-server.js.map +1 -1
  72. package/dist/src/gateway/live-dashboard.d.ts +3 -6
  73. package/dist/src/gateway/live-dashboard.js +6 -42
  74. package/dist/src/gateway/live-dashboard.js.map +1 -1
  75. package/dist/src/gateway/progress-watch-machine.d.ts +6 -5
  76. package/dist/src/gateway/progress-watch-machine.js +6 -6
  77. package/dist/src/gateway/progress-watch-machine.js.map +1 -1
  78. package/dist/src/gateway/provenance-envelope.d.ts +1 -0
  79. package/dist/src/gateway/provenance-envelope.js +11 -4
  80. package/dist/src/gateway/provenance-envelope.js.map +1 -1
  81. package/dist/src/gateway/providers.d.ts +2 -21
  82. package/dist/src/gateway/providers.js +21 -261
  83. package/dist/src/gateway/providers.js.map +1 -1
  84. package/dist/src/gateway/server.js +0 -3
  85. package/dist/src/gateway/server.js.map +1 -1
  86. package/dist/src/gateway/service.d.ts +5 -15
  87. package/dist/src/gateway/service.js +101 -265
  88. package/dist/src/gateway/service.js.map +1 -1
  89. package/dist/src/gateway/store.d.ts +9 -21
  90. package/dist/src/gateway/store.js +360 -140
  91. package/dist/src/gateway/store.js.map +1 -1
  92. package/dist/src/gateway/types.d.ts +1 -6
  93. package/dist/src/gateway/types.js.map +1 -1
  94. package/docs/CONFIGURATION.md +102 -0
  95. package/docs/CONFIGURATION.zh-CN.md +72 -0
  96. package/docs/DASHBOARD.md +103 -0
  97. package/docs/DASHBOARD.zh-CN.md +47 -0
  98. package/docs/DELIVERY.md +84 -0
  99. package/docs/DELIVERY.zh-CN.md +53 -0
  100. package/docs/GATEWAY-ARCHITECTURE.md +249 -153
  101. package/package.json +8 -4
  102. package/skills/embassy-peer/SKILL.md +25 -10
  103. package/dist/src/gateway/claude-compatibility-scratch.d.ts +0 -18
  104. package/dist/src/gateway/claude-compatibility-scratch.js +0 -158
  105. package/dist/src/gateway/claude-compatibility-scratch.js.map +0 -1
  106. package/dist/src/gateway/live-dashboard-bootstrap.d.ts +0 -36
  107. package/dist/src/gateway/live-dashboard-bootstrap.js +0 -176
  108. package/dist/src/gateway/live-dashboard-bootstrap.js.map +0 -1
  109. package/docs/DESIGN.md +0 -134
@@ -1,7 +1,7 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import { spawn, } from "node:child_process";
3
3
  import { constants } from "node:fs";
4
- import { chmod, lstat, mkdir, open, readdir, realpath, unlink, } from "node:fs/promises";
4
+ import { chmod, lstat, mkdir, open, readdir, realpath, } from "node:fs/promises";
5
5
  import os from "node:os";
6
6
  import path from "node:path";
7
7
  import { BridgeError } from "../errors.js";
@@ -9,36 +9,12 @@ const HOST_STATE_DIRECTORY = path.join(".local", "state", "agent-embassy");
9
9
  const HOST_STATE_MARKER_FILE = ".agent-embassy-state";
10
10
  const HOST_STATE_MARKER_CONTENT = "agent-embassy-state-v1\n";
11
11
  const HOST_LOCK_FILE = ".gateway-host.lock";
12
- const LEGACY_STATE_DIRECTORY = path.join(".local", "state", "claude-agent-bridge", "gateway");
13
- const LEGACY_MARKER_FILE = ".claude-codex-gateway-state";
14
- const LEGACY_MARKER_CONTENT = "claude-codex-local-gateway-state-v1\n";
15
- const LEGACY_LOCK_FILE = ".gateway-controller.lock";
16
12
  const MAX_MARKER_BYTES = 128;
17
13
  const MAX_LOCK_BYTES = 4 * 1024;
18
14
  const LOCKF_PATH = "/usr/bin/lockf";
19
15
  const CAT_PATH = "/bin/cat";
20
16
  const HOST_LEASE_READY_TIMEOUT_MS = 5_000;
21
17
  const HOST_LEASE_EXIT_TIMEOUT_MS = 5_000;
22
- function isObject(value) {
23
- return value !== null && typeof value === "object" && !Array.isArray(value);
24
- }
25
- function isPositiveInteger(value) {
26
- return Number.isSafeInteger(value) && value > 0;
27
- }
28
- function isLockRecord(value) {
29
- if (!isObject(value))
30
- return false;
31
- const keys = Object.keys(value);
32
- return (keys.length === 4 &&
33
- keys.every((key) => ["schemaVersion", "pid", "hostname", "token"].includes(key)) &&
34
- value.schemaVersion === 1 &&
35
- isPositiveInteger(value.pid) &&
36
- typeof value.hostname === "string" &&
37
- value.hostname.length > 0 &&
38
- value.hostname.length <= 255 &&
39
- typeof value.token === "string" &&
40
- /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value.token));
41
- }
42
18
  function assertPrivateOwned(uid, mode, description) {
43
19
  if (typeof process.getuid === "function" && uid !== process.getuid()) {
44
20
  throw new BridgeError("GATEWAY_INSTANCE_IN_USE", `${description} is not owned by the current process user.`, true);
@@ -312,72 +288,6 @@ async function acquireHostAdvisoryLease(directory, spawnLeaseHelper, exitTimeout
312
288
  },
313
289
  };
314
290
  }
315
- async function acquireProcessLease(directory, lockFileName) {
316
- const lockPath = path.join(directory, lockFileName);
317
- const ownedToken = randomUUID();
318
- let handle;
319
- try {
320
- handle = await open(lockPath, constants.O_CREAT |
321
- constants.O_EXCL |
322
- constants.O_RDWR |
323
- (constants.O_NOFOLLOW ?? 0), 0o600);
324
- }
325
- catch (error) {
326
- if (error instanceof Error &&
327
- "code" in error &&
328
- error.code === "EEXIST") {
329
- // The legacy controller did not participate in Embassy's kernel-held
330
- // host lease. Preserve any pre-existing legacy lock—live, stale, or
331
- // unverifiable—rather than path-reclaiming across that protocol boundary.
332
- await readPrivateFile(lockPath, MAX_LOCK_BYTES).catch(() => undefined);
333
- throw new BridgeError("GATEWAY_INSTANCE_IN_USE", "A legacy or unverifiable gateway lock already exists.", true);
334
- }
335
- throw error;
336
- }
337
- try {
338
- const record = {
339
- schemaVersion: 1,
340
- pid: process.pid,
341
- hostname: os.hostname(),
342
- token: ownedToken,
343
- };
344
- await handle.writeFile(`${JSON.stringify(record)}\n`, "utf8");
345
- await handle.sync();
346
- }
347
- catch (error) {
348
- await handle.close().catch(() => undefined);
349
- await unlink(lockPath).catch(() => undefined);
350
- throw error;
351
- }
352
- let closed = false;
353
- return {
354
- close: async () => {
355
- if (closed)
356
- return;
357
- closed = true;
358
- try {
359
- await handle.close();
360
- }
361
- catch {
362
- throw new BridgeError("GATEWAY_CLEANUP_FAILED", "Embassy could not confirm legacy instance-lease cleanup.");
363
- }
364
- try {
365
- const current = JSON.parse(await readPrivateFile(lockPath, MAX_LOCK_BYTES));
366
- if (isLockRecord(current) && current.token === ownedToken) {
367
- await unlink(lockPath);
368
- }
369
- }
370
- catch (error) {
371
- if (error instanceof Error &&
372
- "code" in error &&
373
- error.code === "ENOENT") {
374
- return;
375
- }
376
- throw new BridgeError("GATEWAY_CLEANUP_FAILED", "Embassy could not confirm legacy instance-lease cleanup.");
377
- }
378
- },
379
- };
380
- }
381
291
  async function ensureHostStateMarker(directory) {
382
292
  const markerPath = path.join(directory, HOST_STATE_MARKER_FILE);
383
293
  try {
@@ -476,58 +386,26 @@ async function prepareHostLeaseDirectory(loginHome) {
476
386
  await ensureHostStateMarker(current);
477
387
  return current;
478
388
  }
479
- async function recognizedLegacyRoot(loginHome) {
480
- const directory = path.join(loginHome, LEGACY_STATE_DIRECTORY);
481
- try {
482
- const info = await lstat(directory);
483
- if (info.isSymbolicLink() || !info.isDirectory())
484
- return undefined;
485
- assertPrivateOwned(info.uid, info.mode, "The legacy gateway root");
486
- if ((await realpath(directory)) !== directory)
487
- return undefined;
488
- const marker = await readPrivateFile(path.join(directory, LEGACY_MARKER_FILE), MAX_MARKER_BYTES);
489
- return marker === LEGACY_MARKER_CONTENT ? directory : undefined;
490
- }
491
- catch {
492
- // An absent, unsafe, or unrecognized legacy tree is never mutated.
493
- return undefined;
494
- }
495
- }
496
389
  /**
497
390
  * Acquire the one per-login-user Embassy controller lease. The fixed lease is
498
- * deliberately independent of EMBASSY_STATE_DIR. For one release, a genuine
499
- * legacy default state root is also leased so a still-running pre-rename
500
- * gateway cannot advertise a second Codex peer.
391
+ * deliberately independent of EMBASSY_STATE_DIR, so a second controller cannot
392
+ * evade it by pointing at another state root.
501
393
  */
502
394
  export async function acquireGatewayInstanceLease(suppliedLoginHome, dependencies = {}) {
503
395
  const loginHome = validateLoginHome(suppliedLoginHome);
504
396
  const hostDirectory = await prepareHostLeaseDirectory(loginHome);
505
- const leases = [];
506
- let hostLease;
507
- try {
508
- // A kernel-held macOS lease makes state-directory overrides irrelevant and
509
- // disappears automatically if the gateway crashes. The PID/token record
510
- // is metadata for exact cleanup; it is never used for path-only reclaim.
511
- const spawnLeaseHelper = dependencies.spawnLeaseHelper ??
512
- ((command, args, options) => spawn(command, args, options));
513
- const exitTimeoutMs = dependencies.hostLeaseExitTimeoutMs ?? HOST_LEASE_EXIT_TIMEOUT_MS;
514
- if (!Number.isSafeInteger(exitTimeoutMs) ||
515
- exitTimeoutMs < 10 ||
516
- exitTimeoutMs > HOST_LEASE_EXIT_TIMEOUT_MS) {
517
- throw new BridgeError("GATEWAY_INSTANCE_IN_USE", "The Embassy host-lease cleanup bound is invalid.", true);
518
- }
519
- hostLease = await acquireHostAdvisoryLease(hostDirectory, spawnLeaseHelper, exitTimeoutMs);
520
- leases.push(hostLease);
521
- const legacyDirectory = await recognizedLegacyRoot(loginHome);
522
- if (legacyDirectory !== undefined) {
523
- leases.push(await acquireProcessLease(legacyDirectory, LEGACY_LOCK_FILE));
524
- }
525
- }
526
- catch (error) {
527
- for (const lease of leases.reverse())
528
- await lease.close();
529
- throw error;
397
+ // A kernel-held macOS lease makes state-directory overrides irrelevant and
398
+ // disappears automatically if the gateway crashes. The PID/token record is
399
+ // metadata for exact cleanup; it is never used for path-only reclaim.
400
+ const spawnLeaseHelper = dependencies.spawnLeaseHelper ??
401
+ ((command, args, options) => spawn(command, args, options));
402
+ const exitTimeoutMs = dependencies.hostLeaseExitTimeoutMs ?? HOST_LEASE_EXIT_TIMEOUT_MS;
403
+ if (!Number.isSafeInteger(exitTimeoutMs) ||
404
+ exitTimeoutMs < 10 ||
405
+ exitTimeoutMs > HOST_LEASE_EXIT_TIMEOUT_MS) {
406
+ throw new BridgeError("GATEWAY_INSTANCE_IN_USE", "The Embassy host-lease cleanup bound is invalid.", true);
530
407
  }
408
+ const hostLease = await acquireHostAdvisoryLease(hostDirectory, spawnLeaseHelper, exitTimeoutMs);
531
409
  let closed = false;
532
410
  return {
533
411
  lost: hostLease.lost,
@@ -536,11 +414,10 @@ export async function acquireGatewayInstanceLease(suppliedLoginHome, dependencie
536
414
  if (closed)
537
415
  return;
538
416
  closed = true;
539
- const failures = [];
540
- for (const lease of leases.reverse()) {
541
- await lease.close().catch((error) => failures.push(error));
417
+ try {
418
+ await hostLease.close();
542
419
  }
543
- if (failures.length > 0) {
420
+ catch {
544
421
  throw new BridgeError("GATEWAY_CLEANUP_FAILED", "Embassy could not confirm exact instance-lease cleanup.");
545
422
  }
546
423
  },
@@ -1 +1 @@
1
- {"version":3,"file":"instance-lease.js","sourceRoot":"","sources":["../../../src/gateway/instance-lease.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instance-lease.js","sourceRoot":"","sources":["../../../src/gateway/instance-lease.ts"],"names":[],"mappings":"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"}
@@ -162,6 +162,7 @@ var Embassy;
162
162
  connecting: "progress",
163
163
  paused: "inert",
164
164
  unavailable: "warning",
165
+ capacity: "warning",
165
166
  disconnected: "warning",
166
167
  stopped: "warning",
167
168
  };
@@ -507,11 +508,14 @@ var Embassy;
507
508
  const GUIDANCE_COPY_KEYS = {
508
509
  reobserve_claude: "reobserveClaude",
509
510
  reobserve_codex: "reobserveCodex",
511
+ codex_reactivation_required: "codexReactivationRequired",
512
+ consent_edge_unavailable: "consentEdgeUnavailable",
510
513
  claude_not_observed: "claudeNotObserved",
511
514
  codex_stale: "codexStale",
512
515
  connector_offline: "connectorOffline",
513
516
  route_stale: "routeStale",
514
517
  queue_stalled: "queueStalled",
518
+ recipient_waiting_input: "recipientWaitingInput",
515
519
  unconfirmed: "unconfirmed",
516
520
  degraded: "degraded",
517
521
  codex_succession_busy: "codexSuccessionBusy",
@@ -530,7 +534,10 @@ var Embassy;
530
534
  return `embassy select-claude --alias ${item.alias ?? "<alias>"}`;
531
535
  case "reobserve_codex":
532
536
  case "codex_stale":
537
+ case "codex_reactivation_required":
533
538
  return `embassy register-codex --alias ${item.alias ?? "<alias>"}`;
539
+ case "consent_edge_unavailable":
540
+ return "embassy refresh-dashboard";
534
541
  case "codex_succession_busy":
535
542
  case "codex_succession_recovery":
536
543
  return `embassy register-codex --alias <new> --succeeds ${item.alias ?? "<old>"}`;
@@ -569,6 +576,7 @@ var Embassy;
569
576
  }
570
577
  Embassy.extractSuccessions = extractSuccessions;
571
578
  function overviewProps(model, nowMs) {
579
+ const nonReadyPairCount = model.graph.pairCount - model.graph.readyPairCount;
572
580
  return {
573
581
  generatedAt: model.generatedAt,
574
582
  inboundMode: model.inboundMode,
@@ -589,6 +597,11 @@ var Embassy;
589
597
  queueClaudeToCodex: queueSplit(model, "codex", nowMs),
590
598
  queueCodexToClaude: queueSplit(model, "claude", nowMs),
591
599
  graph: model.graph,
600
+ degradedPairCopyKey: nonReadyPairCount <= 0
601
+ ? undefined
602
+ : nonReadyPairCount === 1 && !model.graph.pairCountIsLowerBound
603
+ ? "app.overview.degradedEdge"
604
+ : "app.overview.degradedEdges",
592
605
  attention: attentionViews(model),
593
606
  attentionOmitted: model.omissions.attentionItems,
594
607
  pulse: pulse(model),
@@ -702,11 +715,9 @@ var Embassy;
702
715
  const MAX_AUTO_RECONNECT_ATTEMPTS = 3;
703
716
  const MAX_STREAM_BUFFER_LENGTH = 1_048_576;
704
717
  function createProtocol(options) {
705
- const base = location.pathname.endsWith("/bootstrap")
706
- ? location.pathname.slice(0, -10)
707
- : location.pathname.endsWith("/")
708
- ? location.pathname.slice(0, -1)
709
- : location.pathname;
718
+ const base = location.pathname.endsWith("/")
719
+ ? location.pathname.slice(0, -1)
720
+ : location.pathname;
710
721
  const api = (name) => base + "/" + name;
711
722
  let connectionState = "connecting";
712
723
  let controller;
@@ -718,7 +729,7 @@ var Embassy;
718
729
  function apiFetch(name, fetchOptions = {}) {
719
730
  const init = {
720
731
  method: "POST",
721
- credentials: "same-origin",
732
+ credentials: "omit",
722
733
  cache: "no-store",
723
734
  headers: { "X-Embassy-Request": "1", ...(fetchOptions.headers ?? {}) },
724
735
  };
@@ -797,20 +808,6 @@ var Embassy;
797
808
  }
798
809
  }
799
810
  }
800
- async function exchangeCapability() {
801
- const capability = location.hash.slice(1);
802
- if (!capability) {
803
- return;
804
- }
805
- history.replaceState(null, "", location.pathname);
806
- const response = await apiFetch("session", {
807
- headers: { "Content-Type": "text/plain;charset=UTF-8" },
808
- body: capability,
809
- });
810
- if (!response.ok) {
811
- throw new Error("session");
812
- }
813
- }
814
811
  function consumeSseBlock(block) {
815
812
  let event = "message";
816
813
  const data = [];
@@ -843,6 +840,10 @@ var Embassy;
843
840
  setConnectionState("connecting");
844
841
  try {
845
842
  const response = await apiFetch("stream", { signal: current.signal });
843
+ if (response.status === 429) {
844
+ setConnectionState("capacity");
845
+ return;
846
+ }
846
847
  if (!response.ok || !response.body) {
847
848
  throw new Error("stream");
848
849
  }
@@ -902,7 +903,7 @@ var Embassy;
902
903
  return (Object.keys(record).length === 2 &&
903
904
  typeof record.ok === "boolean" &&
904
905
  typeof record.code === "string" &&
905
- /^(?:ok|not_found|conflict|route_mismatch|busy|unavailable|rejected|rate_limited)$/u.test(record.code) &&
906
+ /^(?:ok|not_found|conflict|watch_owner_conflict|route_mismatch|busy|unavailable|rejected|rate_limited)$/u.test(record.code) &&
906
907
  ((record.ok && record.code === "ok") ||
907
908
  (!record.ok && record.code !== "ok")));
908
909
  }
@@ -926,13 +927,6 @@ var Embassy;
926
927
  return result;
927
928
  }
928
929
  async function start() {
929
- try {
930
- await exchangeCapability();
931
- }
932
- catch {
933
- setConnectionState("disconnected");
934
- return;
935
- }
936
930
  await connect();
937
931
  }
938
932
  return {
@@ -1162,7 +1156,9 @@ var Embassy;
1162
1156
  React.createElement("h3", { className: "attention-item__title" }, t(`guidance.${guidanceKey}.title`)),
1163
1157
  item.timestamp === undefined ? null : (React.createElement(Embassy.TimeAgo, { iso: item.timestamp }))),
1164
1158
  React.createElement("p", { className: "attention-item__body" }, t(`guidance.${guidanceKey}.body`)),
1165
- React.createElement("p", { className: "attention-item__body" }, t(`guidance.${guidanceKey}.action`)),
1159
+ React.createElement("p", { className: "attention-item__body" }, t(`guidance.${guidanceKey}.action`, {
1160
+ alias: item.alias ?? "<alias>",
1161
+ })),
1166
1162
  scope === "" ? null : (React.createElement("div", { className: "attention-item__scope" }, `${t("attention.scope")}: ${scope}`)),
1167
1163
  React.createElement("div", { className: "attention-item__action" },
1168
1164
  React.createElement(Embassy.CopyCmd, { cmd: command })),
@@ -1187,14 +1183,18 @@ var Embassy;
1187
1183
  const queueOut = data.queueClaudeToCodex;
1188
1184
  const queueIn = data.queueCodexToClaude;
1189
1185
  const openInbound = data.inboundMode === "open";
1190
- const showEdges = data.graph.readyPairCount > 0 || queueOut.depth > 0 || queueIn.depth > 0;
1186
+ const hasPair = data.graph.pairCount > 0 || data.graph.pairCountIsLowerBound;
1187
+ const showEdges = hasPair || queueOut.depth > 0 || queueIn.depth > 0;
1191
1188
  const nextActionLine = (who, action) => action === "none"
1192
1189
  ? null
1193
1190
  : `${t("next.label")} · ${who}: ${t(NEXT_ACTION_COPY_KEYS[action])}`;
1194
1191
  const boardNotes = [
1195
- !openInbound && showEdges && data.graph.readyPairCount === 0
1192
+ !openInbound && !hasPair && showEdges
1196
1193
  ? `${t("app.overview.noPair.title")} — ${t("app.overview.noPair.body")}`
1197
1194
  : null,
1195
+ data.degradedPairCopyKey === undefined
1196
+ ? null
1197
+ : t(data.degradedPairCopyKey),
1198
1198
  nextActionLine(t("provider.claude"), data.exchange.claude.nextAction),
1199
1199
  nextActionLine(t("provider.codex"), data.exchange.codex.nextAction),
1200
1200
  ].filter((line) => line !== null);
@@ -1227,7 +1227,7 @@ var Embassy;
1227
1227
  : "inbound.paired.badge")),
1228
1228
  React.createElement("p", null, t(openInbound
1229
1229
  ? "inbound.open.body"
1230
- : data.graph.readyPairCount > 0
1230
+ : hasPair
1231
1231
  ? "inbound.paired.body"
1232
1232
  : "inbound.noPair.body"))),
1233
1233
  React.createElement("div", { className: "exchange-board" },
@@ -1459,9 +1459,12 @@ var Embassy;
1459
1459
  nudge: "watches.event.nudge",
1460
1460
  worker_reported_complete: "watches.event.workerReportedComplete",
1461
1461
  capability_degraded: "watches.event.capabilityDegraded",
1462
+ conversation_rebound: "watches.event.conversationRebound",
1463
+ replaced: "watches.event.replaced",
1462
1464
  done: "watches.event.done",
1463
1465
  unresponsive: "watches.event.unresponsive",
1464
1466
  endpoint_retired: "watches.event.endpointRetired",
1467
+ pair_removed: "watches.event.pairRemoved",
1465
1468
  disabled: "watches.event.disabled",
1466
1469
  };
1467
1470
  function ProgressWatchRegister(props) {
@@ -1502,8 +1505,7 @@ var Embassy;
1502
1505
  React.createElement("dd", null, fmtCount(locale, watch.nudgeCount))),
1503
1506
  React.createElement("div", null,
1504
1507
  React.createElement("dt", null, t("watches.column.capability")),
1505
- React.createElement("dd", null, t(watch.capability === "route" ? "watches.capability.route" : "watches.capability.conversation")))),
1506
- watch.workerReportedComplete ? (React.createElement("p", { className: "footnote" }, t("watches.workerComplete"))) : null))))),
1508
+ React.createElement("dd", null, t(watch.capability === "route" ? "watches.capability.route" : "watches.capability.conversation"))))))))),
1507
1509
  props.events.length === 0 ? null : (React.createElement("details", { className: "watch-history" },
1508
1510
  React.createElement("summary", null, t("watches.history.title")),
1509
1511
  React.createElement("ol", null, props.events.map((event) => (React.createElement("li", { key: event.sequence },
@@ -2027,12 +2029,13 @@ var Embassy;
2027
2029
  const [openPeer, setOpenPeer] = React.useState(undefined);
2028
2030
  const [openRoute, setOpenRoute] = React.useState(undefined);
2029
2031
  const edges = topologyEdges(data);
2032
+ const hasPair = data.graph.pairCount > 0 || data.graph.pairCountIsLowerBound;
2030
2033
  const highlightAt = (side, index) => chipHighlight(focus, edges, side, index);
2031
2034
  const claudeItems = data.peers.map((peer, index) => ({
2032
2035
  key: `${rowIdentity(peer.alias, peer.host)}|${index}`,
2033
2036
  alias: peer.alias,
2034
- candidate: !edges.some((edge) => edge.claudeAlias === peer.alias),
2035
- srLabel: edges.some((edge) => edge.claudeAlias === peer.alias)
2037
+ candidate: !data.pairs.some((pair) => pair.claudeAlias === peer.alias),
2038
+ srLabel: data.pairs.some((pair) => pair.claudeAlias === peer.alias)
2036
2039
  ? t("status.selected")
2037
2040
  : peer.selectable
2038
2041
  ? t("status.available")
@@ -2041,7 +2044,7 @@ var Embassy;
2041
2044
  const codexItems = data.codexRoutes.map((view, index) => ({
2042
2045
  key: `${rowIdentity(view.route.alias, view.route.host)}|${index}`,
2043
2046
  alias: view.route.alias,
2044
- candidate: !edges.some((edge) => edge.codexAlias === view.route.alias),
2047
+ candidate: !data.pairs.some((pair) => pair.codexAlias === view.route.alias),
2045
2048
  srLabel: t(`route.${Embassy.camelCaseToken(view.route.state)}`),
2046
2049
  }));
2047
2050
  return (React.createElement("div", { className: "tab-panel" },
@@ -2053,9 +2056,9 @@ var Embassy;
2053
2056
  : "inbound.paired.badge")),
2054
2057
  React.createElement("p", null, t(openInbound
2055
2058
  ? "inbound.open.body"
2056
- : edges.length === 0
2057
- ? "inbound.noPair.body"
2058
- : "inbound.paired.body"))),
2059
+ : hasPair
2060
+ ? "inbound.paired.body"
2061
+ : "inbound.noPair.body"))),
2059
2062
  React.createElement("div", { className: "topology" },
2060
2063
  React.createElement("div", { className: "topology__heads" },
2061
2064
  React.createElement(Embassy.MonoLabel, { className: "topology__head--claude" }, t("provider.claude")),
@@ -2064,15 +2067,22 @@ var Embassy;
2064
2067
  React.createElement(TopologyColumn, { side: "claude", items: claudeItems, listLabel: t("app.routes.candidates"), emptyText: t("app.routes.noPeers"), highlightAt: highlightAt, onFocusChange: setFocus }),
2065
2068
  React.createElement(TopologyEdgeSvg, { rows: Math.max(claudeItems.length, codexItems.length), edges: edges, focus: focus, focusSide: focus === undefined ? undefined : focus.side }),
2066
2069
  React.createElement(TopologyColumn, { side: "codex", items: codexItems, listLabel: t("app.routes.codexRoutes"), emptyText: t("app.routes.noCodex"), highlightAt: highlightAt, onFocusChange: setFocus })),
2067
- edges.length === 0 ? (React.createElement("p", { className: "topology__empty" }, t(openInbound
2070
+ !hasPair ? (React.createElement("p", { className: "topology__empty" }, t(openInbound
2068
2071
  ? "inbound.open.body"
2069
- : "app.routes.noPairInline"))) : (React.createElement("ul", { className: "topology__edge-list", "aria-label": t("app.routes.pairs") }, edges.map((edge) => (React.createElement("li", { key: `${edge.claudeAlias}\0${edge.codexAlias}` },
2072
+ : "app.routes.noPairInline"))) : (React.createElement("ul", { className: "topology__edge-list", "aria-label": t("app.routes.pairs") }, data.pairs.map((pair) => (React.createElement("li", { key: `${pair.claudeAlias}\0${pair.codexAlias}` },
2070
2073
  t("app.routes.pairDescription", {
2071
- claude: edge.claudeAlias,
2072
- codex: edge.codexAlias,
2074
+ claude: pair.claudeAlias,
2075
+ codex: pair.codexAlias,
2073
2076
  }),
2074
2077
  " ",
2075
- React.createElement(Embassy.StateChip, { domain: "route", state: edge.state === "ready" ? "idle" : "stale", small: true })))))),
2078
+ React.createElement(Embassy.StateChip, { domain: "route", state: pair.state === "ready" ? "idle" : "stale", label: pair.state === "ready"
2079
+ ? t("status.ready")
2080
+ : t(pair.state === "degraded"
2081
+ ? "app.routes.pairState.degraded"
2082
+ : "app.routes.pairState.unavailable"), small: true }),
2083
+ pair.state === "ready" ? null : (React.createElement("span", { className: "text-body-muted" }, t(pair.state === "degraded"
2084
+ ? "app.routes.pairDegradedReason"
2085
+ : "app.routes.pairUnavailableReason")))))))),
2076
2086
  data.pairsOmitted > 0 ? (React.createElement("p", { className: "topology__empty" }, t("app.omitted.pairs", { count: data.pairsOmitted }))) : null),
2077
2087
  React.createElement("section", { className: "section section__sub", "aria-label": t("live.action.sectionTitle") },
2078
2088
  React.createElement("div", { className: "row-baseline section-label" },
@@ -2389,12 +2399,10 @@ var Embassy;
2389
2399
  React.createElement("th", { scope: "col" }, t("diagnostics.version")),
2390
2400
  React.createElement("th", { scope: "col" }, t("diagnostics.tier")),
2391
2401
  React.createElement("th", { scope: "col" }, t("diagnostics.checkedAt")),
2392
- React.createElement("th", { scope: "col" }, t("diagnostics.certification")),
2393
- React.createElement("th", { scope: "col" }, t("diagnostics.certifiedAt")),
2394
- React.createElement("th", { scope: "col" }, t("diagnostics.failedProbe")),
2402
+ React.createElement("th", { scope: "col" }, t("diagnostics.failure")),
2395
2403
  React.createElement("th", { scope: "col" }, t("column.issue")))),
2396
2404
  React.createElement("tbody", null, props.checks.length === 0 ? (React.createElement("tr", null,
2397
- React.createElement("td", { colSpan: 8 }, t("diagnostics.compatibilityChecks.empty")))) : (props.checks.map((check) => (React.createElement("tr", { key: check.surface },
2405
+ React.createElement("td", { colSpan: 6 }, t("diagnostics.compatibilityChecks.empty")))) : (props.checks.map((check) => (React.createElement("tr", { key: check.surface },
2398
2406
  React.createElement("th", { scope: "row" }, check.surface === "claude"
2399
2407
  ? t("provider.claude")
2400
2408
  : t("provider.codex")),
@@ -2402,16 +2410,8 @@ var Embassy;
2402
2410
  React.createElement("td", null, t(`compatibilityTier.${check.tier}`)),
2403
2411
  React.createElement("td", null,
2404
2412
  React.createElement(Embassy.TimeAgo, { iso: check.checkedAt })),
2405
- React.createElement("td", { className: "cell-mono" }, check.certificationOutcome === undefined
2406
- ? DIAGNOSTICS_ABSENT_FIELD
2407
- : `${check.certificationOutcome} / ${check.certificationDepth}`),
2408
- React.createElement("td", null, check.certifiedAt === undefined
2409
- ? DIAGNOSTICS_ABSENT_FIELD
2410
- : React.createElement(Embassy.TimeAgo, { iso: check.certifiedAt })),
2411
- React.createElement("td", { className: "cell-mono" }, check.failedProbe ?? DIAGNOSTICS_ABSENT_FIELD),
2412
- React.createElement("td", { className: "cell-mono" }, check.certificationSafeErrorCode ??
2413
- check.safeErrorCode ??
2414
- DIAGNOSTICS_ABSENT_FIELD)))))))));
2413
+ React.createElement("td", { className: "cell-mono" }, check.failure ?? DIAGNOSTICS_ABSENT_FIELD),
2414
+ React.createElement("td", { className: "cell-mono" }, check.safeErrorCode ?? DIAGNOSTICS_ABSENT_FIELD)))))))));
2415
2415
  }
2416
2416
  function DiagnosticsCounterTable(props) {
2417
2417
  return (React.createElement("div", { className: "table-wrap counters-list" },
@@ -2675,11 +2675,10 @@ var Embassy;
2675
2675
  React.createElement(DiagnosticsConnectorTable, { connectors: data.connectors }),
2676
2676
  React.createElement("p", { className: "footnote" }, t("app.diag.versions.rangeAbsent")))),
2677
2677
  React.createElement("div", { className: "grid-2" },
2678
- React.createElement("section", { className: "card", "aria-labelledby": "compatibility-attestation-title" },
2678
+ React.createElement("section", { className: "card", "aria-labelledby": "provider-compatibility-title" },
2679
2679
  React.createElement("div", { className: "card__head" },
2680
- React.createElement("h3", { className: "card__title", id: "compatibility-attestation-title" }, t("app.diag.attestation.title"))),
2681
- React.createElement(DiagnosticsCompatibilityTable, { checks: data.compatibilityChecks }),
2682
- React.createElement(Embassy.CopyCmd, { cmd: "embassy compat-check" })),
2680
+ React.createElement("h3", { className: "card__title", id: "provider-compatibility-title" }, t("app.diag.providerCompatibility.title"))),
2681
+ React.createElement(DiagnosticsCompatibilityTable, { checks: data.compatibilityChecks })),
2683
2682
  React.createElement(Embassy.AbsentFeature, { title: t("app.diag.lease.title"), body: t("app.diag.lease.absent"), cmd: "embassy status" })),
2684
2683
  React.createElement("section", { className: "section", "aria-labelledby": limitsHeadingId },
2685
2684
  React.createElement("h2", { className: "mono-label section-label", id: limitsHeadingId }, t("app.diag.limits")),
@@ -7,11 +7,13 @@ import type { LiveDashboardObserver } from "./live-dashboard-stream.js";
7
7
  declare const OPEN_EXECUTABLE = "/usr/bin/open";
8
8
  declare const OPEN_TIMEOUT_MS = 10000;
9
9
  declare const OPEN_MAX_OUTPUT_BYTES: number;
10
+ export declare const DEFAULT_LIVE_DASHBOARD_PORT = 41961;
10
11
  type GatewaySignal = "SIGINT" | "SIGTERM";
11
12
  export type LiveDashboardReadyResult = Readonly<{
12
13
  status: "ready";
13
14
  mode: "live";
14
15
  locale: DashboardLocale;
16
+ url: string;
15
17
  }>;
16
18
  export type LiveDashboardCommandOutcome = Readonly<{
17
19
  status: "cancelled";
@@ -19,6 +21,8 @@ export type LiveDashboardCommandOutcome = Readonly<{
19
21
  export type LiveDashboardCommandOptions = Readonly<{
20
22
  env?: NodeJS.ProcessEnv;
21
23
  locale: DashboardLocale;
24
+ /** Explicit CLI-selected port; omitted direct callers receive the default. */
25
+ port?: number;
22
26
  signal?: AbortSignal;
23
27
  onReady: (result: LiveDashboardReadyResult) => void | Promise<void>;
24
28
  loadConfig?: (env: NodeJS.ProcessEnv) => GatewayConfig;
@@ -47,7 +51,7 @@ export declare function createGatewayLiveDashboardActions(socketPath: string, se
47
51
  * Run the opt-in live dashboard in the foreground until interrupted.
48
52
  *
49
53
  * The controller remains the only source of state. This command exposes one
50
- * observer plus three closed, authenticated actions; it has no provider API
54
+ * observer plus four closed actions; it has no provider API
51
55
  * or generic control-plane escape hatch.
52
56
  */
53
57
  export declare function runLiveDashboardCommand(options: LiveDashboardCommandOptions, dependencies?: LiveDashboardCommandDependencies): Promise<LiveDashboardCommandOutcome>;