agent-embassy 1.9.5 → 2.0.1

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 (69) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/CONTRIBUTING.md +1 -1
  3. package/README.md +28 -21
  4. package/README.zh-CN.md +26 -20
  5. package/dist/src/gateway/claude-helper-protocol.d.ts +1 -1
  6. package/dist/src/gateway/claude-helper-protocol.js +3 -2
  7. package/dist/src/gateway/claude-helper-protocol.js.map +1 -1
  8. package/dist/src/gateway/claude-helper-supervisor.d.ts +1 -1
  9. package/dist/src/gateway/claude-helper-supervisor.js +1 -1
  10. package/dist/src/gateway/claude-helper-supervisor.js.map +1 -1
  11. package/dist/src/gateway/claude-helper.js +12 -4
  12. package/dist/src/gateway/claude-helper.js.map +1 -1
  13. package/dist/src/gateway/cli-copy.d.ts +1 -1
  14. package/dist/src/gateway/cli-copy.en.d.ts +9 -4
  15. package/dist/src/gateway/cli-copy.en.js +10 -6
  16. package/dist/src/gateway/cli-copy.en.js.map +1 -1
  17. package/dist/src/gateway/cli-copy.js +5 -0
  18. package/dist/src/gateway/cli-copy.js.map +1 -1
  19. package/dist/src/gateway/cli-copy.zh-CN.d.ts +9 -4
  20. package/dist/src/gateway/cli-copy.zh-CN.js +10 -6
  21. package/dist/src/gateway/cli-copy.zh-CN.js.map +1 -1
  22. package/dist/src/gateway/cli.d.ts +3 -9
  23. package/dist/src/gateway/cli.js +56 -63
  24. package/dist/src/gateway/cli.js.map +1 -1
  25. package/dist/src/gateway/codex-local-transport.d.ts +1 -1
  26. package/dist/src/gateway/codex-local-transport.js +2 -2
  27. package/dist/src/gateway/codex-local-transport.js.map +1 -1
  28. package/dist/src/gateway/config.d.ts +4 -3
  29. package/dist/src/gateway/config.js +5 -11
  30. package/dist/src/gateway/config.js.map +1 -1
  31. package/dist/src/gateway/control.d.ts +20 -41
  32. package/dist/src/gateway/control.js +54 -96
  33. package/dist/src/gateway/control.js.map +1 -1
  34. package/dist/src/gateway/dashboard-copy.en.js +2 -2
  35. package/dist/src/gateway/dashboard-copy.en.js.map +1 -1
  36. package/dist/src/gateway/dashboard-copy.zh-CN.js +2 -2
  37. package/dist/src/gateway/dashboard-copy.zh-CN.js.map +1 -1
  38. package/dist/src/gateway/federation-nodes.d.ts +1 -2
  39. package/dist/src/gateway/federation-nodes.js +29 -14
  40. package/dist/src/gateway/federation-nodes.js.map +1 -1
  41. package/dist/src/gateway/live-dashboard-app/app.js +2 -2
  42. package/dist/src/gateway/live-dashboard-command.d.ts +3 -1
  43. package/dist/src/gateway/live-dashboard-command.js +1 -1
  44. package/dist/src/gateway/live-dashboard-command.js.map +1 -1
  45. package/dist/src/gateway/providers.d.ts +3 -3
  46. package/dist/src/gateway/providers.js +7 -10
  47. package/dist/src/gateway/providers.js.map +1 -1
  48. package/dist/src/gateway/server.d.ts +1 -2
  49. package/dist/src/gateway/server.js +6 -13
  50. package/dist/src/gateway/server.js.map +1 -1
  51. package/dist/src/gateway/service.d.ts +3 -1
  52. package/dist/src/gateway/service.js +89 -35
  53. package/dist/src/gateway/service.js.map +1 -1
  54. package/dist/src/gateway/store.d.ts +1 -1
  55. package/dist/src/gateway/store.js +27 -26
  56. package/dist/src/gateway/store.js.map +1 -1
  57. package/dist/src/gateway/types.d.ts +4 -4
  58. package/docs/CONFIGURATION.md +27 -21
  59. package/docs/CONFIGURATION.zh-CN.md +19 -15
  60. package/docs/DASHBOARD.md +1 -1
  61. package/docs/DASHBOARD.zh-CN.md +1 -1
  62. package/docs/DELIVERY.md +2 -2
  63. package/docs/DELIVERY.zh-CN.md +2 -2
  64. package/docs/GATEWAY-ARCHITECTURE.md +48 -58
  65. package/package.json +1 -1
  66. package/skills/embassy-peer/SKILL.md +20 -15
  67. package/dist/src/gateway/state-v2-to-v3.d.ts +0 -24
  68. package/dist/src/gateway/state-v2-to-v3.js +0 -1034
  69. package/dist/src/gateway/state-v2-to-v3.js.map +0 -1
