agent-embassy 4.1.0 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,14 @@ All notable changes to this project are documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
6
6
 
7
+ ## [4.2.0] - 2026-09-06
8
+
9
+ ### Added
10
+ - Multi-host TUI: independent client-side SSH status panes and existing operator actions on configured hosts, with host-bound retirement confirmation and stale/unsupported-response handling. No broker protocol or state change.
11
+
12
+ ### Fixed
13
+ - Claude socket timeout tests control the timer and synchronize on write start, rather than assuming connection completes post-connect revalidation within 10 ms. A separate pre-write timeout case pins the existing retryable classification.
14
+
7
15
  ## [4.1.0] - 2026-09-06
8
16
 
9
17
  ### Added
package/README.md CHANGED
@@ -14,7 +14,11 @@ identity, so a rename or replacement never silently retargets queued work.
14
14
  ## Requirements
15
15
 
16
16
  - macOS and Node.js 20 or newer.
17
- - Claude Code and/or Codex CLI installed for the agents you use.
17
+ - Claude Code installed for the Claude sessions you use.
18
+ - To receive in Codex, use its managed standalone installation with its App
19
+ Server daemon already running under the same macOS login; merely having a
20
+ `codex` executable on PATH is insufficient, and Embassy does not install or
21
+ start that daemon.
18
22
  - A private `nodes.json` when choosing an explicit host name or federating;
19
23
  first single-machine boot creates one from the short hostname.
20
24
  - Key-based, non-interactive SSH between configured machines when federating.
@@ -31,10 +35,16 @@ The launchd service records the absolute installation path used by
31
35
  `embassy service install`. After replacing or removing that installation, run
32
36
  the install command again.
33
37
 
34
- The agent starts at login and uses launchd's crash-only keepalive policy. A
38
+ `embassy service install` starts the per-user launchd agent immediately and
39
+ arranges login startup; use the same command to reload broker configuration or
40
+ start a stopped installation, and use `embassy service uninstall` to stop and
41
+ unload it.
42
+
43
+ The agent uses launchd's crash-only keepalive policy. A
35
44
  verified `SIGABRT` crash relaunches it. A clean exit, boot refusal, `SIGTERM`,
36
45
  or deliberate `kill -9` leaves it stopped; inspect `embassy service status`
37
- and install/start it deliberately rather than assuming every signal restarts it.
46
+ and run `embassy service install` deliberately rather than assuming every
47
+ signal restarts it.
38
48
 
39
49
  ## Quickstart
40
50
 
@@ -46,11 +56,15 @@ Embassy hosts.
46
56
  {"version":1,"host":"studio","nodes":[]}
47
57
  ```
48
58
 
49
- The file lives at
50
- `$XDG_STATE_HOME/agent-embassy/nodes.json`, or
51
- `~/.local/state/agent-embassy/nodes.json` when `XDG_STATE_HOME` is unset. It
52
- must be owned by the current user, mode 0600, inside the private mode-0700 state
53
- directory. If it is absent on first single-machine boot, Embassy derives a
59
+ `nodes.json` lives inside `EMBASSY_STATE_DIR` when set; otherwise it lives in
60
+ `$XDG_STATE_HOME/agent-embassy`, or `~/.local/state/agent-embassy` when
61
+ `XDG_STATE_HOME` is unset; every client shell must use the same state-directory
62
+ configuration captured by the installed service. Create the private state
63
+ directory before saving the example, and set directory mode 0700 and
64
+ `nodes.json` mode 0600 before installing the service.
65
+
66
+ The file must be owned by the current user, mode 0600, inside the private
67
+ mode-0700 state directory. If it is absent on first single-machine boot, Embassy derives a
54
68
  lower-case name from the short hostname and atomically writes the equivalent
55
69
  empty-node file. It never rewrites a present inventory.
56
70
 
@@ -61,7 +75,17 @@ embassy service install
61
75
  embassy health
62
76
  ```
63
77
 
