agent-embassy 4.1.0 → 4.3.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 (45) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +135 -35
  3. package/SECURITY.md +25 -11
  4. package/dist/src/gateway/broker-control.js +9 -2
  5. package/dist/src/gateway/broker-control.js.map +1 -1
  6. package/dist/src/gateway/broker.d.ts +14 -0
  7. package/dist/src/gateway/broker.js +6 -2
  8. package/dist/src/gateway/broker.js.map +1 -1
  9. package/dist/src/gateway/codex-discovery.d.ts +42 -0
  10. package/dist/src/gateway/codex-discovery.js +604 -0
  11. package/dist/src/gateway/codex-discovery.js.map +1 -0
  12. package/dist/src/gateway/codex-stateless-transport.d.ts +1 -1
  13. package/dist/src/gateway/codex-stateless-transport.js +126 -18
  14. package/dist/src/gateway/codex-stateless-transport.js.map +1 -1
  15. package/dist/src/gateway/core-cli.js +14 -6
  16. package/dist/src/gateway/core-cli.js.map +1 -1
  17. package/dist/src/gateway/core-version.d.ts +1 -1
  18. package/dist/src/gateway/core-version.js +1 -1
  19. package/dist/src/gateway/endpoint-directory.d.ts +12 -0
  20. package/dist/src/gateway/endpoint-directory.js +94 -4
  21. package/dist/src/gateway/endpoint-directory.js.map +1 -1
  22. package/dist/src/gateway/ledger-codec.js +11 -6
  23. package/dist/src/gateway/ledger-codec.js.map +1 -1
  24. package/dist/src/gateway/ledger.d.ts +2 -1
  25. package/dist/src/gateway/ledger.js +5 -2
  26. package/dist/src/gateway/ledger.js.map +1 -1
  27. package/dist/src/gateway/local-control.d.ts +1 -1
  28. package/dist/src/gateway/local-control.js +1 -1
  29. package/dist/src/gateway/owned-state.d.ts +1 -0
  30. package/dist/src/gateway/owned-state.js +1 -1
  31. package/dist/src/gateway/owned-state.js.map +1 -1
  32. package/dist/src/gateway/runtime.d.ts +4 -2
  33. package/dist/src/gateway/runtime.js +18 -5
  34. package/dist/src/gateway/runtime.js.map +1 -1
  35. package/dist/src/gateway/tui-ssh.d.ts +36 -0
  36. package/dist/src/gateway/tui-ssh.js +199 -0
  37. package/dist/src/gateway/tui-ssh.js.map +1 -0
  38. package/dist/src/gateway/tui.d.ts +8 -1
  39. package/dist/src/gateway/tui.js +103 -53
  40. package/dist/src/gateway/tui.js.map +1 -1
  41. package/docs/CONFIGURATION.md +116 -24
  42. package/docs/DELIVERY.md +18 -6
  43. package/docs/GATEWAY-ARCHITECTURE.md +50 -25
  44. package/package.json +2 -2
  45. package/skills/embassy-peer/SKILL.md +27 -9
@@ -1,6 +1,7 @@
1
1
  import { ClaudePeerAdapter } from "./claude-peer.js";
2
2
  import { type AttestedClaudePeerRuntime } from "./claude-runtime.js";
3
3
  import { type StatelessCodexOperationTransport } from "./codex-stateless-transport.js";
4
+ import { createCodexDiscoveryObserver } from "./codex-discovery.js";
4
5
  import { type GatewayConfig } from "./config.js";
5
6
  import { type Destination } from "./coordinator.js";
6
7
  import { type ClaudeDirectoryAdapter, type RemoteEndpointResolver } from "./endpoint-directory.js";