@@ -1,11 +1,12 @@
1
1
  import { userInfo } from "node:os";
2
+ import path from "node:path";
2
3
  import { BridgeError } from "../errors.js";
3
4
  import { createAcpGatewayProvider } from "./acp-provider.js";
4
5
  import { attestClaudePeerRuntime } from "./claude-runtime.js";
5
6
  import { createLocalCodexTransportFactory, resolveManagedLocalCodexInstallation, LocalCodexTransportError, managedCodexControlSocketPath } from "./codex-local-transport.js";
6
7
  import { createStatelessCodexOperationTransport } from "./codex-stateless-transport.js";
7
8
  import { createSystemCodexDoctorInspector, diagnoseCodexAttachment, diagnoseMissingManagedCodexLayout } from "./codex-doctor.js";
8
- import { loadGatewayConfig } from "./config.js";
9
+ import { defaultGatewayStateDir, loadGatewayConfig } from "./config.js";
9
10
  import { DASHBOARD_FILE_NAME } from "./dashboard.js";
10
11
  import { loadGatewayNodeInventory } from "./federation-nodes.js";
11
12
  import { resolveDeepSeekAcpLaunch } from "./deepseek-detect.js";
@@ -15,7 +16,6 @@ import { createLocalClaudeGatewayProvider, createLocalCodexGatewayProvider } fro
15
16
  import { GatewayService } from "./service.js";
16
17
  import { GatewayStore } from "./store.js";
17
18
  import { gatewayInboundModes } from "./types.js";
18
- export const GATEWAY_LOCAL_HOST_ID = "this-mac";
19
19
  const GROK_ACP_LAUNCH = Object.freeze({
20
20
  kind: "npx", package: "@xai-official/grok@1.0.5", args: ["agent", "stdio"],
21
21
  });
@@ -102,21 +102,14 @@ export async function runGatewayServer(options, dependencies = {}) {
102
102
  return { kind: "shutdown" };
103
103
  });