64
- A Codex task registers itself from that task's inherited identity. Embassy
78
+ Global npm installation includes `skills/embassy-peer` under the
79
+ `agent-embassy` package in `npm root -g`; the operator can copy that entire
80
+ folder into `~/.codex/skills/` and `~/.claude/skills/`, then ask each agent to
81
+ use it, or provide the shown commands directly to the agent's shell tool.
82
+
83
+ Read `host` from the `nodes.json` that first boot created and use it as every
84
+ local `@host` suffix; the examples use `@studio` only when you explicitly chose
85
+ `host: studio`, not as a universal alias suffix.
86
+
87
+ Ask the live Codex CLI task to execute the following registration through its
88
+ shell tool; an ordinary terminal lacks that task's inherited identity. Embassy
65
89
  never accepts or prints the task ID:
66
90
 
67
91
  ```sh
@@ -72,22 +96,35 @@ Claude sessions are discovered and recorded by exact native identity when a
72
96
  Claude caller sends or when a named Claude target is resolved. No helper or
73
97
  native advertisement process is installed.
74
98
 
75
- From either a Claude session or a registered Codex task, send the body on
76
- stdin. The sender is inferred from the calling session:
99
+ After Codex registers `codex-reviewer@studio`, ask the live Claude Code session
100
+ to run `embassy send --to codex-reviewer@studio` with 'Please review the change
101
+ and reply using the supplied Embassy hint' on stdin; execute this through the
102
+ agent's shell tool, not an unrelated terminal. The sender is inferred from the calling session:
77
103
 
78
104
  ```sh
79
- printf '%s\n' 'Please review the change.' |
80
- embassy send --to claude-reviewer@studio
105
+ printf '%s\n' 'Please review the change and reply using the supplied Embassy hint' |
106
+ embassy send --to codex-reviewer@studio
107
+ ```
108
+
109
+ The receiving Codex task sees a broker hint such as:
110
+
111
+ ```text
112
+ <embassy-reply-hint conversation="conv_EXACT_REFERENCE" ...>Reply by running `embassy send --conversation conv_EXACT_REFERENCE` with the reply body on stdin.</embassy-reply-hint>
81
113
  ```
82
114
 
83
- The recipient gets a provenance envelope and a conversation-bound reply
84
- command:
115
+ It must execute the exact received command to send the reply, because ordinary
116
+ Codex final output is not forwarded automatically and `conv_example` is not a
117
+ usable reference:
85
118
 
86
119
  ```sh
87
120
  printf '%s\n' 'Review complete.' |
88
121
  embassy send --conversation conv_example
89
122
  ```
90
123
 
124
+ For a Claude target, find the current Claude target name with an authorized
125
+ `embassy refresh` followed by `embassy status --json`, or use the exact current
126
+ name supplied by that session.
127
+
91
128
  Conversation references are identity-bound, are not aliases, and may survive a
92
129
  broker restart while their retained ledger row and both exact endpoints remain
93
130
  valid. They stop resolving after retirement, replacement, expiry, eviction, or
@@ -114,7 +151,23 @@ See [Delivery semantics](docs/DELIVERY.md) for the phase and receipt contract.
114
151
 
115
152
  ## Multiple machines
116
153
 
117
- List direct peers in each machine's `nodes.json`. The local broker launches:
154
+ Install Embassy and run `embassy service install` on both Macs; for `studio`
155
+ and `laptop`, use `{"version":1,"host":"studio","nodes":["laptop"]}` on
156
+ studio and `{"version":1,"host":"laptop","nodes":["studio"]}` on laptop,
157
+ with each peer name matching both the remote inventory's `host` and a working
158
+ SSH destination or `~/.ssh/config` Host alias.
159
+
160
+ After changing a running broker's inventory, reload it with
161
+ `embassy service install`; register `codex-reviewer@laptop` from the live
162
+ Codex task on laptop, then ask the Claude session on studio to run
163
+ `embassy send --to codex-reviewer@laptop` with the message on stdin.
164
+
165
+ From studio, verify the remote command environment with
166
+ `/usr/bin/ssh laptop 'which -a embassy; node --version; embassy --version'`,
167
+ then verify the corresponding direction from laptop; both remote Node and
168
+ Embassy must resolve without an interactive shell or password prompt.
169
+
170
+ The local broker launches:
118
171
 
119
172
  ```text
120
173
  /usr/bin/ssh <node> embassy peer-stdio
@@ -138,6 +191,16 @@ ask the owner directly.
138
191
 
139
192
  ## Operations
140
193
 
