agent-relay 11.8.0 → 11.8.2
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/README.md +18 -3
- package/dist/cli/agent-relay-mcp.d.ts.map +1 -1
- package/dist/cli/agent-relay-mcp.js +61 -1
- package/dist/cli/agent-relay-mcp.js.map +1 -1
- package/dist/cli/bootstrap.d.ts.map +1 -1
- package/dist/cli/bootstrap.js +2 -0
- package/dist/cli/bootstrap.js.map +1 -1
- package/dist/cli/commands/fleet-agent.d.ts +14 -5
- package/dist/cli/commands/fleet-agent.d.ts.map +1 -1
- package/dist/cli/commands/fleet-agent.js +0 -0
- package/dist/cli/commands/fleet-agent.js.map +1 -1
- package/dist/cli/commands/fleet.d.ts +3 -0
- package/dist/cli/commands/fleet.d.ts.map +1 -1
- package/dist/cli/commands/fleet.js +230 -63
- package/dist/cli/commands/fleet.js.map +1 -1
- package/dist/cli/commands/observer.d.ts +28 -0
- package/dist/cli/commands/observer.d.ts.map +1 -0
- package/dist/cli/commands/observer.js +182 -0
- package/dist/cli/commands/observer.js.map +1 -0
- package/dist/cli/commands/session.d.ts +7 -1
- package/dist/cli/commands/session.d.ts.map +1 -1
- package/dist/cli/commands/session.js +29 -12
- package/dist/cli/commands/session.js.map +1 -1
- package/dist/cli/lib/attach-input-recovery.d.ts +30 -6
- package/dist/cli/lib/attach-input-recovery.d.ts.map +1 -1
- package/dist/cli/lib/attach-input-recovery.js +49 -1
- package/dist/cli/lib/attach-input-recovery.js.map +1 -1
- package/dist/cli/lib/attach.d.ts.map +1 -1
- package/dist/cli/lib/attach.js +10 -0
- package/dist/cli/lib/attach.js.map +1 -1
- package/dist/cli/lib/fleet-hint.d.ts.map +1 -1
- package/dist/cli/lib/fleet-hint.js +41 -13
- package/dist/cli/lib/fleet-hint.js.map +1 -1
- package/dist/cli/lib/fleet-live-agents.d.ts +42 -0
- package/dist/cli/lib/fleet-live-agents.d.ts.map +1 -0
- package/dist/cli/lib/fleet-live-agents.js +63 -0
- package/dist/cli/lib/fleet-live-agents.js.map +1 -0
- package/dist/cli/lib/message-delivery-receipts.d.ts +24 -0
- package/dist/cli/lib/message-delivery-receipts.d.ts.map +1 -1
- package/dist/cli/lib/message-delivery-receipts.js +39 -0
- package/dist/cli/lib/message-delivery-receipts.js.map +1 -1
- package/dist/cli/lib/observer-url.d.ts +32 -0
- package/dist/cli/lib/observer-url.d.ts.map +1 -0
- package/dist/cli/lib/observer-url.js +61 -0
- package/dist/cli/lib/observer-url.js.map +1 -0
- package/dist/cli/mcp/messaging-tools.d.ts.map +1 -1
- package/dist/cli/mcp/messaging-tools.js +21 -7
- package/dist/cli/mcp/messaging-tools.js.map +1 -1
- package/dist/index.cjs +238 -62
- package/package.json +9 -9
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agent-relay observer` — mint a scoped, read-only observer link.
|
|
3
|
+
*
|
|
4
|
+
* The engine rejects a workspace key (`rk_live_`) on the realtime endpoint, and
|
|
5
|
+
* a workspace key is an administrative credential that has no business in a URL
|
|
6
|
+
* or a terminal transcript. This command mints a scoped `ot_live_` token instead
|
|
7
|
+
* and prints the observer URL built from it, so "let a human follow along" is a
|
|
8
|
+
* single command rather than a hand-rolled API call.
|
|
9
|
+
*/
|
|
10
|
+
import { InvalidArgumentError } from 'commander';
|
|
11
|
+
import { createObserverToken, listObserverTokens, revokeObserverToken, } from '@agent-relay/sdk';
|
|
12
|
+
import { DEFAULT_OBSERVER_EXPIRES, DEFAULT_OBSERVER_URL, observerUrl, resolveObserverBaseUrl, } from '../lib/observer-url.js';
|
|
13
|
+
import { printJson, runSdk, withSdkDefaults } from '../lib/sdk-command.js';
|
|
14
|
+
import { resolveBaseUrl, resolveWorkspaceKey } from '../lib/sdk-client.js';
|
|
15
|
+
const MAX_CHANNEL_FILTERS = 50;
|
|
16
|
+
function withObserverDefaults(overrides = {}) {
|
|
17
|
+
return {
|
|
18
|
+
...withSdkDefaults(overrides),
|
|
19
|
+
createObserverToken,
|
|
20
|
+
listObserverTokens,
|
|
21
|
+
revokeObserverToken,
|
|
22
|
+
now: () => Date.now(),
|
|
23
|
+
randomSuffix: () => Math.random().toString(36).slice(2, 10),
|
|
24
|
+
...overrides,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Parse a `30m` / `24h` / `7d` duration into milliseconds. Bare digits are
|
|
29
|
+
* rejected rather than guessed at — `--expires 24` is far more likely to mean
|
|
30
|
+
* hours than milliseconds, and silently picking either would be wrong.
|
|
31
|
+
*/
|
|
32
|
+
export function parseDuration(value) {
|
|
33
|
+
const match = /^(\d+)([mhd])$/.exec(value.trim());
|
|
34
|
+
if (!match) {
|
|
35
|
+
throw new InvalidArgumentError('Expected a duration like 30m, 24h, or 7d.');
|
|
36
|
+
}
|
|
37
|
+
const amount = Number(match[1]);
|
|
38
|
+
if (amount <= 0) {
|
|
39
|
+
throw new InvalidArgumentError('Expected a positive duration.');
|
|
40
|
+
}
|
|
41
|
+
const unitMs = { m: 60_000, h: 3_600_000, d: 86_400_000 }[match[2]];
|
|
42
|
+
const total = amount * unitMs;
|
|
43
|
+
// The engine caps nothing here, but a token outliving the workspace is a
|
|
44
|
+
// liability rather than a convenience.
|
|
45
|
+
if (total > 90 * 86_400_000) {
|
|
46
|
+
throw new InvalidArgumentError('Expected a duration of 90d or less.');
|
|
47
|
+
}
|
|
48
|
+
return total;
|
|
49
|
+
}
|
|
50
|
+
function parseChannels(value) {
|
|
51
|
+
const names = value
|
|
52
|
+
.split(',')
|
|
53
|
+
.map((name) => name.trim().replace(/^#/, ''))
|
|
54
|
+
.filter(Boolean);
|
|
55
|
+
if (names.length === 0) {
|
|
56
|
+
throw new InvalidArgumentError('Expected at least one channel name.');
|
|
57
|
+
}
|
|
58
|
+
// Collapse duplicates before enforcing the cap: `--channels a,a,a` is one
|
|
59
|
+
// filter, and rejecting it for exceeding a limit it never reaches would be
|
|
60
|
+
// surprising.
|
|
61
|
+
const unique = [...new Set(names)];
|
|
62
|
+
if (unique.length > MAX_CHANNEL_FILTERS) {
|
|
63
|
+
throw new InvalidArgumentError(`Expected at most ${MAX_CHANNEL_FILTERS} channel names.`);
|
|
64
|
+
}
|
|
65
|
+
return unique;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Credentials shared by every observer subcommand. `baseUrl` is spread rather
|
|
69
|
+
* than passed as `undefined` because the SDK options treat an explicit
|
|
70
|
+
* `undefined` and an absent key differently.
|
|
71
|
+
*/
|
|
72
|
+
function connection(options) {
|
|
73
|
+
const baseUrl = resolveBaseUrl({ baseUrl: options.baseUrl });
|
|
74
|
+
return {
|
|
75
|
+
workspaceKey: resolveWorkspaceKey({
|
|
76
|
+
workspaceKey: options.workspaceKey,
|
|
77
|
+
}),
|
|
78
|
+
...(baseUrl ? { baseUrl } : {}),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function describeToken(token) {
|
|
82
|
+
return {
|
|
83
|
+
id: token.id,
|
|
84
|
+
name: token.name,
|
|
85
|
+
status: token.status,
|
|
86
|
+
expiresAt: token.expiresAt,
|
|
87
|
+
createdAt: token.createdAt,
|
|
88
|
+
...(token.lastUsedAt === undefined ? {} : { lastUsedAt: token.lastUsedAt }),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export function registerObserverCommands(program, overrides = {}) {
|
|
92
|
+
const deps = withObserverDefaults(overrides);
|
|
93
|
+
const env = process.env;
|
|
94
|
+
const group = program
|
|
95
|
+
.command('observer')
|
|
96
|
+
.description('Mint a read-only observer link so a human can follow this workspace');
|
|
97
|
+
group
|
|
98
|
+
.option('--workspace-key <key>', 'Workspace key (defaults to RELAY_WORKSPACE_KEY or the active workspace)')
|
|
99
|
+
.option('--base-url <url>', 'Override the engine API base URL (defaults to RELAY_BASE_URL)')
|
|
100
|
+
.option('--observer-url <url>', `Observer dashboard URL (defaults to ${DEFAULT_OBSERVER_URL})`)
|
|
101
|
+
.option('--name <name>', 'Token name (defaults to a generated unique name)')
|
|
102
|
+
.option('--channels <names>', 'Restrict to a comma-separated list of channels', parseChannels)
|
|
103
|
+
.option('--include-dms', 'Include agent DM traffic (excluded by default)')
|
|
104
|
+
.option('--expires <duration>', `Token lifetime, e.g. 30m, 24h, 7d (default ${DEFAULT_OBSERVER_EXPIRES})`, parseDuration)
|
|
105
|
+
.option('--json', 'Output the token metadata and URL as JSON')
|
|
106
|
+
.action(async (options) => {
|
|
107
|
+
await runSdk(deps, async () => {
|
|
108
|
+
const lifetimeMs = options.expires ?? parseDuration(DEFAULT_OBSERVER_EXPIRES);
|
|
109
|
+
const name = options.name?.trim() || `observer-cli-${deps.randomSuffix()}`;
|
|
110
|
+
// Resolve the dashboard URL BEFORE minting. A bad `--observer-url` or
|
|
111
|
+
// `RELAY_OBSERVER_URL` would otherwise mint a live 24-hour token and
|
|
112
|
+
// then throw before printing it, leaving an active credential the
|
|
113
|
+
// caller never saw.
|
|
114
|
+
const observerBase = resolveObserverBaseUrl(options.observerUrl, env);
|
|
115
|
+
const token = await deps.createObserverToken({
|
|
116
|
+
...connection(options),
|
|
117
|
+
name,
|
|
118
|
+
description: 'Minted by `agent-relay observer` for read-only follow-along',
|
|
119
|
+
filters: {
|
|
120
|
+
includeDms: options.includeDms === true,
|
|
121
|
+
...(options.channels ? { channelNames: options.channels } : {}),
|
|
122
|
+
},
|
|
123
|
+
expiresAt: new Date(deps.now() + lifetimeMs).toISOString(),
|
|
124
|
+
});
|
|
125
|
+
if (!token.token) {
|
|
126
|
+
throw new Error('Observer token created, but the response did not include token material.');
|
|
127
|
+
}
|
|
128
|
+
const url = observerUrl(observerBase, token.token);
|
|
129
|
+
if (options.json) {
|
|
130
|
+
printJson(deps, { ...describeToken(token), url });
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
deps.log(url);
|
|
134
|
+
deps.log('');
|
|
135
|
+
deps.log(`Read-only. Expires ${token.expiresAt ?? 'never'}.`);
|
|
136
|
+
deps.log(options.includeDms === true ? 'Includes agent DMs.' : 'Channels only — agent DMs are excluded.');
|
|
137
|
+
deps.log(`Revoke with: agent-relay observer revoke ${token.id}`);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
group
|
|
141
|
+
.command('list')
|
|
142
|
+
.description('List observer tokens for this workspace (token material is never shown)')
|
|
143
|
+
.option('--workspace-key <key>', 'Workspace key (defaults to RELAY_WORKSPACE_KEY or the active workspace)')
|
|
144
|
+
.option('--base-url <url>', 'Override the engine API base URL')
|
|
145
|
+
.option('--json', 'Output as JSON')
|
|
146
|
+
.action(async (_options, command) => {
|
|
147
|
+
// The parent `observer` group declares the same flag names, and Commander
|
|
148
|
+
// resolves a repeated option onto the ancestor that declared it first — so
|
|
149
|
+
// the local opts object here is empty and `--json` / `--workspace-key`
|
|
150
|
+
// would be silently dropped. Read the merged view instead.
|
|
151
|
+
const options = command.optsWithGlobals();
|
|
152
|
+
await runSdk(deps, async () => {
|
|
153
|
+
const tokens = await deps.listObserverTokens(connection(options));
|
|
154
|
+
if (options.json) {
|
|
155
|
+
printJson(deps, tokens.map(describeToken));
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (tokens.length === 0) {
|
|
159
|
+
deps.log('No observer tokens.');
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
for (const token of tokens) {
|
|
163
|
+
deps.log(`${token.id} ${token.status} expires ${token.expiresAt ?? 'never'} ${token.name}`);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
group
|
|
168
|
+
.command('revoke')
|
|
169
|
+
.description('Revoke an observer token by id')
|
|
170
|
+
.argument('<id>', 'Observer token id')
|
|
171
|
+
.option('--workspace-key <key>', 'Workspace key (defaults to RELAY_WORKSPACE_KEY or the active workspace)')
|
|
172
|
+
.option('--base-url <url>', 'Override the engine API base URL')
|
|
173
|
+
.action(async (id, _options, command) => {
|
|
174
|
+
// See the note on `observer list` — read merged options, not local ones.
|
|
175
|
+
const options = command.optsWithGlobals();
|
|
176
|
+
await runSdk(deps, async () => {
|
|
177
|
+
await deps.revokeObserverToken({ ...connection(options), id });
|
|
178
|
+
deps.log(`Revoked ${id}.`);
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=observer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observer.js","sourceRoot":"","sources":["../../../src/cli/commands/observer.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export interface StoredRelayhistoryAuth {
|
|
|
10
10
|
export interface SessionCommandDependencies {
|
|
11
11
|
createClient: (storedAuth: StoredRelayhistoryAuth | null) => SessionReplayClient;
|
|
12
12
|
readStoredAuth: () => StoredRelayhistoryAuth | null;
|
|
13
|
+
resolveWorkspaceKey: () => string | undefined;
|
|
13
14
|
log: (...args: unknown[]) => void;
|
|
14
15
|
error: (...args: unknown[]) => void;
|
|
15
16
|
exit: (code: number) => never;
|
|
@@ -29,6 +30,11 @@ export declare function resolveRelayhistoryConfig(storedAuth: StoredRelayhistory
|
|
|
29
30
|
baseUrl: string | undefined;
|
|
30
31
|
token: string | undefined;
|
|
31
32
|
};
|
|
32
|
-
/**
|
|
33
|
+
/** Resolve the workspace-wide Relaycast replay credential independently of Relayhistory auth. */
|
|
34
|
+
export declare function resolveRelaycastConfig(persistedWorkspaceKey?: string): {
|
|
35
|
+
baseUrl: string | undefined;
|
|
36
|
+
workspaceKey: string | undefined;
|
|
37
|
+
};
|
|
38
|
+
/** Register durable completed-session replay joined across Relayhistory and Relaycast. */
|
|
33
39
|
export declare function registerSessionCommands(program: Command, overrides?: Partial<SessionCommandDependencies>): void;
|
|
34
40
|
//# sourceMappingURL=session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/session.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAwB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/session.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAwB,MAAM,WAAW,CAAC;AAW1D,MAAM,WAAW,mBAAmB;IAClC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI,KAAK,mBAAmB,CAAC;IACjF,cAAc,EAAE,MAAM,sBAAsB,GAAG,IAAI,CAAC;IACpD,mBAAmB,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC9C,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC;CAC/B;AAoBD,mFAAmF;AACnF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CActE;AAUD;;;;;;;GAOG;AACH,yFAAyF;AACzF,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI,GAAG;IACpF,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAKA;AAED,iGAAiG;AACjG,wBAAgB,sBAAsB,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG;IACtE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,CAOA;AAiCD,0FAA0F;AAC1F,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,SAAS,GAAE,OAAO,CAAC,0BAA0B,CAAM,GAClD,IAAI,CA+BN"}
|
|
@@ -4,6 +4,7 @@ import path from 'node:path';
|
|
|
4
4
|
import { SessionClient } from '@agent-relay/session';
|
|
5
5
|
import { InvalidArgumentError } from 'commander';
|
|
6
6
|
import { defaultExit } from '../lib/exit.js';
|
|
7
|
+
import { resolveWorkspaceSessionKey } from '../lib/workspace-session.js';
|
|
7
8
|
/** The durable reference is Relay's ai-hist session UUID, never a local alias. */
|
|
8
9
|
const SESSION_REF_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
9
10
|
const ALLOWED_RELAYHISTORY_HOST = 'history.agentrelay.com';
|
|
@@ -64,17 +65,33 @@ export function resolveRelayhistoryConfig(storedAuth) {
|
|
|
64
65
|
token: nonBlankEnv(...RELAYHISTORY_TOKEN_ENV_VARS) ?? storedAuth?.token,
|
|
65
66
|
};
|
|
66
67
|
}
|
|
68
|
+
/** Resolve the workspace-wide Relaycast replay credential independently of Relayhistory auth. */
|
|
69
|
+
export function resolveRelaycastConfig(persistedWorkspaceKey) {
|
|
70
|
+
return {
|
|
71
|
+
baseUrl: nonBlankEnv('RELAY_BASE_URL'),
|
|
72
|
+
workspaceKey: nonBlankEnv('RELAY_WORKSPACE_KEY', 'AGENT_RELAY_WORKSPACE_KEY') ??
|
|
73
|
+
(persistedWorkspaceKey?.trim() || undefined),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
67
76
|
function withDefaults(overrides = {}) {
|
|
77
|
+
const resolveWorkspaceKey = overrides.resolveWorkspaceKey ?? resolveWorkspaceSessionKey;
|
|
68
78
|
return {
|
|
69
|
-
createClient:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
79
|
+
createClient: overrides.createClient ??
|
|
80
|
+
((storedAuth) => {
|
|
81
|
+
const config = resolveRelayhistoryConfig(storedAuth);
|
|
82
|
+
const relaycast = resolveRelaycastConfig(resolveWorkspaceKey());
|
|
83
|
+
return new SessionClient({
|
|
84
|
+
baseUrl: config.baseUrl,
|
|
85
|
+
token: config.token,
|
|
86
|
+
relaycastBaseUrl: relaycast.baseUrl,
|
|
87
|
+
workspaceKey: relaycast.workspaceKey,
|
|
88
|
+
});
|
|
89
|
+
}),
|
|
90
|
+
readStoredAuth: overrides.readStoredAuth ?? readStoredRelayhistoryAuth,
|
|
91
|
+
resolveWorkspaceKey,
|
|
92
|
+
log: overrides.log ?? ((...args) => console.log(...args)),
|
|
93
|
+
error: overrides.error ?? ((...args) => console.error(...args)),
|
|
94
|
+
exit: overrides.exit ?? defaultExit,
|
|
78
95
|
};
|
|
79
96
|
}
|
|
80
97
|
function parseSessionRef(value) {
|
|
@@ -84,13 +101,13 @@ function parseSessionRef(value) {
|
|
|
84
101
|
}
|
|
85
102
|
return sessionRef;
|
|
86
103
|
}
|
|
87
|
-
/** Register durable completed-session replay
|
|
104
|
+
/** Register durable completed-session replay joined across Relayhistory and Relaycast. */
|
|
88
105
|
export function registerSessionCommands(program, overrides = {}) {
|
|
89
106
|
const deps = withDefaults(overrides);
|
|
90
|
-
const group = program.command('session').description('Read durable
|
|
107
|
+
const group = program.command('session').description('Read durable completed Relay sessions');
|
|
91
108
|
group
|
|
92
109
|
.command('replay')
|
|
93
|
-
.description('Reconstruct a completed Relay session
|
|
110
|
+
.description('Reconstruct a completed Relay session from Relayhistory and Relaycast')
|
|
94
111
|
.argument('<id>', 'Relay-emitted session UUID', parseSessionRef)
|
|
95
112
|
.action(async (sessionId) => {
|
|
96
113
|
const storedAuth = deps.readStoredAuth();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/cli/commands/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,aAAa,EAA4B,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAW,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/cli/commands/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -69,6 +69,29 @@ export declare function isBackpressureRejection(error: unknown): boolean;
|
|
|
69
69
|
* {@link createInputStreamRecovery}'s default `recover()` path below.
|
|
70
70
|
*/
|
|
71
71
|
export declare function isWriteTimeoutRejection(error: unknown): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* `PtyInputStream.send()` rejects with `pty_write_queue_full` when the worker
|
|
74
|
+
* refused THAT ONE write because relay-pty's bounded drainer queue is full
|
|
75
|
+
* (`WRITE_QUEUE_DEPTH`, `crates/relay-pty/src/pty.rs`). The child is alive and
|
|
76
|
+
* the socket is healthy — the drainer is parked in `write_all` behind a child
|
|
77
|
+
* that has momentarily stopped reading its stdin, which is the normal state of
|
|
78
|
+
* a TUI harness mid-tool-call.
|
|
79
|
+
*
|
|
80
|
+
* This must not enter recovery. Reconnecting cannot drain the queue — it
|
|
81
|
+
* empties when the child resumes reading, not when a new socket opens — so a
|
|
82
|
+
* teardown here produced exactly one flap per keystroke for as long as the
|
|
83
|
+
* agent stayed busy (`input stream lost … / reconnected after 1 attempt(s)`,
|
|
84
|
+
* relay#1597). The broker keeps the connection open for this code for the same
|
|
85
|
+
* reason (`pty_input_error_is_connection_fatal`, `listen_api.rs`).
|
|
86
|
+
*
|
|
87
|
+
* Unlike {@link isWriteTimeoutRejection} this IS a confirmed refusal: the byte
|
|
88
|
+
* was never enqueued and will never reach the child, so the optimistic echo has
|
|
89
|
+
* to come back off the screen. Note the queue is shared with terminal-query
|
|
90
|
+
* replies, injected messages and auto-responder writes, so the operator whose
|
|
91
|
+
* keystroke is refused is usually not the one who filled it — the message must
|
|
92
|
+
* not blame their typing speed.
|
|
93
|
+
*/
|
|
94
|
+
export declare function isWriteRefusedRejection(error: unknown): boolean;
|
|
72
95
|
export interface InputStreamRecoveryOptions {
|
|
73
96
|
/** Log prefix tag — `drive` or `passthrough`. */
|
|
74
97
|
label: string;
|
|
@@ -136,13 +159,14 @@ export interface InputStreamRecovery {
|
|
|
136
159
|
/** Begin recovery. No-ops if already recovering or settled. */
|
|
137
160
|
recover(reason: string): void;
|
|
138
161
|
/**
|
|
139
|
-
* Classify a rejected `send()`.
|
|
162
|
+
* Classify a rejected `send()`. Three codes never enter recovery:
|
|
140
163
|
* `input_backpressure` is flow control on a healthy stream and only costs
|
|
141
|
-
* the optimistic echo
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
164
|
+
* the optimistic echo; `pty_write_queue_full` is the worker refusing one
|
|
165
|
+
* write while its drainer queue is full, which also only costs the echo; and
|
|
166
|
+
* `worker_timeout` is a late ack on a write that may still land, so it costs
|
|
167
|
+
* nothing — no rollback, no recovery. Every other rejection is treated as
|
|
168
|
+
* transport loss and enters recovery, which does roll back. Callers route
|
|
169
|
+
* every send rejection here rather than assuming loss.
|
|
146
170
|
*/
|
|
147
171
|
handleSendFailure(error: unknown): void;
|
|
148
172
|
/** Clears the backpressure latch so a later episode reports again. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach-input-recovery.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/attach-input-recovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,sEAAsE;AACtE,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,2CAA2C;AAC3C,eAAO,MAAM,yBAAyB,OAAQ,CAAC;AAC/C,6DAA6D;AAC7D,eAAO,MAAM,+BAA+B,QAAS,CAAC;AAEtD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAI/D;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAI/D;AAED,MAAM,WAAW,0BAA0B;IACzC,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,6EAA6E;IAC7E,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,iBAAiB,GAAG,IAAI,CAAC;IAC1C,SAAS,EAAE,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAAC;IACtD,iFAAiF;IACjF,UAAU,EAAE,MAAM,iBAAiB,CAAC;IACpC,sEAAsE;IACtE,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,oEAAoE;IACpE,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB;;;;;;;;;;;;;;;;;OAiBG;IACH,cAAc,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAOD,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,MAAM,IAAI,iBAAiB,CAAC;IACxE,wCAAwC;IACxC,YAAY,IAAI,OAAO,CAAC;IACxB,+DAA+D;IAC/D,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B
|
|
1
|
+
{"version":3,"file":"attach-input-recovery.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/attach-input-recovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,sEAAsE;AACtE,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,2CAA2C;AAC3C,eAAO,MAAM,yBAAyB,OAAQ,CAAC;AAC/C,6DAA6D;AAC7D,eAAO,MAAM,+BAA+B,QAAS,CAAC;AAEtD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAI/D;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAI/D;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAM/D;AAED,MAAM,WAAW,0BAA0B;IACzC,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,6EAA6E;IAC7E,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,iBAAiB,GAAG,IAAI,CAAC;IAC1C,SAAS,EAAE,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAAC;IACtD,iFAAiF;IACjF,UAAU,EAAE,MAAM,iBAAiB,CAAC;IACpC,sEAAsE;IACtE,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,oEAAoE;IACpE,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB;;;;;;;;;;;;;;;;;OAiBG;IACH,cAAc,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAOD,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,MAAM,IAAI,iBAAiB,CAAC;IACxE,wCAAwC;IACxC,YAAY,IAAI,OAAO,CAAC;IACxB,+DAA+D;IAC/D,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;;;;;;;OASG;IACH,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACxC,sEAAsE;IACtE,eAAe,IAAI,IAAI,CAAC;IACxB,4DAA4D;IAC5D,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,0BAA0B,GAAG,mBAAmB,CAqSlG"}
|
|
@@ -72,6 +72,33 @@ export function isBackpressureRejection(error) {
|
|
|
72
72
|
export function isWriteTimeoutRejection(error) {
|
|
73
73
|
return (typeof error === 'object' && error !== null && error.code === 'worker_timeout');
|
|
74
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* `PtyInputStream.send()` rejects with `pty_write_queue_full` when the worker
|
|
77
|
+
* refused THAT ONE write because relay-pty's bounded drainer queue is full
|
|
78
|
+
* (`WRITE_QUEUE_DEPTH`, `crates/relay-pty/src/pty.rs`). The child is alive and
|
|
79
|
+
* the socket is healthy — the drainer is parked in `write_all` behind a child
|
|
80
|
+
* that has momentarily stopped reading its stdin, which is the normal state of
|
|
81
|
+
* a TUI harness mid-tool-call.
|
|
82
|
+
*
|
|
83
|
+
* This must not enter recovery. Reconnecting cannot drain the queue — it
|
|
84
|
+
* empties when the child resumes reading, not when a new socket opens — so a
|
|
85
|
+
* teardown here produced exactly one flap per keystroke for as long as the
|
|
86
|
+
* agent stayed busy (`input stream lost … / reconnected after 1 attempt(s)`,
|
|
87
|
+
* relay#1597). The broker keeps the connection open for this code for the same
|
|
88
|
+
* reason (`pty_input_error_is_connection_fatal`, `listen_api.rs`).
|
|
89
|
+
*
|
|
90
|
+
* Unlike {@link isWriteTimeoutRejection} this IS a confirmed refusal: the byte
|
|
91
|
+
* was never enqueued and will never reach the child, so the optimistic echo has
|
|
92
|
+
* to come back off the screen. Note the queue is shared with terminal-query
|
|
93
|
+
* replies, injected messages and auto-responder writes, so the operator whose
|
|
94
|
+
* keystroke is refused is usually not the one who filled it — the message must
|
|
95
|
+
* not blame their typing speed.
|
|
96
|
+
*/
|
|
97
|
+
export function isWriteRefusedRejection(error) {
|
|
98
|
+
return (typeof error === 'object' &&
|
|
99
|
+
error !== null &&
|
|
100
|
+
error.code === 'pty_write_queue_full');
|
|
101
|
+
}
|
|
75
102
|
function describeSendError(error) {
|
|
76
103
|
if (error instanceof Error)
|
|
77
104
|
return error.message;
|
|
@@ -93,6 +120,8 @@ export function createInputStreamRecovery(options) {
|
|
|
93
120
|
let backpressureReported = false;
|
|
94
121
|
/** True once a write-timeout episode has been reported; reset on the next good send. */
|
|
95
122
|
let writeTimeoutReported = false;
|
|
123
|
+
/** True once a write-refused episode has been reported; reset on the next good send. */
|
|
124
|
+
let writeRefusedReported = false;
|
|
96
125
|
const cancel = () => {
|
|
97
126
|
if (timer) {
|
|
98
127
|
clearTimeout(timer);
|
|
@@ -136,6 +165,7 @@ export function createInputStreamRecovery(options) {
|
|
|
136
165
|
const noteSendSuccess = () => {
|
|
137
166
|
backpressureReported = false;
|
|
138
167
|
writeTimeoutReported = false;
|
|
168
|
+
writeRefusedReported = false;
|
|
139
169
|
};
|
|
140
170
|
const handleSendFailure = (sendError) => {
|
|
141
171
|
if (isBackpressureRejection(sendError)) {
|
|
@@ -151,6 +181,19 @@ export function createInputStreamRecovery(options) {
|
|
|
151
181
|
}
|
|
152
182
|
return;
|
|
153
183
|
}
|
|
184
|
+
if (isWriteRefusedRejection(sendError)) {
|
|
185
|
+
// Confirmed refusal on a healthy stream: roll the optimistic echo back
|
|
186
|
+
// (the byte will never reach the child) but keep the socket. Report once
|
|
187
|
+
// per episode — the cause persists for as long as the agent is busy, so
|
|
188
|
+
// per-keystroke reporting would rebuild the flood this module removes.
|
|
189
|
+
onRollback();
|
|
190
|
+
if (!writeRefusedReported) {
|
|
191
|
+
writeRefusedReported = true;
|
|
192
|
+
log(`[${label}] ${name} is not reading input right now (busy); that keystroke was dropped. ` +
|
|
193
|
+
`The session is still attached — retry once it is idle.`);
|
|
194
|
+
}
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
154
197
|
if (isWriteTimeoutRejection(sendError)) {
|
|
155
198
|
// This one write's ack didn't arrive in time — the worker may just be
|
|
156
199
|
// busy, not dead (relay#1544). The transport already kept the socket
|
|
@@ -263,7 +306,12 @@ export function createInputStreamRecovery(options) {
|
|
|
263
306
|
return 'rejected';
|
|
264
307
|
}
|
|
265
308
|
setStream(replacement);
|
|
266
|
-
|
|
309
|
+
// Say plainly that the session survived. A recovered flap and a fatal
|
|
310
|
+
// disconnect previously read the same to a human — both were red lines
|
|
311
|
+
// that named a failure and stopped — so operators read a working session
|
|
312
|
+
// as a crash (relay#1597).
|
|
313
|
+
log(`[${label}] input stream reconnected after ${attempt} attempt(s) — ${name} is still attached ` +
|
|
314
|
+
`and usable. Keystrokes typed during the outage were dropped, not queued; retype them.`);
|
|
267
315
|
return 'opened';
|
|
268
316
|
};
|
|
269
317
|
inFlight = (async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach-input-recovery.js","sourceRoot":"","sources":["../../../src/cli/lib/attach-input-recovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,qFAAqF;AACrF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C,sEAAsE;AACtE,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAC9C,2CAA2C;AAC3C,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAC/C,6DAA6D;AAC7D,MAAM,CAAC,MAAM,+BAA+B,GAAG,MAAM,CAAC;AAEtD;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAK,KAA4B,CAAC,IAAI,KAAK,oBAAoB,CAC3G,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAK,KAA4B,CAAC,IAAI,KAAK,gBAAgB,CACvG,CAAC;AACJ,CAAC;AAoDD,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACjD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;
|
|
1
|
+
{"version":3,"file":"attach-input-recovery.js","sourceRoot":"","sources":["../../../src/cli/lib/attach-input-recovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,qFAAqF;AACrF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C,sEAAsE;AACtE,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAC9C,2CAA2C;AAC3C,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAC/C,6DAA6D;AAC7D,MAAM,CAAC,MAAM,+BAA+B,GAAG,MAAM,CAAC;AAEtD;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAK,KAA4B,CAAC,IAAI,KAAK,oBAAoB,CAC3G,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAK,KAA4B,CAAC,IAAI,KAAK,gBAAgB,CACvG,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAA4B,CAAC,IAAI,KAAK,sBAAsB,CAC9D,CAAC;AACJ,CAAC;AAoDD,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACjD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AA+BD,MAAM,UAAU,yBAAyB,CAAC,OAAmC;IAC3E,MAAM,EACJ,KAAK,EACL,IAAI,EACJ,WAAW,EACX,WAAW,EACX,GAAG,EACH,KAAK,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,GACf,GAAG,OAAO,CAAC;IAEZ,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,+BAA+B,CAAC;IAErF,IAAI,QAAQ,GAAyB,IAAI,CAAC;IAC1C,IAAI,KAAK,GAAyC,IAAI,CAAC;IACvD;;;;;OAKG;IACH,IAAI,cAAc,GAAwB,IAAI,CAAC;IAC/C,uFAAuF;IACvF,IAAI,oBAAoB,GAAG,KAAK,CAAC;IACjC,wFAAwF;IACxF,IAAI,oBAAoB,GAAG,KAAK,CAAC;IACjC,wFAAwF;IACxF,IAAI,oBAAoB,GAAG,KAAK,CAAC;IAEjC,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,IAAI,KAAK,EAAE,CAAC;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;QACD,sEAAsE;QACtE,2CAA2C;QAC3C,cAAc,EAAE,EAAE,CAAC;QACnB,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC,CAAC;IAEF;;;;OAIG;IACH,MAAM,YAAY,GAAG,KAAK,EAAK,IAAgB,EAAE,IAAY,EAAc,EAAE;QAC3E,IAAI,MAAiD,CAAC;QACtD,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;gBACxB,IAAI;gBACJ,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;oBACtC,MAAM,GAAG,UAAU,CACjB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,oBAAoB,gBAAgB,IAAI,CAAC,CAAC,EACxE,gBAAgB,CACjB,CAAC;oBACF,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;gBACnB,CAAC,CAAC;aACH,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,IAAI,MAAM,KAAK,SAAS;gBAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,MAAgC,EAA+B,EAAE,CACjF,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC;IAE5C,MAAM,YAAY,GAAG,CAAC,MAAyB,EAAE,GAAW,EAAQ,EAAE;QACpE,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,GAAS,EAAE;QACjC,oBAAoB,GAAG,KAAK,CAAC;QAC7B,oBAAoB,GAAG,KAAK,CAAC;QAC7B,oBAAoB,GAAG,KAAK,CAAC;IAC/B,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,SAAkB,EAAQ,EAAE;QACrD,IAAI,uBAAuB,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,yEAAyE;YACzE,oEAAoE;YACpE,qEAAqE;YACrE,yEAAyE;YACzE,oBAAoB;YACpB,UAAU,EAAE,CAAC;YACb,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC1B,oBAAoB,GAAG,IAAI,CAAC;gBAC5B,GAAG,CACD,IAAI,KAAK,mCAAmC,IAAI,0DAA0D,CAC3G,CAAC;YACJ,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,uBAAuB,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,uEAAuE;YACvE,yEAAyE;YACzE,wEAAwE;YACxE,uEAAuE;YACvE,UAAU,EAAE,CAAC;YACb,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC1B,oBAAoB,GAAG,IAAI,CAAC;gBAC5B,GAAG,CACD,IAAI,KAAK,KAAK,IAAI,sEAAsE;oBACtF,wDAAwD,CAC3D,CAAC;YACJ,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,uBAAuB,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,sEAAsE;YACtE,qEAAqE;YACrE,qEAAqE;YACrE,oEAAoE;YACpE,mEAAmE;YACnE,qEAAqE;YACrE,qEAAqE;YACrE,sEAAsE;YACtE,sEAAsE;YACtE,uDAAuD;YACvD,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC1B,oBAAoB,GAAG,IAAI,CAAC;gBAC5B,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,wEAAwE,CAAC,CAAC;YAClG,CAAC;YACD,OAAO;QACT,CAAC;QACD,OAAO,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,MAAc,EAAQ,EAAE;QACvC,IAAI,SAAS,EAAE,IAAI,QAAQ;YAAE,OAAO;QAEpC,2EAA2E;QAC3E,wEAAwE;QACxE,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;QACzB,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC;YACH,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,gCAAgC,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,kDAAkD;QACpD,CAAC;QACD,UAAU,EAAE,CAAC;QAEb,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrB,KAAK,CACH,IAAI,KAAK,wBAAwB,MAAM,4BAA4B;gBACjE,eAAe,IAAI,wCAAwC,CAC9D,CAAC;YACF,WAAW,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,kDAAkD;QAClD,GAAG,CAAC,IAAI,KAAK,wBAAwB,MAAM,kBAAkB,CAAC,CAAC;QAE/D;;;;;;;;;;;WAWG;QACH,MAAM,aAAa,GAAG,KAAK,EAAE,OAAe,EAAwD,EAAE;YACpG,IAAI,WAAW,GAA6B,IAAI,CAAC;YACjD,IAAI,CAAC;gBACH,WAAW,GAAG,UAAU,EAAE,CAAC;gBAC3B,MAAM,YAAY,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,mBAAmB,CAAC,CAAC;YACvE,CAAC;YAAC,MAAM,CAAC;gBACP,sEAAsE;gBACtE,iEAAiE;gBACjE,uDAAuD;gBACvD,IAAI,WAAW;oBAAE,YAAY,CAAC,WAAW,EAAE,GAAG,KAAK,4BAA4B,CAAC,CAAC;gBACjF,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,IAAI,SAAS,EAAE,EAAE,CAAC;gBAChB,YAAY,CAAC,WAAW,EAAE,GAAG,KAAK,iBAAiB,CAAC,CAAC;gBACrD,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,uEAAuE;YACvE,iEAAiE;YACjE,EAAE;YACF,yEAAyE;YACzE,qEAAqE;YACrE,yEAAyE;YACzE,+DAA+D;YAC/D,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;gBACzC,YAAY,CAAC,WAAW,EAAE,GAAG,KAAK,8BAA8B,CAAC,CAAC;gBAClE,KAAK,CACH,IAAI,KAAK,wEAAwE;oBAC/E,0EAA0E;oBAC1E,0BAA0B,IAAI,eAAe,CAChD,CAAC;gBACF,OAAO,UAAU,CAAC;YACpB,CAAC;YAED,sEAAsE;YACtE,uEAAuE;YACvE,8BAA8B;YAC9B,EAAE;YACF,oEAAoE;YACpE,iEAAiE;YACjE,oEAAoE;YACpE,kEAAkE;YAClE,wCAAwC;YACxC,MAAM,OAAO,GAAG,MAAM,YAAY,CAChC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,EAC9C,uBAAuB,CACxB,CAAC,KAAK,CAAC,CAAC,WAAoB,EAAE,EAAE,CAAC,CAAC;gBACjC,EAAE,EAAE,KAAc;gBAClB,MAAM,EACJ,WAAW,YAAY,KAAK;oBAC1B,CAAC,CAAC,0BAA0B,WAAW,CAAC,OAAO,EAAE;oBACjD,CAAC,CAAC,0BAA0B,MAAM,CAAC,WAAW,CAAC,EAAE;aACtD,CAAC,CAAC,CAAC;YACJ,IAAI,SAAS,EAAE,EAAE,CAAC;gBAChB,YAAY,CAAC,WAAW,EAAE,GAAG,KAAK,iBAAiB,CAAC,CAAC;gBACrD,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;gBAChB,YAAY,CAAC,WAAW,EAAE,GAAG,KAAK,8BAA8B,CAAC,CAAC;gBAClE,KAAK,CACH,IAAI,KAAK,0DAA0D,OAAO,CAAC,MAAM,KAAK;oBACpF,wFAAwF;oBACxF,0BAA0B,IAAI,eAAe,CAChD,CAAC;gBACF,OAAO,UAAU,CAAC;YACpB,CAAC;YAED,SAAS,CAAC,WAAW,CAAC,CAAC;YACvB,sEAAsE;YACtE,uEAAuE;YACvE,yEAAyE;YACzE,2BAA2B;YAC3B,GAAG,CACD,IAAI,KAAK,oCAAoC,OAAO,iBAAiB,IAAI,qBAAqB;gBAC5F,uFAAuF,CAC1F,CAAC;YACF,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC;QAEF,QAAQ,GAAG,CAAC,KAAK,IAAI,EAAE;YACrB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;gBACxD,IAAI,SAAS,EAAE;oBAAE,OAAO;gBACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;gBACpF,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAClC,cAAc,GAAG,OAAO,CAAC;oBACzB,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBACnC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;gBAClB,CAAC,CAAC,CAAC;gBACH,KAAK,GAAG,IAAI,CAAC;gBACb,cAAc,GAAG,IAAI,CAAC;gBACtB,IAAI,SAAS,EAAE;oBAAE,OAAO;gBAExB,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC7C,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,SAAS;oBAAE,OAAO;gBAC1D,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;oBAC3B,WAAW,EAAE,CAAC;oBACd,OAAO;gBACT,CAAC;YACH,CAAC;YACD,IAAI,SAAS,EAAE;gBAAE,OAAO;YACxB,KAAK,CACH,IAAI,KAAK,8CAA8C,WAAW,cAAc,MAAM,KAAK;gBACzF,eAAe,IAAI,wCAAwC,CAC9D,CAAC;YACF,WAAW,EAAE,CAAC;QAChB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAChB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,YAAY,EAAE,GAAG,EAAE,CAAC,QAAQ,KAAK,IAAI;QACrC,OAAO;QACP,iBAAiB;QACjB,eAAe;QACf,MAAM;KACP,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/attach.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/attach.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/lib/attach.js
CHANGED
|
@@ -418,6 +418,16 @@ function takeColumns(text, budget, from = 'start') {
|
|
|
418
418
|
export function reserveStatusLineRow(localSize) {
|
|
419
419
|
if (!localSize)
|
|
420
420
|
return null;
|
|
421
|
+
// A terminal can report a degenerate size: `script(1)` with no winsize, a
|
|
422
|
+
// minimized window, a size not yet reported after attach, or a teardown race
|
|
423
|
+
// all surface as 0 (or worse) rows/cols while `stdout.isTTY` is still true.
|
|
424
|
+
// Forwarding that verbatim made every attach mode POST `{rows: 0, cols: 0}`
|
|
425
|
+
// and collect `rows and cols must be positive integers` from the broker —
|
|
426
|
+
// harmless but alarming noise that has sent more than one investigation down
|
|
427
|
+
// the wrong path (relay#1597). Treat it the same as "no local size": skip the
|
|
428
|
+
// resize entirely rather than inventing dimensions the operator never had.
|
|
429
|
+
if (localSize.rows < 1 || localSize.cols < 1)
|
|
430
|
+
return null;
|
|
421
431
|
if (localSize.rows < 3 || localSize.cols < 2)
|
|
422
432
|
return localSize;
|
|
423
433
|
return {
|