agent-embassy 1.9.5 → 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.
Files changed (150) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/CONTRIBUTING.md +19 -34
  3. package/README.md +110 -221
  4. package/SECURITY.md +55 -89
  5. package/dist/src/errors.d.ts +10 -1
  6. package/dist/src/errors.js +3 -1
  7. package/dist/src/errors.js.map +1 -1
  8. package/dist/src/gateway/claude-helper-protocol.d.ts +9 -12
  9. package/dist/src/gateway/claude-helper-protocol.js +15 -13
  10. package/dist/src/gateway/claude-helper-protocol.js.map +1 -1
  11. package/dist/src/gateway/claude-helper-supervisor.d.ts +2 -6
  12. package/dist/src/gateway/claude-helper-supervisor.js +10 -9
  13. package/dist/src/gateway/claude-helper-supervisor.js.map +1 -1
  14. package/dist/src/gateway/claude-helper.js +18 -10
  15. package/dist/src/gateway/claude-helper.js.map +1 -1
  16. package/dist/src/gateway/claude-peer.d.ts +0 -3
  17. package/dist/src/gateway/claude-peer.js +6 -18
  18. package/dist/src/gateway/claude-peer.js.map +1 -1
  19. package/dist/src/gateway/cli.d.ts +18 -13
  20. package/dist/src/gateway/cli.js +942 -298
  21. package/dist/src/gateway/cli.js.map +1 -1
  22. package/dist/src/gateway/codex-local-transport.d.ts +1 -1
  23. package/dist/src/gateway/codex-local-transport.js +2 -2
  24. package/dist/src/gateway/codex-local-transport.js.map +1 -1
  25. package/dist/src/gateway/codex-socket-holder.d.ts +26 -0
  26. package/dist/src/gateway/codex-socket-holder.js +76 -0
  27. package/dist/src/gateway/codex-socket-holder.js.map +1 -0
  28. package/dist/src/gateway/codex-stateless-transport.js +1 -1
  29. package/dist/src/gateway/codex-stateless-transport.js.map +1 -1
  30. package/dist/src/gateway/config.d.ts +5 -13
  31. package/dist/src/gateway/config.js +7 -19
  32. package/dist/src/gateway/config.js.map +1 -1
  33. package/dist/src/gateway/control.d.ts +55 -108
  34. package/dist/src/gateway/control.js +95 -222
  35. package/dist/src/gateway/control.js.map +1 -1
  36. package/dist/src/gateway/federation-nodes.d.ts +29 -3
  37. package/dist/src/gateway/federation-nodes.js +200 -15
  38. package/dist/src/gateway/federation-nodes.js.map +1 -1
  39. package/dist/src/gateway/peer-client.d.ts +4 -3
  40. package/dist/src/gateway/peer-client.js +22 -13
  41. package/dist/src/gateway/peer-client.js.map +1 -1
  42. package/dist/src/gateway/peer-protocol.d.ts +8 -11
  43. package/dist/src/gateway/peer-protocol.js +5 -12
  44. package/dist/src/gateway/peer-protocol.js.map +1 -1
  45. package/dist/src/gateway/provenance-envelope.d.ts +0 -1
  46. package/dist/src/gateway/provenance-envelope.js +4 -19
  47. package/dist/src/gateway/provenance-envelope.js.map +1 -1
  48. package/dist/src/gateway/providers.d.ts +10 -7
  49. package/dist/src/gateway/providers.js +21 -28
  50. package/dist/src/gateway/providers.js.map +1 -1
  51. package/dist/src/gateway/server.d.ts +4 -14
  52. package/dist/src/gateway/server.js +33 -59
  53. package/dist/src/gateway/server.js.map +1 -1
  54. package/dist/src/gateway/service-agent.d.ts +187 -0
  55. package/dist/src/gateway/service-agent.js +758 -0
  56. package/dist/src/gateway/service-agent.js.map +1 -0
  57. package/dist/src/gateway/service.d.ts +117 -32
  58. package/dist/src/gateway/service.js +525 -576
  59. package/dist/src/gateway/service.js.map +1 -1
  60. package/dist/src/gateway/status-view.d.ts +167 -0
  61. package/dist/src/gateway/status-view.js +488 -0
  62. package/dist/src/gateway/status-view.js.map +1 -0
  63. package/dist/src/gateway/store.d.ts +103 -21
  64. package/dist/src/gateway/store.js +473 -547
  65. package/dist/src/gateway/store.js.map +1 -1
  66. package/dist/src/gateway/types.d.ts +51 -102
  67. package/dist/src/gateway/types.js +15 -52
  68. package/dist/src/gateway/types.js.map +1 -1
  69. package/docs/CONFIGURATION.md +194 -59
  70. package/docs/DELIVERY.md +11 -11
  71. package/docs/GATEWAY-ARCHITECTURE.md +286 -394
  72. package/package.json +4 -12
  73. package/skills/embassy-peer/SKILL.md +72 -92
  74. package/skills/embassy-peer/agents/openai.yaml +1 -1
  75. package/README.zh-CN.md +0 -269
  76. package/assets/live-dashboard/app.css +0 -1619
  77. package/assets/vendor/react/LICENSE +0 -21
  78. package/assets/vendor/react/react-dom.production.min.js +0 -267
  79. package/assets/vendor/react/react.production.min.js +0 -31
  80. package/dist/src/gateway/acp-client.d.ts +0 -110
  81. package/dist/src/gateway/acp-client.js +0 -407
  82. package/dist/src/gateway/acp-client.js.map +0 -1
  83. package/dist/src/gateway/acp-provider.d.ts +0 -66
  84. package/dist/src/gateway/acp-provider.js +0 -275
  85. package/dist/src/gateway/acp-provider.js.map +0 -1
  86. package/dist/src/gateway/cli-copy.d.ts +0 -8
  87. package/dist/src/gateway/cli-copy.en.d.ts +0 -17
  88. package/dist/src/gateway/cli-copy.en.js +0 -58
  89. package/dist/src/gateway/cli-copy.en.js.map +0 -1
  90. package/dist/src/gateway/cli-copy.js +0 -22
  91. package/dist/src/gateway/cli-copy.js.map +0 -1
  92. package/dist/src/gateway/cli-copy.zh-CN.d.ts +0 -17
  93. package/dist/src/gateway/cli-copy.zh-CN.js +0 -58
  94. package/dist/src/gateway/cli-copy.zh-CN.js.map +0 -1
  95. package/dist/src/gateway/codex-doctor.d.ts +0 -36
  96. package/dist/src/gateway/codex-doctor.js +0 -127
  97. package/dist/src/gateway/codex-doctor.js.map +0 -1
  98. package/dist/src/gateway/dashboard-copy.d.ts +0 -7
  99. package/dist/src/gateway/dashboard-copy.en.d.ts +0 -504
  100. package/dist/src/gateway/dashboard-copy.en.js +0 -505
  101. package/dist/src/gateway/dashboard-copy.en.js.map +0 -1
  102. package/dist/src/gateway/dashboard-copy.js +0 -514
  103. package/dist/src/gateway/dashboard-copy.js.map +0 -1
  104. package/dist/src/gateway/dashboard-copy.zh-CN.d.ts +0 -504
  105. package/dist/src/gateway/dashboard-copy.zh-CN.js +0 -505
  106. package/dist/src/gateway/dashboard-copy.zh-CN.js.map +0 -1
  107. package/dist/src/gateway/dashboard-model.d.ts +0 -343
  108. package/dist/src/gateway/dashboard-model.js +0 -1061
  109. package/dist/src/gateway/dashboard-model.js.map +0 -1
  110. package/dist/src/gateway/dashboard.d.ts +0 -20
  111. package/dist/src/gateway/dashboard.js +0 -874
  112. package/dist/src/gateway/dashboard.js.map +0 -1
  113. package/dist/src/gateway/deepseek-detect.d.ts +0 -14
  114. package/dist/src/gateway/deepseek-detect.js +0 -41
  115. package/dist/src/gateway/deepseek-detect.js.map +0 -1
  116. package/dist/src/gateway/live-dashboard-app/app.js +0 -2385
  117. package/dist/src/gateway/live-dashboard-assets.d.ts +0 -10
  118. package/dist/src/gateway/live-dashboard-assets.js +0 -74
  119. package/dist/src/gateway/live-dashboard-assets.js.map +0 -1
  120. package/dist/src/gateway/live-dashboard-command.d.ts +0 -58
  121. package/dist/src/gateway/live-dashboard-command.js +0 -334
  122. package/dist/src/gateway/live-dashboard-command.js.map +0 -1
  123. package/dist/src/gateway/live-dashboard-http.d.ts +0 -39
  124. package/dist/src/gateway/live-dashboard-http.js +0 -383
  125. package/dist/src/gateway/live-dashboard-http.js.map +0 -1
  126. package/dist/src/gateway/live-dashboard-protocol.d.ts +0 -34
  127. package/dist/src/gateway/live-dashboard-protocol.js +0 -114
  128. package/dist/src/gateway/live-dashboard-protocol.js.map +0 -1
  129. package/dist/src/gateway/live-dashboard-server.d.ts +0 -33
  130. package/dist/src/gateway/live-dashboard-server.js +0 -144
  131. package/dist/src/gateway/live-dashboard-server.js.map +0 -1
  132. package/dist/src/gateway/live-dashboard-stream.d.ts +0 -46
  133. package/dist/src/gateway/live-dashboard-stream.js +0 -234
  134. package/dist/src/gateway/live-dashboard-stream.js.map +0 -1
  135. package/dist/src/gateway/live-dashboard.d.ts +0 -28
  136. package/dist/src/gateway/live-dashboard.js +0 -154
  137. package/dist/src/gateway/live-dashboard.js.map +0 -1
  138. package/dist/src/gateway/locale.d.ts +0 -4
  139. package/dist/src/gateway/locale.js +0 -10
  140. package/dist/src/gateway/locale.js.map +0 -1
  141. package/dist/src/gateway/progress-watch-machine.d.ts +0 -45
  142. package/dist/src/gateway/progress-watch-machine.js +0 -70
  143. package/dist/src/gateway/progress-watch-machine.js.map +0 -1
  144. package/dist/src/gateway/state-v2-to-v3.d.ts +0 -24
  145. package/dist/src/gateway/state-v2-to-v3.js +0 -1034
  146. package/dist/src/gateway/state-v2-to-v3.js.map +0 -1
  147. package/docs/CONFIGURATION.zh-CN.md +0 -93
  148. package/docs/DASHBOARD.md +0 -98
  149. package/docs/DASHBOARD.zh-CN.md +0 -49
  150. package/docs/DELIVERY.zh-CN.md +0 -55