194
+ Retain `result.deliveryToken` from the successful send response in your current
195
+ session and substitute that exact value for the example; status shows aggregate
196
+ route queues and recent delivery metadata but cannot recover a lost delivery
197
+ token or distinguish identical sends by token.
198
+
199
+ The ellipses (`...` or `…`), `conv_example`, `dlv_example`, and `<public-id>`
200
+ are substitutions, not runnable literal values: supply the indicated command
201
+ arguments, exact received conversation reference, exact returned delivery
202
+ token, or public endpoint ID respectively.
203
+
141
204
  ```sh
142
205
  embassy status
143
206
  embassy status --json
@@ -155,14 +218,25 @@ embassy serve # foreground alternative
155
218
  retirements, each local route's last native operation, and the last bounded SSH
156
219
  catalog observation. It does not claim that an idle provider is ready.
157
220
 
158
- `embassy tui` live-updates that metadata in a plain terminal (including over
159
- SSH). On-screen keys select endpoints, confirm exact-ID local retirement,
160
- refresh discovery, run the loopback check, or look up a delivery token.
161
- It never displays message bodies. Remote rows show catalog age, not remote
162
- broker health, queue depth or last operation: those are not reported by the
163
- catalog. Run the TUI on the owning machine to inspect its local ledger.
221
+ Use `delivery-status` to inspect that delivery's phase, pending age or terminal
222
+ code; use `status --json` to identify a stranded local route, and retire it with
223
+ `retire --alias` using its alias or `retire --endpoint` using its public id from `result.routes`,
224
+ understanding that this settles all outstanding work for that endpoint.
225
+
226
+ `embassy tui` shows the local broker and each direct host in `nodes.json` in one
227
+ terminal. Use `[` / `]` to select a host: local status polls every second, while
228
+ independent SSH clients read each remote's `embassy status --json` about every
229
+ five seconds. Each pane reports its own broker's health, queue and last
230
+ operations—not another broker's cached catalog. One hanging host cannot block
231
+ the other panes. No message bodies are displayed.
232
+ On-screen keys refresh, check, look up a token or retire on the selected host.
233
+ Remote actions run the same CLI there over configured non-interactive SSH;
234
+ retirement requires HOST + full endpoint ID confirmation and a fresh supported
235
+ owner snapshot. An uncertain action is never automatically retried.
164
236
  Disconnected views are marked stale; actions are never automatically retried.
165
- Without an interactive terminal, `tui` prints the status text once and exits.
237
+ Without an interactive terminal, `tui` prints local status text once and exits
238
+ without SSH. Unsupported remote response shapes are not guessed; a lazy
239
+ `embassy --version` read identifies only that remote CLI, not its broker version.
166
240
  Deliveries are newest-admitted first, with faults distinguished from successful
167
241
  delivery. Use 1–4 or Tab to change sections, g/G for first/last row, and Esc to
168
242
  return from an action result. Token lookup echoes only the token you type;
@@ -176,7 +250,9 @@ person, while `--json` keeps the envelope.
176
250
 
177
251
  `check` is a broker-only loopback through the real ledger and coordinator. It
178
252
  proves local control, persistence, routing, and receipt handling without
179
- contacting a live Claude or Codex agent. It is not a provider-readiness test.
253
+ contacting a live Claude or Codex agent. Healthy means the Embassy control
254
+ socket and ledger respond; a passing check exercises only broker loopback, so
255
+ neither proves that a Claude session or Codex task can receive or answer a message.
180
256
 
181
257
  `retire` removes one local endpoint identity. Queued and reserved work is
182
258
  cancelled, armed work becomes ambiguous, and accepted work becomes unconfirmed.
@@ -192,9 +268,12 @@ If departed sessions share a name, retire one exactly with
192
268
  provider frames never appear in public output.
193
269
  - Every native write is authorized against the exact current endpoint after
194
270
  preparation. Names are never silently resolved again during an attempt.
195
- - SSH uses the fixed system binary, batch mode, no forwarding, and no shell.
196
- - `health` and `check` describe broker infrastructure, not model readiness or
197
- comprehension.
271
+ - Embassy launches `/usr/bin/ssh` directly without a local shell, in batch mode
272
+ with forwarding disabled; the remote account must resolve the fixed
273
+ `embassy peer-stdio` command in its non-interactive SSH environment.
274
+ - Healthy means the Embassy control socket and ledger respond; a passing check
275
+ exercises only broker loopback, so neither proves that a Claude session or
276
+ Codex task can receive or answer a message.
198
277
 
199
278
  See [Security](SECURITY.md), [Configuration](docs/CONFIGURATION.md), and
200
279
  [Architecture](docs/GATEWAY-ARCHITECTURE.md).
@@ -202,9 +281,19 @@ See [Security](SECURITY.md), [Configuration](docs/CONFIGURATION.md), and
202
281
  ## Upgrading to 4.x
203
282
 
204
283
  Version 4 accepts only fresh private state schema 6 and private control
205
- protocol 5. It does not migrate or read v3 state. Before upgrading, use the old
206
- binary to inspect and settle work, stop the broker, preserve a backup of the
207
- old state, then reset `gateway-state.json`. Keep `nodes.json`.
284
+ protocol 5. It does not migrate or read 3.x state.
285
+
286
+ Before replacing a 3.x installation, use its matching CLI to inspect and
287
+ settle or explicitly abandon pending work; stop a launchd broker with
288
+ `embassy service uninstall` (or stop the foreground serve process) and confirm
289
+ it is stopped with `embassy service status`, back up and move aside only
290
+ `gateway-state.json` in that broker's state directory while retaining
291
+ `nodes.json`, then install 4.0.0, run `embassy service install`, and re-register
292
+ the Codex tasks.
293
+
294
+ All state produced by Embassy 3.x is unsupported by 4.x; preserve the matching
295
+ old binary as well as its old state if rollback may be needed, and never run
296
+ the old and new brokers together. See the [reset procedure](docs/CONFIGURATION.md#private-state-reset).
208
297
 
209
298
  The rollback boundary is the preserved old state plus its matching old binary.
210
299
  Do not point an old binary at schema-6 state or a v4 binary at old state.
@@ -14,6 +14,7 @@ import { runCoreRuntime } from "./runtime.js";
14
14
  import { defaultRunLaunchctl } from "./service-agent.js";
15
15
  import { runCoreServiceCommand } from "./core-service-command.js";
16
16
  import { runTui } from "./tui.js";
17
+ import { createTuiSshClient } from "./tui-ssh.js";
17
18
  import { CORE_VERSION } from "./core-version.js";
18
19
  export { CORE_VERSION } from "./core-version.js";
19
20
  const HELP = `Embassy — named Claude/Codex messaging over local gateways and SSH