104
104
  try {
105
- const loaded = d.loadConfig(env);
106
- const inventory = await d.loadNodeInventory(loaded.stateDir);
107
- if (inventory.configured && env.EMBASSY_HOSTS !== undefined) {
108
- throw serverError("INVALID_GATEWAY_CONFIGURATION", "nodes.json and EMBASSY_HOSTS cannot both define gateway hosts.");
109
- }
105
+ const inventory = await d.loadNodeInventory(path.resolve(defaultGatewayStateDir(env)));
106
+ const loaded = d.loadConfig(env, inventory);
110
107
  const inboundMode = options.inboundMode ?? loaded.inboundMode;
111
108
  if (!gatewayInboundModes.includes(inboundMode)) {
112
109
  throw serverError("INVALID_GATEWAY_CONFIGURATION", "The gateway inbound mode must be paired or open.");
113
110
  }
114
- const localHost = inventory.host;
115
- const config = { ...loaded, inboundMode, hostId: localHost, peerNodes: inventory.nodes,
116
- allowedHosts: Object.freeze([localHost, ...inventory.nodes]),
117
- ...(loaded.acpProviders === undefined ? {} : { acpProviders: loaded.acpProviders.map((definition) => ({ ...definition,
118
- alias: definition.alias.endsWith(`@${GATEWAY_LOCAL_HOST_ID}`)
119
- ? `${definition.alias.slice(0, -GATEWAY_LOCAL_HOST_ID.length)}${localHost}` : definition.alias })) }) };
111
+ const localHost = loaded.hostId;
112
+ const config = { ...loaded, inboundMode };
120
113
  const home = d.loginHome();
121
114
  const acquiring = d.acquireInstanceLease(home).then((value) => ({ kind: "lease", value }), (error) => ({ kind: "error", error }));
122
115
  const acquired = await Promise.race([acquiring, stop]);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/gateway/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/gateway/server.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ export type GatewayAdapterRouteObservationState = GatewayAdapterRouteState | "un
10
10
  export type GatewayAdapterDiscovery = Readonly<{
11
11
  alias: string;
12
12
  routeHandle: string;
13
- kind: "interactive";
13
+ kind: "interactive" | "bg";
14
14
  state: GatewayAdapterRouteState;
15
15
  }>;
16
16
  export type GatewayAdapterRegistryObservation = Readonly<{
@@ -172,6 +172,7 @@ export declare class GatewayService {
172
172
  private readonly connectors;
173
173
  private readonly routeObservations;
174
174
  private readonly candidates;
175
+ private readonly collidingClaudeAliases;
175
176
  private readonly conversations;
176
177
  private readonly messageContexts;
177
178
  private readonly activeAttempts;
@@ -234,6 +235,7 @@ export declare class GatewayService {
234
235
  private unpair;
235
236
  private resolvePairEndpoints;
236
237
  private assertThread;
238
+ private send;
237
239
  private sendToClaude;
238
240
  private sendToCodex;
239
241
  private reply;
@@ -1,6 +1,6 @@
1
1
  import { createHash, randomBytes, timingSafeEqual } from "node:crypto";
2
2
  import { BridgeError } from "../errors.js";
3
- import { createGatewayConversationId, startGatewayControlServer, pairParamAliases, pairParamThreadAttestation, } from "./control.js";
3
+ import { createGatewayConversationId, startGatewayControlServer, } from "./control.js";
4
4
  import { publishGatewayDashboard } from "./dashboard.js";
5
5
  import { spawnPeerClient } from "./peer-client.js";
6
6
  import { peerEdgeRef, peerRouteRef } from "./peer-protocol.js";
@@ -76,9 +76,13 @@ function connectorKey(identity) {
76
76
  return `${identity.provider}\0${identity.hostId}`;
77
77
  }
78
78
  function publicRegistry(value, previouslyParseable) {
79
- const rejected = [...value.rejected]
80
- .filter((row) => SAFE_CODE.test(row.safeErrorCode) && Number.isSafeInteger(row.count) && row.count > 0)
81
- .sort((left, right) => left.safeErrorCode.localeCompare(right.safeErrorCode));
79
+ const counts = new Map();
80
+ for (const row of value.rejected)
81
+ if (SAFE_CODE.test(row.safeErrorCode) && Number.isSafeInteger(row.count) && row.count > 0)
82
+ counts.set(row.safeErrorCode, (counts.get(row.safeErrorCode) ?? 0) + row.count);
83
+ const rejected = [...counts].map(([safeErrorCode, count]) => ({ safeErrorCode, count }))
84
+ .sort((left, right) => left.safeErrorCode < right.safeErrorCode ? -1 :
85
+ left.safeErrorCode > right.safeErrorCode ? 1 : 0);
82
86
  const retained = rejected.slice(0, gatewayPublicSnapshotLimits.registryRejectionCodes);
83
87
  return {
84
88
  entriesScanned: Math.max(0, value.entriesScanned),
@@ -133,6 +137,7 @@ export class GatewayService {
133
137
  connectors = new Map();
134
138
  routeObservations = new Map();
135
139
  candidates = new Map();
140
+ collidingClaudeAliases = new Set();
136
141
  conversations = new Map();
137
142
  messageContexts = new Map();
138
143
  activeAttempts = new Map();
@@ -231,7 +236,7 @@ export class GatewayService {
231
236
  const now = this.now().getTime();
232
237
  this.nextDiscoveryAt = now + DISCOVERY_INTERVAL_MS;
233
238
  this.nextDoctorAt = now + CODEX_DOCTOR_INTERVAL_MS;
234
- this.nextPeerRefreshAt = (this.config.peerNodes?.length ?? 0) > 0 ? now : 0;
239
+ this.nextPeerRefreshAt = this.config.peerNodes.length > 0 ? now : 0;
235
240
  for (const target of await this.store.inspectDispatchableTargets())
236
241
  this.kick(target);
237
242
  await this.publish();
@@ -342,8 +347,7 @@ export class GatewayService {
342
347
  observeSnapshot: () => this.observeSnapshot(),
343
348
  deliveryStatus: (params) => this.deliveryStatus(params.token),
344
349
  untrack: (params) => decide(async () => this.untrack(params.conversationId)),
345
- sendToClaude: (params) => this.sendToClaude(params),
346
- sendToCodex: (params) => this.sendToCodex(params),
350
+ send: (params) => this.send(params),
347
351
  reply: (params) => this.reply(params),
348
352
  refreshDashboard: async () => {
349
353
  if (this.closing) {
@@ -359,8 +363,8 @@ export class GatewayService {
359
363
  };
360
364
  }
361
365
  async buildPeerCatalog(peerHost) {
362
- const localHost = this.config.hostId ?? this.config.allowedHosts[0];
363
- if (!(this.config.peerNodes ?? []).includes(peerHost))
366
+ const localHost = this.config.hostId;
367
+ if (!this.config.peerNodes.includes(peerHost))
364
368
  throw new BridgeError("PEER_NOT_CONFIGURED", "The requested peer host is not configured.");
365
369
  const [snapshot, privateRoutes, privateEdges] = await Promise.all([
366
370
  this.snapshot(), this.store.inspectPrivateRoutes(), this.store.inspectPrivateConsentEdges(),
@@ -400,7 +404,7 @@ export class GatewayService {
400
404
  })), routes, consentEdges, alerts: snapshot.alerts.filter((alert) => (alert.host === undefined || alert.host === localHost) && (alert.alias === undefined || aliasHost(alert.alias) === localHost)), };
401
405
  }
402
406
  async receivePeerHandoff(peerHost, handoff) {
403
- if (!(this.config.peerNodes ?? []).includes(peerHost))
407
+ if (!this.config.peerNodes.includes(peerHost))
404
408
  throw new BridgeError("PEER_NOT_CONFIGURED", "The sending peer host is not configured.");
405
409
  const enqueued = await this.store.enqueuePeerHandoff(peerHost, handoff);
406
410
  if (enqueued.messageId !== undefined) {
@@ -474,6 +478,7 @@ export class GatewayService {
474
478
  };
475
479
  });
476
480
  const availablePeers = [...this.candidates.values()]
481
+ .filter((candidate) => !this.collidingClaudeAliases.has(candidate.alias))
477
482
  .slice(0, gatewayPublicSnapshotLimits.availablePeers)
478
483
  .map((candidate) => ({
479
484
  alias: candidate.alias,
@@ -594,7 +599,7 @@ export class GatewayService {
594
599
  }
595
600
  async advertise(route) {
596
601
  const hostId = route.registrationMode === "federated_peer"
597
- ? (this.config.hostId ?? this.config.allowedHosts[0]) : route.binding.hostId;
602
+ ? this.config.hostId : route.binding.hostId;
598
603
  await this.claudeAdapter(hostId)?.advertiseNativeSourcePeer?.({
599
604
  alias: route.alias,
600
605
  sourceProvider: route.binding.provider,
@@ -603,7 +608,7 @@ export class GatewayService {
603
608
  }
604
609
  async unadvertise(route) {
605
610
  const hostId = route.registrationMode === "federated_peer"
606
- ? (this.config.hostId ?? this.config.allowedHosts[0]) : route.binding.hostId;
611
+ ? this.config.hostId : route.binding.hostId;
607
612
  await this.claudeAdapter(hostId)?.unadvertiseNativeSourcePeer?.(route.alias);
608
613
  }
609
614
  reconcileAdvertisement(route) {
@@ -714,12 +719,12 @@ export class GatewayService {
714
719
  this.kick(existing.alias, existing.binding.registrationId);
715
720
  return undefined;
716
721
  }
717
- if (params.token !== undefined || !params.alias.endsWith(`@${this.config.hostId ?? this.config.allowedHosts[0]}`)) {
722
+ if (params.token !== undefined || !params.alias.endsWith(`@${this.config.hostId}`)) {
718
723
  throw new BridgeError("ROUTE_UNREGISTERED", "The route binding does not match.");
719
724
  }
720
725
  const token = `peer_${randomBytes(24).toString("base64url")}`;
721
726
  await this.store.registerRoute({ alias: params.alias, binding: {
722
- provider: "peer", hostId: this.config.hostId ?? this.config.allowedHosts[0],
727
+ provider: "peer", hostId: this.config.hostId,
723
728
  routeHandle: peerHandle(process.getuid(), params.alias, token), registrationId: registrationId(),
724
729
  }, registrationMode: "explicit_opt_in" });
725
730
  const installed = (await this.store.inspectPrivateRoute(params.alias));
@@ -846,11 +851,8 @@ export class GatewayService {
846
851
  const endpoints = await this.resolvePairEndpoints(params, true);
847
852
  const aliases = endpoints.aliases;
848
853
  const ownerHost = aliases.map(aliasHost).sort()[0];
849
- if ((this.config.hostId ?? this.config.allowedHosts[0]) !== ownerHost)
854
+ if (this.config.hostId !== ownerHost)
850
855
  throw new ConsentOwnerError(ownerHost);
851
- const attestation = pairParamThreadAttestation(params);
852
- if (attestation !== undefined)
853
- await this.assertThread(attestation.alias, attestation.threadId);
854
856
  this.assertWritable();
855
857
  const existed = await this.store.hasConsentEdge(endpoints);
856
858
  await this.store.addConsentEdge(endpoints);
@@ -861,11 +863,8 @@ export class GatewayService {
861
863
  const endpoints = await this.resolvePairEndpoints(params, false);
862
864
  const aliases = endpoints.aliases;
863
865
  const ownerHost = aliases.map(aliasHost).sort()[0];
864
- if ((this.config.hostId ?? this.config.allowedHosts[0]) !== ownerHost)
866
+ if (this.config.hostId !== ownerHost)
865
867
  throw new ConsentOwnerError(ownerHost);
866
- const attestation = pairParamThreadAttestation(params);
867
- if (attestation !== undefined)
868
- await this.assertThread(attestation.alias, attestation.threadId);
869
868
  this.assertWritable();
870
869
  const existed = await this.store.hasConsentEdge(endpoints);
871
870
  const result = await this.store.removeConsentEdge(endpoints);
@@ -878,9 +877,13 @@ export class GatewayService {
878
877
  this.kick(alias);
879
878
  }
880
879
  async resolvePairEndpoints(params, maySelect) {
881
- const raw = pairParamAliases(params);
880
+ const raw = params.aliases;
882
881
  const aliases = [raw[0], raw[1]];
882
+ if (maySelect && aliases.some((alias) => PUBLIC_ALIAS.test(alias)))
883
+ await this.refreshClaudeDiscovery().catch(() => undefined);
883
884
  for (let index = 0; index < aliases.length; index += 1) {
885
+ if (maySelect && this.collidingClaudeAliases.has(aliases[index]))
886
+ throw new BridgeError("PEER_ALIAS_COLLISION", "The Claude alias is ambiguous.");
884
887
  if (PUBLIC_ALIAS.test(aliases[index]))
885
888
  continue;
886
889
  const selected = await this.resolveClaudeSelector(aliases[index], maySelect);
@@ -910,12 +913,31 @@ export class GatewayService {
910
913
  }
911
914
  return route;
912
915
  }
916
+ async send(params) {
917
+ const source = await this.store.inspectPrivateRoute(params.fromAlias);
918
+ const directTarget = await this.store.inspectPrivateRoute(params.toAlias);
919
+ const target = directTarget ?? await this.resolveSelectedClaudeRoute(params.toAlias);
920
+ if (source?.binding.provider === "codex" && (target?.binding.provider === "claude" || target?.binding.provider === "peer") && "threadId" in params) {
921
+ return this.sendToClaude(params);
922
+ }
923
+ if (source?.binding.provider === "claude" && (target?.binding.provider === "codex" || target?.binding.provider === "peer") && "replyAddress" in params) {
924
+ return this.sendToCodex(params);
925
+ }
926
+ if (source?.binding.provider === "peer" && "peerToken" in params) {
927
+ return target?.binding.provider === "claude" ? this.sendToClaude(params) : this.sendToCodex(params);
928
+ }
929
+ return { accepted: false, code: "route_mismatch" };
930
+ }
913
931
  async sendToClaude(params) {
914
932
  try {
915
933
  this.assertWritable();
916
934
  const source = "peerToken" in params && params.peerToken !== undefined
917
935
  ? await this.assertPeer({ alias: params.fromAlias, token: params.peerToken })
918
- : await this.assertThread(params.fromAlias, params.threadId);
936
+ : params.threadId === undefined
937
+ ? undefined
938
+ : await this.assertThread(params.fromAlias, params.threadId);
939
+ if (source === undefined)
940
+ throw new BridgeError("ROUTE_NOT_AVAILABLE", "The source route is absent.");
919
941
  const direct = await this.store.inspectPrivateRoute(params.toAlias);
920
942
  const target = direct?.binding.provider === "peer" ? direct : await this.resolveSelectedClaudeRoute(params.toAlias);
921
943
  if (target === undefined)
@@ -1641,7 +1663,7 @@ export class GatewayService {
1641
1663
  }
1642
1664
  async onClaudeMessage(event) {
1643
1665
  const target = await this.store.inspectPrivateRoute(event.targetAlias);
1644
- const localHost = this.config.hostId ?? this.config.allowedHosts[0];
1666
+ const localHost = this.config.hostId;
1645
1667
  if (target === undefined || (target.binding.hostId !== event.endpoint.hostId &&
1646
1668
  !(target.registrationMode === "federated_peer" && event.endpoint.hostId === localHost))) {
1647
1669
  throw new BridgeError("ROUTE_NOT_AVAILABLE", "The native target is absent.");
@@ -2119,7 +2141,7 @@ export class GatewayService {
2119
2141
  const due = [
2120
2142
  this.nextDiscoveryAt || now + DISCOVERY_INTERVAL_MS,
2121
2143
  this.nextDoctorAt || now + CODEX_DOCTOR_INTERVAL_MS,
2122
- ...((this.config.peerNodes?.length ?? 0) > 0
2144
+ ...(this.config.peerNodes.length > 0
2123
2145
  ? [this.nextPeerRefreshAt || now + PEER_REFRESH_INTERVAL_MS]
2124
2146
  : []),
2125
2147
  ...(deadlineAt === undefined ? [] : [Date.parse(deadlineAt)]),
@@ -2167,8 +2189,8 @@ export class GatewayService {
2167
2189
  this.scheduleWake();
2168
2190
  }
2169
2191
  async refreshPeers() {
2170
- const localHost = this.config.hostId ?? this.config.allowedHosts[0];
2171
- await Promise.all((this.config.peerNodes ?? []).map(async (peerHost) => {
2192
+ const localHost = this.config.hostId;
2193
+ await Promise.all(this.config.peerNodes.map(async (peerHost) => {
2172
2194
  let failureCode = "PEER_TUNNEL_UNAVAILABLE";
2173
2195
  try {
2174
2196
  let client = this.peerClients.get(peerHost);
@@ -2244,16 +2266,30 @@ export class GatewayService {
2244
2266
  }
2245
2267
  async refreshClaudeDiscovery() {
2246
2268
  const seen = new Set();
2269
+ const nextCollisions = new Set();
2270
+ const refreshedHosts = new Set();
2247
2271
  for (const adapter of this.adapters) {
2248
2272
  if (adapter.identity.provider !== "claude" || adapter.discoverClaudePeers === undefined)
2249
2273
  continue;
2250
2274
  const snapshot = await adapter.discoverClaudePeers();
2251
2275
  const observedAt = this.now().toISOString();
2252
- for (const peer of snapshot.peers) {
2253
- if (!PUBLIC_ALIAS.test(peer.alias) ||
2254
- !peer.alias.endsWith(`@${adapter.identity.hostId}`) ||
2255
- !PRIVATE_HANDLE.test(peer.routeHandle))
2256
- continue;
2276
+ const peers = snapshot.peers.filter((peer) => PUBLIC_ALIAS.test(peer.alias) &&
2277
+ peer.alias.endsWith(`@${adapter.identity.hostId}`) && PRIVATE_HANDLE.test(peer.routeHandle));
2278
+ const aliasHandles = new Map();
2279
+ for (const peer of peers) {
2280
+ const handles = aliasHandles.get(peer.alias) ?? new Set();
2281
+ handles.add(peer.routeHandle);
2282
+ aliasHandles.set(peer.alias, handles);
2283
+ }
2284
+ const collidingAliases = new Set([...aliasHandles].filter(([, handles]) => handles.size > 1).map(([alias]) => alias));
2285
+ refreshedHosts.add(adapter.identity.hostId);
2286
+ if (!snapshot.complete)
2287
+ for (const alias of this.collidingClaudeAliases)
2288
+ if (alias.endsWith(`@${adapter.identity.hostId}`))
2289
+ collidingAliases.add(alias);
2290
+ for (const alias of collidingAliases)
2291
+ nextCollisions.add(alias);
2292
+ for (const peer of peers) {
2257
2293
  const key = `${adapter.identity.hostId}\0${peer.routeHandle}`;
2258
2294
  seen.add(key);
2259
2295
  this.candidates.set(key, { ...peer, adapter, observedAt });
@@ -2264,13 +2300,28 @@ export class GatewayService {
2264
2300
  runtime.health = snapshot.complete ? "healthy" : "degraded";
2265
2301
  const registry = snapshot.registry ?? adapter.latestRegistryObservation?.();
2266
2302
  if (registry !== undefined) {
2267
- runtime.registry = publicRegistry(registry, runtime.registry?.parseableRecordSeenSinceBoot ?? false);
2303
+ runtime.registry = publicRegistry({ ...registry, rejected: [
2304
+ ...registry.rejected,
2305
+ ...(collidingAliases.size === 0 ? [] : [{ safeErrorCode: "PEER_ALIAS_COLLISION",
2306
+ count: collidingAliases.size }]),
2307
+ ] }, runtime.registry?.parseableRecordSeenSinceBoot ?? false);
2268
2308
  }
2269
2309
  }
2270
2310
  }
2271
2311
  for (const [key] of this.candidates)
2272
2312
  if (!seen.has(key))
2273
2313
  this.candidates.delete(key);
2314
+ for (const alias of this.collidingClaudeAliases)
2315
+ if (refreshedHosts.has(aliasHost(alias)))
2316
+ this.collidingClaudeAliases.delete(alias);
2317
+ const retainedCollisions = new Set([...nextCollisions].slice(0, gatewayPublicSnapshotLimits.availablePeers));
2318
+ // Discovery currently caps rows such that collisions cannot overflow this independent public bound.
2319
+ // If those constants diverge, discard overflow candidates rather than expose an unfenced alias.
2320
+ for (const [key, candidate] of this.candidates)
2321
+ if (nextCollisions.has(candidate.alias) && !retainedCollisions.has(candidate.alias))
2322
+ this.candidates.delete(key);
2323
+ for (const alias of retainedCollisions)
2324
+ this.collidingClaudeAliases.add(alias);
2274
2325
  }
2275
2326
  async refreshCodexDoctor() {
2276
2327
  if (this.codexDoctor === undefined)
@@ -2285,7 +2336,10 @@ export class GatewayService {
2285
2336
  async resolveClaudeSelector(selector, refresh) {
2286
2337
  if (refresh)
2287
2338
  await this.refreshClaudeDiscovery().catch(() => undefined);
2288
- return [...this.candidates.values()].find((candidate) => candidate.alias === selector || candidate.routeHandle === selector);
2339
+ if (this.collidingClaudeAliases.has(selector))
2340
+ throw new BridgeError("PEER_ALIAS_COLLISION", "The Claude alias is ambiguous.");
2341
+ return [...this.candidates.values()].find((candidate) => candidate.routeHandle === selector ||
2342
+ candidate.alias === selector);
2289
2343
  }
2290
2344
  async resolveSelectedClaudeRoute(selector) {
2291
2345
  return (await this.store.listLogicalRoutes()).find((route) => route.binding.provider === "claude" &&