@@ -30,12 +31,13 @@ export type CoreRuntimeDependencies = Readonly<{
30
31
  attestClaudeRuntime?: () => Promise<AttestedClaudePeerRuntime>;
31
32
  createClaudePeer?: (runtime: AttestedClaudePeerRuntime, config: GatewayConfig) => RuntimeClaudePeer;
32
33
  createCodexOperation?: (env: NodeJS.ProcessEnv) => StatelessCodexOperationTransport;
34
+ createCodexDiscovery?: (...args: Parameters<typeof createCodexDiscoveryObserver>) => ReturnType<typeof createCodexDiscoveryObserver> | undefined;
33
35
  createFederation?: (host: string, nodes: readonly string[]) => RuntimeFederation;
34
36
  serveControl?: typeof serveLocalControl;
35
37
  addSignalListener?: (signal: SignalName, listener: () => void) => void;
36
38
  removeSignalListener?: (signal: SignalName, listener: () => void) => void;
37
39
  }>;
38
- /** Assemble the schema-6 broker. Construction is inert: provider and SSH I/O starts
39
- * only when an addressed operation reaches its destination. */
40
+ /** Assemble the schema-7 broker. The bounded Codex metadata observer starts only
41
+ * after control and state ownership are established; provider writes stay per-operation. */
40
42
  export declare function runCoreRuntime(options: CoreRuntimeOptions, dependencies?: CoreRuntimeDependencies): Promise<void>;
41
43
  export {};
@@ -7,6 +7,7 @@ import { MessagingBroker } from "./broker.js";
7
7
  import { ClaudePeerAdapter } from "./claude-peer.js";
8
8
  import { attestClaudePeerRuntime } from "./claude-runtime.js";
9
9
  import { createStatelessCodexOperationTransport } from "./codex-stateless-transport.js";
10
+ import { createCodexDiscoveryObserver } from "./codex-discovery.js";
10
11
  import { loadGatewayConfig, defaultGatewayStateDir } from "./config.js";
11
12
  import { Coordinator } from "./coordinator.js";
12
13
  import { EndpointDirectory } from "./endpoint-directory.js";
@@ -20,8 +21,8 @@ import { OwnedStateFile } from "./owned-state.js";
20
21
  const leaseLost = () => new BridgeError("GATEWAY_INSTANCE_LEASE_LOST", "Embassy lost its host-wide gateway lease and shut down.", true);
21
22
  const cancelled = () => new BridgeError("GATEWAY_START_CANCELLED", "Gateway startup was cancelled before it became ready.", true);
22
23
  const codexEnvironment = (env) => Object.fromEntries(["HOME", "USER", "LOGNAME"].flatMap((key) => env[key] === undefined ? [] : [[key, env[key]]]));