@@ -199,8 +200,12 @@ export async function runCoreCli(args, dependencies = {}) {
199
200
  if (command === "tui") {
200
201
  if (args.length !== 1)
201
202
  return invalid();
203
+ const ssh = createTuiSshClient({ nodes: inventory.nodes, env });
202
204
  await runTui({ input: stdin, output: stdout, call, renderStatus, host: inventory.host,
203
- hint: (code) => hint("tui", code, stateDir),
205
+ remote: { hosts: inventory.nodes, call: ssh.call, close: ssh.close },
206
+ hint: (code, host) => host && host !== inventory.host
207
+ ? `On ${host}: ${hint("tui", code, "the configured state directory on that host")}`
208
+ : hint("tui", code, stateDir),
204
209
  ...(dependencies.signal ? { signal: dependencies.signal } : {}) });
205
210
  return 0;
206
211
  }
@@ -1 +1 @@
1
- {"version":3,"file":"core-cli.js","sourceRoot":"","sources":["../../../src/gateway/core-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core-cli.js","sourceRoot":"","sources":["../../../src/gateway/core-cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- export declare const CORE_VERSION = "4.1.0";
1
+ export declare const CORE_VERSION = "4.2.0";
@@ -1,2 +1,2 @@
1
- export const CORE_VERSION = "4.1.0";
1
+ export const CORE_VERSION = "4.2.0";
2
2
  //# sourceMappingURL=core-version.js.map
@@ -0,0 +1,36 @@
1
+ import type { Readable } from "node:stream";
2
+ import { type BrokerCommand } from "./broker-control.js";
3
+ type Child = {
4
+ kill: (signal?: NodeJS.Signals | number) => boolean;
5
+ once: (event: "error" | "close", listener: (...args: any[]) => void) => unknown;
6
+ stdout: Pick<Readable, "on">;
7
+ stderr: Pick<Readable, "on">;
8
+ };
9
+ type SshOptions = {
10
+ env: NodeJS.ProcessEnv;
11
+ shell: false;
12
+ stdio: ["ignore", "pipe", "pipe"];
13
+ };
14
+ export type TuiSshSpawn = (command: string, args: readonly string[], options: SshOptions) => Child;
15
+ type Timer = ReturnType<typeof setTimeout>;
16
+ type Timers = Readonly<{
17
+ setTimeout: (callback: () => void, milliseconds: number) => Timer;
18
+ clearTimeout: (timer: Timer) => void;
19
+ }>;
20
+ export declare class TuiSshError extends Error {
21
+ readonly code: string;
22
+ readonly detail: Readonly<{
23
+ detail: string;
24
+ }> | undefined;
25
+ constructor(code: string, detail?: string);
26
+ }
27
+ export declare function createTuiSshClient(options: Readonly<{
28
+ nodes: readonly string[];
29
+ env?: NodeJS.ProcessEnv;
30
+ spawn?: TuiSshSpawn;
31
+ timers?: Timers;
32
+ }>): Readonly<{
33
+ call: (host: string, command: BrokerCommand) => Promise<unknown>;
34
+ close: () => void;
35
+ }>;
36
+ export {};
@@ -0,0 +1,199 @@
1
+ import { spawn as nodeSpawn } from "node:child_process";
2
+ import { TextDecoder } from "node:util";
3
+ import { isBrokerResult } from "./broker-control.js";
4
+ const STDOUT_LIMIT = 256 * 1024;
5
+ const STDERR_LIMIT = 64 * 1024;
6
+ const HOST = /^[a-z0-9](?:[a-z0-9.-]{0,61}[a-z0-9])?$/;
7
+ const ENDPOINT = /^reg_[A-Za-z0-9_-]{1,252}$/;
8
+ const DELIVERY = /^dlv_[A-Za-z0-9_-]{24}$/;
9
+ const UNCERTAIN = new Set(["HANDLER_FAILURE", "INVALID_HANDLER_RESPONSE", "GATEWAY_STATE_COMMIT_OUTCOME_UNKNOWN"]);
10
+ const object = (value) => !!value && typeof value === "object" && !Array.isArray(value);
11
+ const exact = (value, keys) => object(value) &&
12
+ Object.keys(value).length === keys.length && keys.every((key) => Object.hasOwn(value, key));
13
+ const safeCode = (value) => typeof value === "string" && /^[A-Z][A-Z0-9_]{0,63}$/.test(value);
14
+ const cleanEnvironment = (env) => Object.fromEntries(["HOME", "USER", "LOGNAME", "SSH_AUTH_SOCK"].flatMap((key) => env[key] === undefined ? [] : [[key, env[key]]]));
15
+ export class TuiSshError extends Error {
16
+ code;
17
+ detail;
18
+ constructor(code, detail) {
19
+ super(code);
20
+ this.code = code;
21
+ this.name = "TuiSshError";
22
+ this.detail = detail === undefined ? undefined : { detail };
23
+ }
24
+ }
25
+ function invocation(command) {
26
+ const empty = (value) => exact(value, []);
27
+ switch (command.method) {
28
+ case "list_snapshot":
29
+ if (empty(command.params))
30
+ return { cli: "status", args: ["--json"], timeout: 8_000, mutating: false };
31
+ break;
32
+ case "refresh_discovery":
33
+ if (empty(command.params))
34
+ return { cli: "refresh", args: [], timeout: 15_000, mutating: true };
35
+ break;
36
+ case "check":
37
+ if (empty(command.params))
38
+ return { cli: "check", args: [], timeout: 30_000, mutating: true };
39
+ break;
40
+ case "delivery_status":
41
+ if (exact(command.params, ["token"]) && DELIVERY.test(command.params.token))
42
+ return { cli: "delivery-status", args: ["--token", command.params.token], timeout: 8_000, mutating: false };
43
+ break;
44
+ case "retire_route":
45
+ if ("endpoint" in command.params && exact(command.params, ["endpoint"]) && ENDPOINT.test(command.params.endpoint))
46
+ return { cli: "retire", args: ["--endpoint", command.params.endpoint], timeout: 15_000, mutating: true };
47
+ break;
48
+ }
49
+ throw new TuiSshError("INVALID_REQUEST");
50
+ }
51
+ export function createTuiSshClient(options) {
52
+ if (options.nodes.length > 32 || new Set(options.nodes).size !== options.nodes.length || options.nodes.some((node) => !HOST.test(node)))
53
+ throw new TypeError("Invalid TUI SSH nodes");
54
+ const nodes = new Set(options.nodes), active = new Map();
55
+ const env = cleanEnvironment(options.env ?? process.env);
56
+ const spawn = options.spawn ?? ((command, args, spawnOptions) => nodeSpawn(command, [...args], spawnOptions));
57
+ const timers = options.timers ?? { setTimeout, clearTimeout };
58
+ let closing = false;
59
+ const stop = (entry) => {
60
+ if (entry.stopping)
61
+ return;
62
+ entry.stopping = true;
63
+ entry.child.kill("SIGTERM");
64
+ entry.killTimer = timers.setTimeout(() => entry.child.kill("SIGKILL"), 1_000);
65
+ entry.killTimer.unref?.();
66
+ };
67
+ const run = (host, args, timeout, mutating) => {
68
+ if (closing)
69
+ return Promise.reject(new TuiSshError("CONTROL_UNAVAILABLE"));
70
+ if (!nodes.has(host))
71
+ return Promise.reject(new TuiSshError("PEER_NOT_CONFIGURED"));
72
+ if (active.has(host))
73
+ return Promise.reject(new TuiSshError("ROUTE_BUSY"));
74
+ let child;
75
+ try {
76
+ child = spawn("/usr/bin/ssh", ["-T", "-x", "-o", "BatchMode=yes", "-o", "ClearAllForwardings=yes",
77
+ "-o", "ForwardAgent=no", "-o", "PermitLocalCommand=no", "-o", "SendEnv=-*", "-o", "Tunnel=no",
78
+ host, "embassy", ...args], { env, shell: false, stdio: ["ignore", "pipe", "pipe"] });
79
+ }
80
+ catch {
81
+ return Promise.reject(new TuiSshError("PEER_TUNNEL_UNAVAILABLE"));
82
+ }
83
+ const entry = { child };
84
+ active.set(host, entry);
85
+ return new Promise((resolve, reject) => {
86
+ const stdout = [];
87
+ let stdoutBytes = 0, stderrBytes = 0, settled = false, invalidOutput = false;
88
+ const finish = (error, value) => {
89
+ if (settled)
90
+ return;
91
+ settled = true;
92
+ timers.clearTimeout(wall);
93
+ error ? reject(error) : resolve(value);
94
+ };
95
+ const failed = () => new TuiSshError(mutating ? "CONTROL_WRITE_OUTCOME_AMBIGUOUS" : "PEER_TUNNEL_UNAVAILABLE");
96
+ child.stdout.on("data", (chunk) => {
97
+ stdoutBytes += chunk.length;
98
+ if (stdoutBytes > STDOUT_LIMIT) {
99
+ invalidOutput = true;
100
+ stop(entry);
101
+ }
102
+ else
103
+ stdout.push(Buffer.from(chunk));
104
+ });
105
+ child.stderr.on("data", (chunk) => {
106
+ stderrBytes += chunk.length;
107
+ if (stderrBytes > STDERR_LIMIT) {
108
+ finish(failed());
109
+ stop(entry);
110
+ }
111
+ });
112
+ child.once("error", () => finish(failed()));
113
+ child.once("close", (code) => {
114
+ if (entry.killTimer)
115
+ timers.clearTimeout(entry.killTimer);
116
+ if (active.get(host) === entry)
117
+ active.delete(host);
118
+ if (settled)
119
+ return;
120
+ if (stdoutBytes === 0 || code === null)
121
+ return finish(failed());
122
+ if (invalidOutput)
123
+ return finish(new TuiSshError(mutating ? "CONTROL_WRITE_OUTCOME_AMBIGUOUS" : "CONTROL_INVALID_RESPONSE"));
124
+ try {
125
+ finish(undefined, new TextDecoder("utf-8", { fatal: true }).decode(Buffer.concat(stdout)));
126
+ }
127
+ catch {
128
+ finish(new TuiSshError(mutating ? "CONTROL_WRITE_OUTCOME_AMBIGUOUS" : "CONTROL_INVALID_RESPONSE"));
129
+ }
130
+ });
131
+ const wall = timers.setTimeout(() => { finish(failed()); stop(entry); }, timeout);
132
+ wall.unref?.();
133
+ });
134
+ };
135
+ const version = async (host) => {
136
+ try {
137
+ const output = await run(host, ["--version"], 8_000, false);
138
+ if (Buffer.byteLength(output) > 128)
139
+ return "unknown";
140
+ const match = /^embassy ([0-9]+\.[0-9]+\.[0-9]+(?:-[A-Za-z0-9.-]+)?)\n?$/.exec(output);
141
+ return match?.[1] ?? "unknown";
142
+ }
143
+ catch {
144
+ return "unknown";
145
+ }
146
+ };
147
+ const call = async (host, command) => {
148
+ const request = invocation(command);
149
+ let output;
150
+ try {
151
+ output = await run(host, [request.cli, ...request.args], request.timeout, request.mutating);
152
+ }
153
+ catch (error) {
154
+ if (!request.mutating && error instanceof TuiSshError && error.code === "CONTROL_INVALID_RESPONSE") {
155
+ const observed = await version(host);
156
+ throw new TuiSshError("CONTROL_INVALID_RESPONSE", `unsupported response — remote CLI version ${observed}`);
157
+ }
158
+ throw error;
159
+ }
160
+ const unsupported = async () => {
161
+ if (request.mutating)
162
+ throw new TuiSshError("CONTROL_WRITE_OUTCOME_AMBIGUOUS");
163
+ const observed = await version(host);
164
+ throw new TuiSshError("CONTROL_INVALID_RESPONSE", `unsupported response — remote CLI version ${observed}`);
165
+ };
166
+ let envelope;
167
+ if (output.indexOf("\n") !== output.length - 1)
168
+ return await unsupported();
169
+ try {
170
+ envelope = JSON.parse(output.slice(0, -1));
171
+ }
172
+ catch {
173
+ return await unsupported();
174
+ }
175
+ if (!object(envelope) || envelope.command !== request.cli || typeof envelope.ok !== "boolean")
176
+ return await unsupported();
177
+ if (envelope.ok === false) {
178
+ if (!exact(envelope, ["ok", "command", "error"]) || !exact(envelope.error, ["code"]) || !safeCode(envelope.error.code))
179
+ return await unsupported();
180
+ if (request.mutating && UNCERTAIN.has(envelope.error.code))
181
+ throw new TuiSshError("CONTROL_WRITE_OUTCOME_AMBIGUOUS");
182
+ throw new TuiSshError(envelope.error.code);
183
+ }
184
+ if (!exact(envelope, ["ok", "command", "result"]) || !isBrokerResult(command.method, envelope.result))
185
+ return await unsupported();
186
+ if ((command.method === "list_snapshot" || command.method === "refresh_discovery") &&
187
+ envelope.result.routes.some((row) => row.host !== host))
188
+ throw new TuiSshError(request.mutating ? "CONTROL_WRITE_OUTCOME_AMBIGUOUS" : "CONTROL_INVALID_RESPONSE", request.mutating ? undefined : "host mismatch");
189
+ return envelope.result;
190
+ };
191
+ return { call, close: () => {
192
+ if (closing)
193
+ return;
194
+ closing = true;
195
+ for (const entry of active.values())
196
+ stop(entry);
197
+ } };
198
+ }
199
+ //# sourceMappingURL=tui-ssh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-ssh.js","sourceRoot":"","sources":["../../../src/gateway/tui-ssh.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,12 @@ export type TuiDependencies = Readonly<{
21
21
  call: (command: BrokerCommand) => Promise<unknown>;
22
22
  renderStatus: (snapshot: unknown) => string;
23
23
  host?: string;
24
- hint?: (code: string) => string;
24
+ hint?: (code: string, host?: string) => string;
25
+ remote?: Readonly<{
26
+ hosts: readonly string[];
27
+ call: (host: string, command: BrokerCommand) => Promise<unknown>;
28
+ close: () => void;
29
+ }>;
25
30
  signal?: AbortSignal;
26
31
  }>;
27
32
  type Obj = Record<string, unknown>;
@@ -44,6 +49,7 @@ export type TuiModel = {
44
49
  snapshotAt?: number;
45
50
  staleSince?: number;
46
51
  error?: string;
52
+ errorDetail?: string;
47
53
  action?: string;
48
54
  actionRunning?: boolean;
49
55
  host?: string;