@@ -1,275 +0,0 @@
1
- import { Buffer } from "node:buffer";
2
- import { createHash } from "node:crypto";
3
- import { spawnAcpClient, AcpRequestError, } from "./acp-client.js";
4
- import { composeProvenanceEnvelope } from "./provenance-envelope.js";
5
- const BACKOFF_MS = [250, 500, 1_000, 2_000, 5_000];
6
- const PRIVATE_HANDLE = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,255}$/;
7
- export class AcpGatewayProvider {
8
- options;
9
- identity;
10
- protocol = "acp";
11
- protocolVersion = "1";
12
- routeHandle;
13
- spawnClient;
14
- now;
15
- callbacks;
16
- client;
17
- sessionId;
18
- retryAt = 0;
19
- failures = 0;
20
- registrationId;
21
- closed = false;
22
- constructor(options) {
23
- this.options = options;
24
- this.identity = Object.freeze({
25
- provider: options.provider,
26
- hostId: options.hostId,
27
- });
28
- this.routeHandle = `acp_${createHash("sha256").update(options.alias).digest("base64url").slice(0, 24)}`;
29
- this.spawnClient = options.spawnClient ?? ((launch) => spawnAcpClient(launch));
30
- this.now = options.now ?? Date.now;
31
- }
32
- async initialize(callbacks) {
33
- this.callbacks = callbacks;
34
- return {
35
- health: this.options.launch === undefined ? "degraded" : "healthy",
36
- ...(this.options.launch === undefined
37
- ? { safeErrorCode: this.options.unavailableCode ?? "ACP_LAUNCH_UNAVAILABLE" }
38
- : {}),
39
- ownedRoute: { alias: this.options.alias, routeHandle: this.routeHandle, state: "idle" },
40
- };
41
- }
42
- async selectRoute(input) {
43
- if (input.alias !== this.options.alias || input.routeHandle !== this.routeHandle) {
44
- throw new Error("ACP route identity mismatch");
45
- }
46
- return { routeHandle: this.routeHandle, state: "idle" };
47
- }
48
- observeLogicalRoute(input) {
49
- if (!this.closed &&
50
- input.alias === this.options.alias &&
51
- input.routeHandle === this.routeHandle &&
52
- PRIVATE_HANDLE.test(input.registrationId)) {
53
- if (this.registrationId !== undefined &&
54
- this.registrationId !== input.registrationId) {
55
- this.resetRegistrationClient();
56
- }
57
- this.registrationId = input.registrationId;
58
- }
59
- }
60
- forgetLogicalRoute(registrationId) {
61
- if (this.registrationId !== registrationId)
62
- return;
63
- this.registrationId = undefined;
64
- this.resetRegistrationClient();
65
- }
66
- async dispatch(input) {
67
- if (this.closed || input.targetAlias !== this.options.alias ||
68
- input.binding.provider !== this.options.provider ||
69
- input.binding.hostId !== this.options.hostId ||
70
- input.binding.routeHandle !== this.routeHandle ||
71
- this.registrationId !== input.binding.registrationId) {
72
- return { state: "failed", safeErrorCode: "ACP_ROUTE_MISMATCH" };
73
- }
74
- const registrationId = input.binding.registrationId;
75
- if (this.options.launch === undefined) {
76
- return this.options.unavailableCode === undefined
77
- ? { state: "deferred", safeErrorCode: "ROUTE_BUSY" }
78
- : { state: "failed", safeErrorCode: this.options.unavailableCode };
79
- }
80
- if (this.now() < this.retryAt) {
81
- this.emitState("unobserved", "ACP_RESTART_BACKOFF", registrationId);
82
- return { state: "deferred", safeErrorCode: "ROUTE_BUSY" };
83
- }
84
- const client = await this.connect(registrationId);
85
- if (client === undefined ||
86
- this.sessionId === undefined ||
87
- this.registrationId !== registrationId) {
88
- return this.closed || this.registrationId !== registrationId
89
- ? { state: "failed", safeErrorCode: "ACP_ROUTE_MISMATCH" }
90
- : { state: "deferred", safeErrorCode: "ROUTE_BUSY" };
91
- }
92
- const sessionId = this.sessionId;
93
- let content;
94
- try {
95
- content = composeProvenanceEnvelope({
96
- sourceProvider: input.sourceProvider,
97
- recipientProvider: this.options.provider,
98
- sourceAlias: input.sourceAlias,
99
- targetAlias: input.targetAlias,
100
- conversationId: input.conversationId,
101
- body: input.text,
102
- ...(input.progressWatchActive ? { progressWatchActive: true } : {}),
103
- });
104
- }
105
- catch {
106
- return { state: "failed", safeErrorCode: "PROVENANCE_ENVELOPE_INVALID" };
107
- }
108
- let prepared;
109
- try {
110
- prepared = client.preparePrompt(sessionId, content);
111
- }
112
- catch (error) {
113
- if (error instanceof AcpRequestError) {
114
- return { state: "failed", safeErrorCode: "ACP_REQUEST_FAILED" };
115
- }
116
- if (error instanceof Error &&
117
- error.message === "ACP session already has an outstanding prompt") {
118
- this.emitState("busy", "ACP_SESSION_BUSY", registrationId);
119
- return { state: "deferred", safeErrorCode: "ROUTE_BUSY" };
120
- }
121
- return { state: "failed", safeErrorCode: "ACP_REQUEST_FAILED" };
122
- }
123
- const evidence = {
124
- attemptId: input.attemptId,
125
- kind: "acp_prompt",
126
- bodyBytes: Buffer.byteLength(input.text, "utf8"),
127
- bodySha256: createHash("sha256").update(input.text).digest("hex"),
128
- frameBytes: prepared.frameBytes,
129
- sha256: prepared.sha256,
130
- };
131
- let authorized;
132
- try {
133
- authorized = await input.authorizeWrite(evidence);
134
- }
135
- catch {
136
- cancelPreparedPrompt(prepared);
137
- return {
138
- state: "ambiguous",
139
- safeErrorCode: "WRITE_AUTHORIZATION_UNCERTAIN",
140
- };
141
- }
142
- if (!authorized) {
143
- cancelPreparedPrompt(prepared);
144
- return {
145
- state: "failed",
146
- safeErrorCode: "WRITE_AUTHORIZATION_DENIED",
147
- };
148
- }
149
- let prompt;
150
- try {
151
- // Authorization is the consent linearization point. Do not add an await
152
- // or yield before invoking the one body-bearing ACP method.
153
- prompt = prepared.perform();
154
- }
155
- catch {
156
- this.markStale("ACP_DISPATCH_OUTCOME_UNKNOWN", registrationId);
157
- return { state: "ambiguous", safeErrorCode: "ACP_DISPATCH_OUTCOME_UNKNOWN" };
158
- }
159
- let receipt;
160
- try {
161
- receipt = await prompt;
162
- }
163
- catch {
164
- this.markStale("ACP_DISPATCH_OUTCOME_UNKNOWN", registrationId);
165
- return { state: "ambiguous", safeErrorCode: "ACP_DISPATCH_OUTCOME_UNKNOWN" };
166
- }
167
- if (receipt.terminalState === "unknown") {
168
- this.markStale("ACP_SUBPROCESS_EXITED", registrationId);
169
- return result("ambiguous", "ACP_SUBPROCESS_EXITED", receipt.text);
170
- }
171
- this.emitState("idle", undefined, registrationId);
172
- if (receipt.terminalState === "cancelled") {
173
- return result("cancelled", undefined, receipt.text);
174
- }
175
- if (receipt.terminalState === "failed") {
176
- return result("failed", "error" in receipt ? "ACP_REQUEST_FAILED" : `ACP_${receipt.stopReason.toUpperCase()}`, receipt.text);
177
- }
178
- return result(this.options.provider === "deepseek" ? "unconfirmed" : "delivered", this.options.provider === "deepseek" ? "ACP_OUTCOME_COARSE" : undefined, receipt.text);
179
- }
180
- async close() {
181
- this.closed = true;
182
- this.registrationId = undefined;
183
- this.callbacks = undefined;
184
- this.dropClient();
185
- }
186
- async connect(registrationId) {
187
- if (this.closed || this.registrationId !== registrationId)
188
- return undefined;
189
- if (this.client !== undefined)
190
- return this.client;
191
- if (this.options.launch === undefined || this.now() < this.retryAt) {
192
- this.markStale(this.options.unavailableCode ?? "ACP_LAUNCH_UNAVAILABLE", registrationId);
193
- return undefined;
194
- }
195
- let client;
196
- try {
197
- client = await this.spawnClient(this.options.launch);
198
- if (this.closed || this.registrationId !== registrationId) {
199
- client.close();
200
- return undefined;
201
- }
202
- const session = await client.newSession(this.options.workspace ?? this.options.launch.cwd ?? process.cwd());
203
- if (this.closed || this.registrationId !== registrationId) {
204
- client.close();
205
- return undefined;
206
- }
207
- this.client = client;
208
- this.sessionId = session.sessionId;
209
- this.failures = 0;
210
- this.retryAt = 0;
211
- return client;
212
- }
213
- catch {
214
- client?.close();
215
- this.markStale("ACP_SUBPROCESS_UNAVAILABLE", registrationId);
216
- return undefined;
217
- }
218
- }
219
- markStale(code, registrationId) {
220
- if (this.closed || this.registrationId !== registrationId)
221
- return;
222
- this.dropClient();
223
- const delay = BACKOFF_MS[Math.min(this.failures++, BACKOFF_MS.length - 1)];
224
- this.retryAt = this.now() + delay;
225
- this.emitState("unobserved", code, registrationId);
226
- }
227
- dropClient() {
228
- this.client?.close();
229
- this.client = undefined;
230
- this.sessionId = undefined;
231
- }
232
- resetRegistrationClient() {
233
- this.failures = 0;
234
- this.retryAt = 0;
235
- this.dropClient();
236
- }
237
- emitState(state, safeErrorCode, registrationId = this.registrationId) {
238
- if (registrationId === undefined ||
239
- this.registrationId !== registrationId)
240
- return;
241
- try {
242
- this.callbacks?.onRouteState({
243
- route: {
244
- ...this.identity,
245
- routeHandle: this.routeHandle,
246
- registrationId,
247
- },
248
- state,
249
- observedAt: new Date(this.now()).toISOString(),
250
- ...(safeErrorCode === undefined ? {} : { safeErrorCode }),
251
- });
252
- }
253
- catch {
254
- // Observation is best-effort and never changes semantic settlement.
255
- }
256
- }
257
- }
258
- function cancelPreparedPrompt(prepared) {
259
- try {
260
- prepared.cancel();
261
- }
262
- catch {
263
- // A cancelled preparation has no semantic write authority. Cleanup
264
- // failure cannot convert denial or authorization uncertainty into a send.
265
- }
266
- }
267
- function result(state, safeErrorCode, replyText) {
268
- return {
269
- state,
270
- ...(safeErrorCode === undefined ? {} : { safeErrorCode }),
271
- ...(replyText === undefined || replyText.length === 0 ? {} : { replyText }),
272
- };
273
- }
274
- export const createAcpGatewayProvider = (options) => new AcpGatewayProvider(options);
275
- //# sourceMappingURL=acp-provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"acp-provider.js","sourceRoot":"","sources":["../../../src/gateway/acp-provider.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import type { DashboardLocale } from "./locale.js";
2
- export declare const cliCopyKeys: readonly ["help.usage", "hint.dashboardLiveRequired", "hint.dashboardPortInUse", "hint.controlInvalidResponse", "hint.messageTooLarge", "hint.progressWatchOwnerConflict", "error.input", "error.decision", "error.unavailable", "error.ambiguous", "error.failure", "error.unsafe", "error.tokenUnknown", "error.deliveryTimeout"];
3
- export type CliCopyKey = (typeof cliCopyKeys)[number];
4
- export type CliCopy = Readonly<Record<CliCopyKey, string>>;
5
- export type CliStderrKind = {
6
- [Key in CliCopyKey]: Key extends `error.${infer Kind}` ? Kind : never;
7
- }[CliCopyKey];
8
- export declare function getCliCopy(locale: DashboardLocale): CliCopy;
@@ -1,17 +0,0 @@
1
- export declare const callerIdentityConflictHintEn = "both agent identities were inherited; the Codex App Server daemon may have been started inside an agent session. From a normal terminal, run: codex app-server daemon restart";
2
- export declare const cliCopyEn: {
3
- readonly "help.usage": "Embassy — local messaging for Claude Code and Codex\n\nUsage:\n embassy <command> [options] [--lang en|zh-CN]\n\nCommands:\n serve [--inbound open] Run the socket-only broker (paired inbound by default)\n health Check broker health\n status Read the public status snapshot\n doctor Diagnose Codex Desktop attachment\n convert-state-v2-to-v3 Convert stopped-broker state after making a backup\n refresh-dashboard Refresh discovery and publish both static dashboards\n dashboard --live [--port <n>]\n Open live status and bounded route consent\n register-codex Register or succeed a Codex task\n unregister-codex Unregister the current Codex task\n register-peer --alias <peer-alias> [--token-stdin|--emit-env]\n Register a universal shell peer\n unregister-peer --alias <peer-alias> [--token-stdin]\n Unregister a universal shell peer\n await --alias <peer-alias> [--token-stdin]\n Wait for one peer message and acknowledge stdout\n select-claude Select a discovered Claude session\n unselect-claude Clear the Claude selection\n pair [--from <alias> --to <alias>] Add one cross-provider consent edge\n unpair [--from <alias> --to <alias>] Remove one cross-provider consent edge\n send-to-claude Send stdin to the selected Claude route\n send-to-codex Send stdin to a registered Codex route\n reply Reply with a conversation token\n delivery-status Read a delivery token\n wait-delivery Wait for terminal delivery status\n untrack Close one active progress watch\n\nOptions:\n --lang en|zh-CN Localize user-facing text\n --token-stdin Read the peer token as the first LF-terminated stdin line\n --emit-env Print the first registration token as an export command\n --port <n> Live dashboard port, 1024–65535 (default 41961)\n --version, -v Print the version\n --help, -h Show this help\n";
4
- readonly "hint.dashboardLiveRequired": "dashboard requires --live; static files are published by serve and refresh-dashboard.";
5
- readonly "hint.dashboardPortInUse": "live dashboard port {port} is already in use; close the holding process or choose another with --port <n>.";
6
- readonly "hint.controlInvalidResponse": "client/broker version skew is likely; rebuild or repoint this client to the broker's Embassy installation, then retry.";
7
- readonly "hint.messageTooLarge": "message exceeds the 16 KiB acceptance cap; shorten or split it. For long prose, pipe the body from a file.";
8
- readonly "hint.progressWatchOwnerConflict": "this pair already has a watch owned by the other participant; ask that owner to run `embassy untrack --conversation <conversation-token>` first.";
9
- readonly "error.input": "request rejected.";
10
- readonly "error.decision": "gateway rejected the request.";
11
- readonly "error.unavailable": "gateway unavailable.";
12
- readonly "error.ambiguous": "outcome ambiguous; do not retry automatically.";
13
- readonly "error.failure": "command failed.";
14
- readonly "error.unsafe": "gateway state directory or socket has unexpected permissions or ownership. Verify nothing else controls that path before running embassy serve.";
15
- readonly "error.tokenUnknown": "delivery token not recognized; it may have expired or left bounded retention.";
16
- readonly "error.deliveryTimeout": "the delivery has not settled yet; the gateway is still running. Check again later with embassy delivery-status.";
17
- };
@@ -1,58 +0,0 @@
1
- export const callerIdentityConflictHintEn = "both agent identities were inherited; the Codex App Server daemon may have been started inside an agent session. From a normal terminal, run: codex app-server daemon restart";
2
- export const cliCopyEn = {
3
- "help.usage": `Embassy — local messaging for Claude Code and Codex
4
-
5
- Usage:
6
- embassy <command> [options] [--lang en|zh-CN]
7
-
8
- Commands:
9
- serve [--inbound open] Run the socket-only broker (paired inbound by default)
10
- health Check broker health
11
- status Read the public status snapshot
12
- doctor Diagnose Codex Desktop attachment
13
- convert-state-v2-to-v3 Convert stopped-broker state after making a backup
14
- refresh-dashboard Refresh discovery and publish both static dashboards
15
- dashboard --live [--port <n>]
16
- Open live status and bounded route consent
17
- register-codex Register or succeed a Codex task
18
- unregister-codex Unregister the current Codex task
19
- register-peer --alias <peer-alias> [--token-stdin|--emit-env]
20
- Register a universal shell peer
21
- unregister-peer --alias <peer-alias> [--token-stdin]
22
- Unregister a universal shell peer
23
- await --alias <peer-alias> [--token-stdin]
24
- Wait for one peer message and acknowledge stdout
25
- select-claude Select a discovered Claude session
26
- unselect-claude Clear the Claude selection
27
- pair [--from <alias> --to <alias>] Add one cross-provider consent edge
28
- unpair [--from <alias> --to <alias>] Remove one cross-provider consent edge
29
- send-to-claude Send stdin to the selected Claude route
30
- send-to-codex Send stdin to a registered Codex route
31
- reply Reply with a conversation token
32
- delivery-status Read a delivery token
33
- wait-delivery Wait for terminal delivery status
34
- untrack Close one active progress watch
35
-
36
- Options:
37
- --lang en|zh-CN Localize user-facing text
38
- --token-stdin Read the peer token as the first LF-terminated stdin line
39
- --emit-env Print the first registration token as an export command
40
- --port <n> Live dashboard port, 1024–65535 (default 41961)
41
- --version, -v Print the version
42
- --help, -h Show this help
43
- `,
44
- "hint.dashboardLiveRequired": "dashboard requires --live; static files are published by serve and refresh-dashboard.",
45
- "hint.dashboardPortInUse": "live dashboard port {port} is already in use; close the holding process or choose another with --port <n>.",
46
- "hint.controlInvalidResponse": "client/broker version skew is likely; rebuild or repoint this client to the broker's Embassy installation, then retry.",
47
- "hint.messageTooLarge": "message exceeds the 16 KiB acceptance cap; shorten or split it. For long prose, pipe the body from a file.",
48
- "hint.progressWatchOwnerConflict": "this pair already has a watch owned by the other participant; ask that owner to run `embassy untrack --conversation <conversation-token>` first.",
49
- "error.input": "request rejected.",
50
- "error.decision": "gateway rejected the request.",
51
- "error.unavailable": "gateway unavailable.",
52
- "error.ambiguous": "outcome ambiguous; do not retry automatically.",
53
- "error.failure": "command failed.",
54
- "error.unsafe": "gateway state directory or socket has unexpected permissions or ownership. Verify nothing else controls that path before running embassy serve.",
55
- "error.tokenUnknown": "delivery token not recognized; it may have expired or left bounded retention.",
56
- "error.deliveryTimeout": "the delivery has not settled yet; the gateway is still running. Check again later with embassy delivery-status.",
57
- };
58
- //# sourceMappingURL=cli-copy.en.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-copy.en.js","sourceRoot":"","sources":["../../../src/gateway/cli-copy.en.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,4BAA4B,GACvC,+KAA+K,CAAC;AAElL,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCf;IACC,4BAA4B,EAC1B,uFAAuF;IACzF,yBAAyB,EACvB,4GAA4G;IAC9G,6BAA6B,EAC3B,wHAAwH;IAC1H,sBAAsB,EACpB,4GAA4G;IAC9G,iCAAiC,EAC/B,kJAAkJ;IACpJ,aAAa,EAAE,mBAAmB;IAClC,gBAAgB,EAAE,+BAA+B;IACjD,mBAAmB,EAAE,sBAAsB;IAC3C,iBAAiB,EAAE,gDAAgD;IACnE,eAAe,EAAE,iBAAiB;IAClC,cAAc,EACZ,iJAAiJ;IACnJ,oBAAoB,EAClB,+EAA+E;IACjF,uBAAuB,EACrB,iHAAiH;CACzF,CAAC"}
@@ -1,22 +0,0 @@
1
- import { cliCopyEn } from "./cli-copy.en.js";
2
- import { cliCopyZhCn } from "./cli-copy.zh-CN.js";
3
- export const cliCopyKeys = [
4
- "help.usage",
5
- "hint.dashboardLiveRequired",
6
- "hint.dashboardPortInUse",
7
- "hint.controlInvalidResponse",
8
- "hint.messageTooLarge",
9
- "hint.progressWatchOwnerConflict",
10
- "error.input",
11
- "error.decision",
12
- "error.unavailable",
13
- "error.ambiguous",
14
- "error.failure",
15
- "error.unsafe",
16
- "error.tokenUnknown",
17
- "error.deliveryTimeout",
18
- ];
19
- export function getCliCopy(locale) {
20
- return locale === "zh-CN" ? cliCopyZhCn : cliCopyEn;
21
- }
22
- //# sourceMappingURL=cli-copy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-copy.js","sourceRoot":"","sources":["../../../src/gateway/cli-copy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,YAAY;IACZ,4BAA4B;IAC5B,yBAAyB;IACzB,6BAA6B;IAC7B,sBAAsB;IACtB,iCAAiC;IACjC,aAAa;IACb,gBAAgB;IAChB,mBAAmB;IACnB,iBAAiB;IACjB,eAAe;IACf,cAAc;IACd,oBAAoB;IACpB,uBAAuB;CACf,CAAC;AAQX,MAAM,UAAU,UAAU,CAAC,MAAuB;IAChD,OAAO,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC"}
@@ -1,17 +0,0 @@
1
- export declare const callerIdentityConflictHintZhCn = "\u540C\u65F6\u7EE7\u627F\u4E86\u4E24\u79CD\u4EE3\u7406\u8EAB\u4EFD\uFF1BCodex App Server \u5B88\u62A4\u8FDB\u7A0B\u53EF\u80FD\u662F\u5728\u4EE3\u7406\u4F1A\u8BDD\u5185\u542F\u52A8\u7684\u3002\u8BF7\u5728\u666E\u901A\u7EC8\u7AEF\u4E2D\u8FD0\u884C\uFF1Acodex app-server daemon restart";
2
- export declare const cliCopyZhCn: {
3
- readonly "help.usage": "Embassy — Claude Code 与 Codex 的本地消息通道\n\n用法:\n embassy <command> [options] [--lang en|zh-CN]\n\n命令:\n serve [--inbound open] 在前台运行仅使用套接字的代理(默认配对入站)\n health 检查代理健康状态\n status 读取公开状态快照\n doctor 诊断 Codex 桌面应用连接状态\n convert-state-v2-to-v3 备份后转换已停止代理的状态\n refresh-dashboard 刷新发现结果并发布两份静态仪表盘\n dashboard --live [--port <n>]\n 打开实时状态与有限路由同意操作\n register-codex 注册或继任 Codex 任务\n unregister-codex 注销当前 Codex 任务\n register-peer --alias <对等别名> [--token-stdin|--emit-env]\n 注册通用 shell 对等方\n unregister-peer --alias <对等别名> [--token-stdin]\n 注销通用 shell 对等方\n await --alias <对等别名> [--token-stdin]\n 等待一条对等消息并在标准输出后确认\n select-claude 选择已发现的 Claude 会话\n unselect-claude 清除 Claude 选择\n pair [--from <别名> --to <别名>] 添加一条跨提供商同意边\n unpair [--from <别名> --to <别名>] 移除一条跨提供商同意边\n send-to-claude 将标准输入发送到所选 Claude 路由\n send-to-codex 将标准输入发送到已注册 Codex 路由\n reply 使用会话令牌回复\n delivery-status 读取投递令牌状态\n wait-delivery 等待终结投递状态\n untrack 关闭一个活跃的进度监视\n\n选项:\n --lang en|zh-CN 本地化面向用户的文本\n --token-stdin 从标准输入首个 LF 结尾行读取对等令牌\n --emit-env 将首次注册令牌输出为 export 命令\n --port <n> 实时仪表盘端口,1024–65535(默认 41961)\n --version, -v 输出版本\n --help, -h 显示此帮助\n";
4
- readonly "hint.dashboardLiveRequired": "dashboard 需要 --live;静态文件由 serve 和 refresh-dashboard 发布。";
5
- readonly "hint.dashboardPortInUse": "实时仪表盘端口 {port} 已被占用;请关闭占用进程,或使用 --port <n> 选择其他端口。";
6
- readonly "hint.controlInvalidResponse": "客户端与网关进程的版本可能不一致;请重新构建客户端,或将其重新指向网关进程所使用的 Embassy 安装,然后重试。";
7
- readonly "hint.messageTooLarge": "消息超过 16 KiB 接收上限;请缩短消息或将其拆分。对于长篇内容,请通过管道从文件传入正文。";
8
- readonly "hint.progressWatchOwnerConflict": "此配对已有由另一参与方拥有的监视;请先让该所有者运行 `embassy untrack --conversation <conversation-token>`。";
9
- readonly "error.input": "请求被拒绝。";
10
- readonly "error.decision": "网关拒绝了该请求。";
11
- readonly "error.unavailable": "网关不可用。";
12
- readonly "error.ambiguous": "结果不确定;请勿自动重试。";
13
- readonly "error.failure": "命令失败。";
14
- readonly "error.unsafe": "网关状态目录或套接字的权限或所有者异常。请先确认该路径未被其他进程控制,再运行 embassy serve。";
15
- readonly "error.tokenUnknown": "无法识别该投递令牌;它可能已过期,或已超出有界保留范围。";
16
- readonly "error.deliveryTimeout": "该投递尚未结算;网关仍在运行。请稍后使用 embassy delivery-status 再次查询。";
17
- };
@@ -1,58 +0,0 @@
1
- export const callerIdentityConflictHintZhCn = "同时继承了两种代理身份;Codex App Server 守护进程可能是在代理会话内启动的。请在普通终端中运行:codex app-server daemon restart";
2
- export const cliCopyZhCn = {
3
- "help.usage": `Embassy — Claude Code 与 Codex 的本地消息通道
4
-
5
- 用法:
6
- embassy <command> [options] [--lang en|zh-CN]
7
-
8
- 命令:
9
- serve [--inbound open] 在前台运行仅使用套接字的代理(默认配对入站)
10
- health 检查代理健康状态
11
- status 读取公开状态快照
12
- doctor 诊断 Codex 桌面应用连接状态
13
- convert-state-v2-to-v3 备份后转换已停止代理的状态
14
- refresh-dashboard 刷新发现结果并发布两份静态仪表盘
15
- dashboard --live [--port <n>]
16
- 打开实时状态与有限路由同意操作
17
- register-codex 注册或继任 Codex 任务
18
- unregister-codex 注销当前 Codex 任务
19
- register-peer --alias <对等别名> [--token-stdin|--emit-env]
20
- 注册通用 shell 对等方
21
- unregister-peer --alias <对等别名> [--token-stdin]
22
- 注销通用 shell 对等方
23
- await --alias <对等别名> [--token-stdin]
24
- 等待一条对等消息并在标准输出后确认
25
- select-claude 选择已发现的 Claude 会话
26
- unselect-claude 清除 Claude 选择
27
- pair [--from <别名> --to <别名>] 添加一条跨提供商同意边
28
- unpair [--from <别名> --to <别名>] 移除一条跨提供商同意边
29
- send-to-claude 将标准输入发送到所选 Claude 路由
30
- send-to-codex 将标准输入发送到已注册 Codex 路由
31
- reply 使用会话令牌回复
32
- delivery-status 读取投递令牌状态
33
- wait-delivery 等待终结投递状态
34
- untrack 关闭一个活跃的进度监视
35
-
36
- 选项:
37
- --lang en|zh-CN 本地化面向用户的文本
38
- --token-stdin 从标准输入首个 LF 结尾行读取对等令牌
39
- --emit-env 将首次注册令牌输出为 export 命令
40
- --port <n> 实时仪表盘端口,1024–65535(默认 41961)
41
- --version, -v 输出版本
42
- --help, -h 显示此帮助
43
- `,
44
- "hint.dashboardLiveRequired": "dashboard 需要 --live;静态文件由 serve 和 refresh-dashboard 发布。",
45
- "hint.dashboardPortInUse": "实时仪表盘端口 {port} 已被占用;请关闭占用进程,或使用 --port <n> 选择其他端口。",
46
- "hint.controlInvalidResponse": "客户端与网关进程的版本可能不一致;请重新构建客户端,或将其重新指向网关进程所使用的 Embassy 安装,然后重试。",
47
- "hint.messageTooLarge": "消息超过 16 KiB 接收上限;请缩短消息或将其拆分。对于长篇内容,请通过管道从文件传入正文。",
48
- "hint.progressWatchOwnerConflict": "此配对已有由另一参与方拥有的监视;请先让该所有者运行 `embassy untrack --conversation <conversation-token>`。",
49
- "error.input": "请求被拒绝。",
50
- "error.decision": "网关拒绝了该请求。",
51
- "error.unavailable": "网关不可用。",
52
- "error.ambiguous": "结果不确定;请勿自动重试。",
53
- "error.failure": "命令失败。",
54
- "error.unsafe": "网关状态目录或套接字的权限或所有者异常。请先确认该路径未被其他进程控制,再运行 embassy serve。",
55
- "error.tokenUnknown": "无法识别该投递令牌;它可能已过期,或已超出有界保留范围。",
56
- "error.deliveryTimeout": "该投递尚未结算;网关仍在运行。请稍后使用 embassy delivery-status 再次查询。",
57
- };
58
- //# sourceMappingURL=cli-copy.zh-CN.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-copy.zh-CN.js","sourceRoot":"","sources":["../../../src/gateway/cli-copy.zh-CN.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,8BAA8B,GACzC,yFAAyF,CAAC;AAE5F,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCf;IACC,4BAA4B,EAC1B,yDAAyD;IAC3D,yBAAyB,EACvB,oDAAoD;IACtD,6BAA6B,EAC3B,4DAA4D;IAC9D,sBAAsB,EACpB,kDAAkD;IACpD,iCAAiC,EAC/B,mFAAmF;IACrF,aAAa,EAAE,QAAQ;IACvB,gBAAgB,EAAE,WAAW;IAC7B,mBAAmB,EAAE,QAAQ;IAC7B,iBAAiB,EAAE,eAAe;IAClC,eAAe,EAAE,OAAO;IACxB,cAAc,EACZ,wDAAwD;IAC1D,oBAAoB,EAAE,8BAA8B;IACpD,uBAAuB,EACrB,oDAAoD;CAC5B,CAAC"}
@@ -1,36 +0,0 @@
1
- export declare const CODEX_DOCTOR_MAX_PROCESSES = 512;
2
- export declare const CODEX_DOCTOR_MAX_SOCKET_HOLDERS = 32;
3
- export type CodexDoctorCondition = "split_brain" | "orphaned" | "attached" | "managed_layout_missing" | "unknown";
4
- export type CodexDoctorProcess = Readonly<{
5
- pid: number;
6
- parentPid?: number;
7
- executablePath: string;
8
- bundleIdentifier?: string;
9
- }>;
10
- export type CodexDoctorInspection = Readonly<{
11
- processes: readonly CodexDoctorProcess[];
12
- socketHolderPids: readonly number[];
13
- }>;
14
- export type CodexDoctorInspector = Readonly<{
15
- inspect(request: Readonly<{
16
- socketPath: string;
17
- maximumProcesses: number;
18
- maximumSocketHolders: number;
19
- }>): Promise<CodexDoctorInspection>;
20
- }>;
21
- export type CodexDoctorOptions = Readonly<{
22
- socketPath: string;
23
- daemonExecutablePath: string;
24
- embassyPid: number;
25
- inspector: CodexDoctorInspector;
26
- }>;
27
- export type MissingManagedCodexLayoutOptions = Readonly<Omit<CodexDoctorOptions, "daemonExecutablePath">>;
28
- export type CodexDoctorResult = Readonly<{
29
- conditions: readonly CodexDoctorCondition[];
30
- }>;
31
- /** Returns bounded public state; raw process evidence never crosses this module. */
32
- export declare function diagnoseCodexAttachment(options: CodexDoctorOptions): Promise<CodexDoctorResult>;
33
- /** Missing managed files are actionable only when the fixed private socket is still held outside Embassy. */
34
- export declare function diagnoseMissingManagedCodexLayout(options: MissingManagedCodexLayoutOptions): Promise<CodexDoctorResult>;
35
- /** Bounded macOS inspection; commands and outputs are fixed and private. */
36
- export declare function createSystemCodexDoctorInspector(): CodexDoctorInspector;