23
- /** Assemble the schema-6 broker. Construction is inert: provider and SSH I/O starts
24
- * only when an addressed operation reaches its destination. */
24
+ /** Assemble the schema-7 broker. The bounded Codex metadata observer starts only
25
+ * after control and state ownership are established; provider writes stay per-operation. */
25
26
  export async function runCoreRuntime(options, dependencies = {}) {
26
27
  const env = options.env ?? process.env;
27
28
  const d = {
@@ -33,6 +34,7 @@ export async function runCoreRuntime(options, dependencies = {}) {
33
34
  attestClaudeRuntime: dependencies.attestClaudeRuntime ?? attestClaudePeerRuntime,
34
35
  createClaudePeer: dependencies.createClaudePeer ?? ((runtime, config) => new ClaudePeerAdapter({ ...runtime })),
35
36
  createCodexOperation: dependencies.createCodexOperation ?? ((source) => createStatelessCodexOperationTransport({ local: { environment: codexEnvironment(source) } })),
37
+ createCodexDiscovery: dependencies.createCodexDiscovery ?? createCodexDiscoveryObserver,
36
38
  createFederation: dependencies.createFederation ?? ((host, nodes) => new Federation({ host, nodes })),
37
39
  serveControl: dependencies.serveControl ?? serveLocalControl,
38
40
  add: dependencies.addSignalListener ?? ((signal, listener) => process.on(signal, listener)),
@@ -57,6 +59,7 @@ export async function runCoreRuntime(options, dependencies = {}) {
57
59
  let control, broker;
58
60
  let claude, loopback;
59
61
  let federation;
62
+ let discovery;
60
63
  let primary;
61
64
  try {
62
65
  if (controller.signal.aborted)
@@ -117,11 +120,20 @@ export async function runCoreRuntime(options, dependencies = {}) {
117
120
  const codex = new CodexDestination({ host: config.hostId, operation: d.createCodexOperation(env) });
118
121
  loopback = new LoopbackDestination(codex);
119
122
  federation = d.createFederation(config.hostId, config.peerNodes);
120
- const directory = new EndpointDirectory({ host: config.hostId, limits: ledgerLimits, store, claude: peer, remote: federation });
123
+ const directory = new EndpointDirectory({ host: config.hostId, limits: ledgerLimits, store, claude: peer, remote: federation,
124
+ automaticCodex: true });
125
+ let codexObservation = { complete: false, truncated: false };
126
+ discovery = d.createCodexDiscovery({ hostId: config.hostId, local: { environment: codexEnvironment(env) },
127
+ maxEndpoints: ledgerLimits.endpoints, onSnapshot: async (snapshot) => {
128
+ assertWrite();
129
+ const result = await directory.reconcileCodex(snapshot.threads, snapshot.removedIds, snapshot.observation.truncated, snapshot.observation.complete);
130
+ codexObservation = { ...snapshot.observation, truncated: snapshot.observation.truncated || result.truncated };
131
+ } });
121
132
  const coordinator = new Coordinator({ host: config.hostId, limits: ledgerLimits, store, claude,
122
133
  codex: loopback, ssh: federation, resolve: (identity) => directory.exact(identity), assertWritable: assertWrite });
123
134
  broker = new MessagingBroker({ host: config.hostId, limits: ledgerLimits, store, directory, coordinator,
124
- nodes: config.peerNodes, steeringEnabled: config.steeringEnabled, federation });
135
+ nodes: config.peerNodes, steeringEnabled: config.steeringEnabled, federation,
136
+ ...(discovery ? { codexDiscovery: { refresh: () => discovery.refresh(), observation: () => codexObservation } } : {}) });
125
137
  control = await d.serveControl({ stateDir: config.stateDir, socketPath: config.controlSocketPath,
126
138
  handle: (input) => {
127
139
  if (!ready || controller.signal.aborted)
@@ -136,6 +148,7 @@ export async function runCoreRuntime(options, dependencies = {}) {
136
148
  await broker.start();
137
149
  assertStarting();
138
150
  ready = true;
151
+ discovery?.start();
139
152
  const announced = Promise.resolve(options.onReady({ status: "ready", hostId: config.hostId,
140
153
  codexMode: "native_messaging" })).then(() => ({ kind: "ready" }), (error) => ({ kind: "error", error }));
141
154
  const publication = await Promise.race([announced, stopped.then(() => ({ kind: "stopped" })),
@@ -156,7 +169,7 @@ export async function runCoreRuntime(options, dependencies = {}) {
156
169
  d.remove("SIGINT", stop);
157
170
  d.remove("SIGTERM", stop);
158
171
  const failures = [];
159
- for (const resource of [control, broker, ...(broker === undefined ? [loopback, claude, federation] : []), store]) {
172
+ for (const resource of [control, discovery, broker, ...(broker === undefined ? [loopback, claude, federation] : []), store]) {
160
173
  if (resource !== undefined)
161
174
  await resource.close().catch((error) => failures.push(error));
162
175
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/gateway/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/gateway/runtime.ts"],"names":[],"mappings":"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"}
@@ -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>;
@@ -37,6 +42,7 @@ type EndpointRow = Readonly<{
37
42
  lastOperation?: Obj;
38
43
  observedAt?: string;
39
44
  safeErrorCode?: string;
45
+ codex?: Obj;
40
46
  placeholder?: boolean;
41
47
  }>;
42
48
  export type TuiModel = {
@@ -44,6 +50,7 @@ export type TuiModel = {
44
50
  snapshotAt?: number;
45
51
  staleSince?: number;
46
52
  error?: string;
53
+ errorDetail?: string;
47
54
  action?: string;
48
55
  actionRunning?: boolean;
49
56
  host?: string;