agent-relay 6.0.21 → 6.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.
Files changed (127) hide show
  1. package/dist/index.cjs +360 -61
  2. package/dist/src/cli/bootstrap.d.ts.map +1 -1
  3. package/dist/src/cli/bootstrap.js +62 -0
  4. package/dist/src/cli/bootstrap.js.map +1 -1
  5. package/dist/src/cli/commands/agent-management.d.ts +9 -0
  6. package/dist/src/cli/commands/agent-management.d.ts.map +1 -1
  7. package/dist/src/cli/commands/agent-management.js +80 -6
  8. package/dist/src/cli/commands/agent-management.js.map +1 -1
  9. package/dist/src/cli/commands/core.d.ts.map +1 -1
  10. package/dist/src/cli/commands/core.js +2 -0
  11. package/dist/src/cli/commands/core.js.map +1 -1
  12. package/dist/src/cli/commands/drive.d.ts +222 -0
  13. package/dist/src/cli/commands/drive.d.ts.map +1 -0
  14. package/dist/src/cli/commands/drive.js +565 -0
  15. package/dist/src/cli/commands/drive.js.map +1 -0
  16. package/dist/src/cli/commands/messaging.d.ts +25 -0
  17. package/dist/src/cli/commands/messaging.d.ts.map +1 -1
  18. package/dist/src/cli/commands/messaging.js +702 -138
  19. package/dist/src/cli/commands/messaging.js.map +1 -1
  20. package/dist/src/cli/commands/new.d.ts +112 -0
  21. package/dist/src/cli/commands/new.d.ts.map +1 -0
  22. package/dist/src/cli/commands/new.js +189 -0
  23. package/dist/src/cli/commands/new.js.map +1 -0
  24. package/dist/src/cli/commands/on/provision.d.ts +1 -1
  25. package/dist/src/cli/commands/on/provision.d.ts.map +1 -1
  26. package/dist/src/cli/commands/on/provision.js +1 -1
  27. package/dist/src/cli/commands/on/provision.js.map +1 -1
  28. package/dist/src/cli/commands/on/start.d.ts +1 -1
  29. package/dist/src/cli/commands/on/start.d.ts.map +1 -1
  30. package/dist/src/cli/commands/on/start.js +2 -2
  31. package/dist/src/cli/commands/on/start.js.map +1 -1
  32. package/dist/src/cli/commands/passthrough.d.ts +142 -0
  33. package/dist/src/cli/commands/passthrough.d.ts.map +1 -0
  34. package/dist/src/cli/commands/passthrough.js +398 -0
  35. package/dist/src/cli/commands/passthrough.js.map +1 -0
  36. package/dist/src/cli/commands/rm.d.ts +52 -0
  37. package/dist/src/cli/commands/rm.d.ts.map +1 -0
  38. package/dist/src/cli/commands/rm.js +96 -0
  39. package/dist/src/cli/commands/rm.js.map +1 -0
  40. package/dist/src/cli/commands/view.d.ts +98 -0
  41. package/dist/src/cli/commands/view.d.ts.map +1 -0
  42. package/dist/src/cli/commands/view.js +238 -0
  43. package/dist/src/cli/commands/view.js.map +1 -0
  44. package/dist/src/cli/lib/agent-management-listing.d.ts +35 -7
  45. package/dist/src/cli/lib/agent-management-listing.d.ts.map +1 -1
  46. package/dist/src/cli/lib/agent-management-listing.js +188 -40
  47. package/dist/src/cli/lib/agent-management-listing.js.map +1 -1
  48. package/dist/src/cli/lib/attach.d.ts +56 -0
  49. package/dist/src/cli/lib/attach.d.ts.map +1 -0
  50. package/dist/src/cli/lib/attach.js +73 -0
  51. package/dist/src/cli/lib/attach.js.map +1 -0
  52. package/dist/src/cli/lib/broker-connection.d.ts +40 -0
  53. package/dist/src/cli/lib/broker-connection.d.ts.map +1 -0
  54. package/dist/src/cli/lib/broker-connection.js +82 -0
  55. package/dist/src/cli/lib/broker-connection.js.map +1 -0
  56. package/dist/src/cli/lib/broker-lifecycle.d.ts +2 -0
  57. package/dist/src/cli/lib/broker-lifecycle.d.ts.map +1 -1
  58. package/dist/src/cli/lib/broker-lifecycle.js +263 -69
  59. package/dist/src/cli/lib/broker-lifecycle.js.map +1 -1
  60. package/dist/src/cli/lib/formatting.d.ts +4 -0
  61. package/dist/src/cli/lib/formatting.d.ts.map +1 -1
  62. package/dist/src/cli/lib/formatting.js +31 -1
  63. package/dist/src/cli/lib/formatting.js.map +1 -1
  64. package/dist/src/cli/lib/sdk-client.d.ts +9 -0
  65. package/dist/src/cli/lib/sdk-client.d.ts.map +1 -0
  66. package/dist/src/cli/lib/sdk-client.js +28 -0
  67. package/dist/src/cli/lib/sdk-client.js.map +1 -0
  68. package/dist/src/cli/lib/spawn-and-attach.d.ts +132 -0
  69. package/dist/src/cli/lib/spawn-and-attach.d.ts.map +1 -0
  70. package/dist/src/cli/lib/spawn-and-attach.js +334 -0
  71. package/dist/src/cli/lib/spawn-and-attach.js.map +1 -0
  72. package/dist/src/cost/pricing.d.ts.map +1 -1
  73. package/dist/src/cost/pricing.js +5 -3
  74. package/dist/src/cost/pricing.js.map +1 -1
  75. package/package.json +12 -10
  76. package/dist/packages/cloud/src/api-client.d.ts +0 -33
  77. package/dist/packages/cloud/src/api-client.d.ts.map +0 -1
  78. package/dist/packages/cloud/src/api-client.js +0 -123
  79. package/dist/packages/cloud/src/api-client.js.map +0 -1
  80. package/dist/packages/cloud/src/auth.d.ts +0 -13
  81. package/dist/packages/cloud/src/auth.d.ts.map +0 -1
  82. package/dist/packages/cloud/src/auth.js +0 -299
  83. package/dist/packages/cloud/src/auth.js.map +0 -1
  84. package/dist/packages/cloud/src/connect.d.ts +0 -45
  85. package/dist/packages/cloud/src/connect.d.ts.map +0 -1
  86. package/dist/packages/cloud/src/connect.js +0 -166
  87. package/dist/packages/cloud/src/connect.js.map +0 -1
  88. package/dist/packages/cloud/src/index.d.ts +0 -10
  89. package/dist/packages/cloud/src/index.d.ts.map +0 -1
  90. package/dist/packages/cloud/src/index.js +0 -10
  91. package/dist/packages/cloud/src/index.js.map +0 -1
  92. package/dist/packages/cloud/src/lib/ssh-interactive.d.ts +0 -70
  93. package/dist/packages/cloud/src/lib/ssh-interactive.d.ts.map +0 -1
  94. package/dist/packages/cloud/src/lib/ssh-interactive.js +0 -440
  95. package/dist/packages/cloud/src/lib/ssh-interactive.js.map +0 -1
  96. package/dist/packages/cloud/src/lib/ssh-runtime.d.ts +0 -35
  97. package/dist/packages/cloud/src/lib/ssh-runtime.d.ts.map +0 -1
  98. package/dist/packages/cloud/src/lib/ssh-runtime.js +0 -52
  99. package/dist/packages/cloud/src/lib/ssh-runtime.js.map +0 -1
  100. package/dist/packages/cloud/src/proactive-runtime.d.ts +0 -24
  101. package/dist/packages/cloud/src/proactive-runtime.d.ts.map +0 -1
  102. package/dist/packages/cloud/src/proactive-runtime.js +0 -315
  103. package/dist/packages/cloud/src/proactive-runtime.js.map +0 -1
  104. package/dist/packages/cloud/src/types.d.ts +0 -200
  105. package/dist/packages/cloud/src/types.d.ts.map +0 -1
  106. package/dist/packages/cloud/src/types.js +0 -12
  107. package/dist/packages/cloud/src/types.js.map +0 -1
  108. package/dist/packages/cloud/src/workflows.d.ts +0 -65
  109. package/dist/packages/cloud/src/workflows.d.ts.map +0 -1
  110. package/dist/packages/cloud/src/workflows.js +0 -892
  111. package/dist/packages/cloud/src/workflows.js.map +0 -1
  112. package/dist/packages/cloud/src/workspaces.d.ts +0 -11
  113. package/dist/packages/cloud/src/workspaces.d.ts.map +0 -1
  114. package/dist/packages/cloud/src/workspaces.js +0 -146
  115. package/dist/packages/cloud/src/workspaces.js.map +0 -1
  116. package/dist/packages/sdk/src/provisioner/local-jwks.d.ts +0 -25
  117. package/dist/packages/sdk/src/provisioner/local-jwks.d.ts.map +0 -1
  118. package/dist/packages/sdk/src/provisioner/local-jwks.js +0 -70
  119. package/dist/packages/sdk/src/provisioner/local-jwks.js.map +0 -1
  120. package/dist/packages/sdk/src/provisioner/seeder.d.ts +0 -17
  121. package/dist/packages/sdk/src/provisioner/seeder.d.ts.map +0 -1
  122. package/dist/packages/sdk/src/provisioner/seeder.js +0 -419
  123. package/dist/packages/sdk/src/provisioner/seeder.js.map +0 -1
  124. package/dist/packages/sdk/src/provisioner/token.d.ts +0 -41
  125. package/dist/packages/sdk/src/provisioner/token.d.ts.map +0 -1
  126. package/dist/packages/sdk/src/provisioner/token.js +0 -77
  127. package/dist/packages/sdk/src/provisioner/token.js.map +0 -1
@@ -0,0 +1,222 @@
1
+ /**
2
+ * `agent-relay drive <name>` — interactive read-write take-over client.
3
+ *
4
+ * Attaches to a running agent, flips it into `manual_flush` inbound delivery mode so the
5
+ * broker parks new relay messages in a per-worker queue, and forwards your
6
+ * keystrokes to the worker's PTY. You can drain the queue on demand with
7
+ * `Ctrl+G` and detach with `Ctrl+B D` (or `Ctrl+C` as a safety alias).
8
+ * Detaching restores the worker's previous inbound delivery mode and leaves the
9
+ * agent running under the broker — `drive` never kills the worker.
10
+ *
11
+ * Sequence of operations on attach:
12
+ *
13
+ * 1. Discover broker connection (CLI flag → env → connection.json).
14
+ * 2. `GET /api/spawned/{name}/delivery-mode` → remember the previous mode.
15
+ * 3. `PUT /api/spawned/{name}/delivery-mode` → switch to `manual_flush`.
16
+ * 4. `captureAndRenderSnapshot` → repaint the agent's current screen.
17
+ * 5. `GET /api/spawned/{name}/pending` → seed the status-line counter.
18
+ * 6. Open `/ws`, subscribe to events for this worker.
19
+ * 7. Switch local stdin to raw mode; forward bytes to `POST /api/input/{name}`.
20
+ *
21
+ * On detach (clean or abnormal), best-effort `PUT .../delivery-mode` restores the
22
+ * previous mode so the queue doesn't fill up indefinitely.
23
+ */
24
+ import { Buffer } from 'node:buffer';
25
+ import type { InboundDeliveryMode } from '@agent-relay/sdk';
26
+ import { Command } from 'commander';
27
+ import WebSocket from 'ws';
28
+ import { captureAndRenderSnapshot, type AttachSnapshotConnection, type AttachSnapshotDeps } from '../lib/attach.js';
29
+ import { type BrokerConnection } from '../lib/broker-connection.js';
30
+ type ExitFn = (code: number) => never;
31
+ /** Wire string for the broker's `InboundDeliveryMode` enum. */
32
+ export type { InboundDeliveryMode };
33
+ /** Minimal WebSocket surface we depend on — same shape as `view`'s. */
34
+ export interface DriveWebSocket {
35
+ on(event: 'open', listener: () => void): unknown;
36
+ on(event: 'message', listener: (data: WebSocket.RawData) => void): unknown;
37
+ on(event: 'close', listener: (code: number, reason: Buffer) => void): unknown;
38
+ on(event: 'error', listener: (err: Error) => void): unknown;
39
+ close(code?: number, reason?: string): void;
40
+ }
41
+ export type DriveWebSocketFactory = (url: string, headers: Record<string, string>) => DriveWebSocket;
42
+ export interface DriveSignalRegistrar {
43
+ (signal: NodeJS.Signals, handler: () => void | Promise<void>): void;
44
+ }
45
+ /** Stdin surface — tests provide a fake that never touches the real TTY. */
46
+ export interface DriveStdin {
47
+ setRawMode?: (mode: boolean) => unknown;
48
+ isTTY?: boolean;
49
+ resume(): unknown;
50
+ pause(): unknown;
51
+ on(event: 'data', listener: (chunk: Buffer) => void): unknown;
52
+ off?(event: 'data', listener: (chunk: Buffer) => void): unknown;
53
+ removeListener?(event: 'data', listener: (chunk: Buffer) => void): unknown;
54
+ }
55
+ /**
56
+ * Local terminal-size source. Wraps `process.stdout` in production so
57
+ * the resize wiring reads the user's actual terminal dimensions and
58
+ * gets a SIGWINCH-equivalent `'resize'` event for free. Tests inject a
59
+ * controllable fake.
60
+ */
61
+ export interface DriveTerminal {
62
+ /** Current `(rows, cols)`. Returns `null` when stdout is not a TTY,
63
+ * in which case resize forwarding is skipped entirely. */
64
+ getSize(): {
65
+ rows: number;
66
+ cols: number;
67
+ } | null;
68
+ /** Subscribe to local-terminal resize events. Returns an unsubscribe
69
+ * function the client calls during teardown. */
70
+ onResize(handler: () => void): () => void;
71
+ }
72
+ export interface DriveDependencies {
73
+ /** Reads `<state-dir>/connection.json` and returns parsed JSON, or null. */
74
+ readConnectionFile: (stateDir: string) => unknown;
75
+ /** Project paths helper — used to pick the default state dir. */
76
+ getDefaultStateDir: () => string;
77
+ /** Environment variables (so tests can inject). */
78
+ env: NodeJS.ProcessEnv;
79
+ /** Factory for the WebSocket — overridden in tests with a mock. */
80
+ createWebSocket: DriveWebSocketFactory;
81
+ /** Where the PTY chunks get written. Defaults to `process.stdout.write`. */
82
+ writeChunk: (chunk: string) => void;
83
+ /** Signal registration (so tests can drive SIGINT without killing the test). */
84
+ onSignal: DriveSignalRegistrar;
85
+ log: (...args: unknown[]) => void;
86
+ error: (...args: unknown[]) => void;
87
+ exit: ExitFn;
88
+ /** HTTP client used for mode/pending/flush/input calls. Defaults to global `fetch`. */
89
+ fetch: typeof globalThis.fetch;
90
+ /** Override for the snapshot-on-attach helper (tests substitute a stub). */
91
+ captureAndRenderSnapshot: (connection: AttachSnapshotConnection, name: string, deps: AttachSnapshotDeps) => ReturnType<typeof captureAndRenderSnapshot>;
92
+ /** Stdin handle — defaults to `process.stdin`. */
93
+ stdin: DriveStdin;
94
+ /** Local terminal size source — defaults to `process.stdout`. */
95
+ terminal: DriveTerminal;
96
+ }
97
+ /** ----- HTTP helpers ----- */
98
+ /** `GET /api/spawned/{name}/delivery-mode` → `'manual_flush' | 'auto_inject'` or `null` on failure. */
99
+ export declare function getInboundDeliveryMode(connection: BrokerConnection, name: string, fetchFn: typeof globalThis.fetch): Promise<InboundDeliveryMode | null>;
100
+ /** Outcome of a `PUT /api/spawned/{name}/delivery-mode` call. */
101
+ export interface SetInboundDeliveryModeResult {
102
+ ok: boolean;
103
+ status: number;
104
+ /** Server-reported number of pending messages drained on a `manual_flush→auto_inject` flip. */
105
+ flushed?: number;
106
+ /** Human-readable error message when `ok` is false. */
107
+ message?: string;
108
+ }
109
+ export declare function setInboundDeliveryMode(connection: BrokerConnection, name: string, mode: InboundDeliveryMode, fetchFn: typeof globalThis.fetch): Promise<SetInboundDeliveryModeResult>;
110
+ /** `GET /api/spawned/{name}/pending` → count, or `0` on failure (best-effort). */
111
+ export declare function getPendingCount(connection: BrokerConnection, name: string, fetchFn: typeof globalThis.fetch): Promise<number>;
112
+ /** `POST /api/spawned/{name}/flush` → server returns `{ flushed: N }`. */
113
+ export declare function flushPending(connection: BrokerConnection, name: string, fetchFn: typeof globalThis.fetch): Promise<{
114
+ ok: boolean;
115
+ flushed?: number;
116
+ message?: string;
117
+ }>;
118
+ /** `POST /api/input/{name}` body `{ data: "<bytes>" }`. */
119
+ export declare function sendInput(connection: BrokerConnection, name: string, data: string, fetchFn: typeof globalThis.fetch): Promise<{
120
+ ok: boolean;
121
+ message?: string;
122
+ }>;
123
+ /**
124
+ * `POST /api/resize/{name}` body `{ rows, cols }`. Forwards the
125
+ * driver's local terminal dimensions so the agent's PTY (and any TUI
126
+ * running in it) sees the size the human is actually looking at.
127
+ * Called once on attach and again on every local-terminal resize.
128
+ */
129
+ export declare function resizeWorker(connection: BrokerConnection, name: string, rows: number, cols: number, fetchFn: typeof globalThis.fetch): Promise<{
130
+ ok: boolean;
131
+ message?: string;
132
+ }>;
133
+ /** Discriminated union of the broker events `drive` cares about. */
134
+ export type DriveWsEvent = {
135
+ kind: 'worker_stream';
136
+ chunk: string;
137
+ } | {
138
+ kind: 'delivery_queued';
139
+ } | {
140
+ kind: 'agent_pending_drained';
141
+ count?: number;
142
+ } | {
143
+ kind: 'other';
144
+ };
145
+ /**
146
+ * Inspect a single WebSocket frame and classify it relative to the agent
147
+ * we're driving. Non-matching / malformed frames return `{ kind: 'other' }`
148
+ * so the caller can ignore them cheaply.
149
+ *
150
+ * Exported for unit testing the filter in isolation.
151
+ */
152
+ export declare function classifyWsEvent(rawMessage: string, name: string): DriveWsEvent;
153
+ /** ----- Keybind state machine ----- */
154
+ /** Outcome of feeding one chunk to the keybind parser. */
155
+ export interface KeybindOutcome {
156
+ /** Bytes that should be forwarded to the agent (may be empty). */
157
+ forward: Buffer;
158
+ /** Local actions the client should perform, in order. */
159
+ actions: KeybindAction[];
160
+ }
161
+ export type KeybindAction = 'flush' | 'detach' | 'toggle_help';
162
+ /**
163
+ * Stateful parser that recognises the `Ctrl+B <key>` two-byte prefix
164
+ * sequence, plus the single-byte safety keybinds (`Ctrl+G` flush,
165
+ * `Ctrl+C` detach).
166
+ *
167
+ * The parser is intentionally tiny — no readline, no keypress — because
168
+ * the keybinds are all ASCII control characters, and pulling in a
169
+ * keypress parser would just add a dependency for no real benefit.
170
+ *
171
+ * Semantics:
172
+ * - `Ctrl+G` (0x07) → emit `flush`, never forwarded.
173
+ * - `Ctrl+C` (0x03) → emit `detach`, never forwarded.
174
+ * - `Ctrl+B` (0x02) → swallow, arm the prefix state.
175
+ * Next byte (within the same chunk OR a subsequent chunk):
176
+ * - 'd' / 'D' / 0x04 (Ctrl+D) → emit `detach`.
177
+ * - '?' → emit `toggle_help`.
178
+ * - anything else → forward the original `Ctrl+B` byte
179
+ * followed by the new byte, so the
180
+ * agent isn't deprived if the user
181
+ * hit Ctrl+B by accident.
182
+ *
183
+ * Multiple keybinds in one chunk are handled in order; bytes between
184
+ * them are forwarded normally.
185
+ */
186
+ export declare class KeybindParser {
187
+ private pendingPrefix;
188
+ /** Process one chunk; returns bytes to forward + actions to take. */
189
+ feed(chunk: Buffer): KeybindOutcome;
190
+ /** Reset the parser (e.g. before tearing down). */
191
+ reset(): void;
192
+ }
193
+ /** ----- Status line rendering ----- */
194
+ /**
195
+ * Render the bottom-of-terminal status line for `drive`. Uses ANSI
196
+ * save-cursor / restore-cursor so the agent's output isn't disturbed.
197
+ *
198
+ * Exported for unit testing — `runDriveSession` calls it on every
199
+ * pending-count change.
200
+ */
201
+ export declare function renderStatusLine(opts: {
202
+ name: string;
203
+ mode: InboundDeliveryMode;
204
+ pending: number;
205
+ showHelp: boolean;
206
+ /** Terminal rows — defaults to 24 if unknown. The status line lands on row N. */
207
+ rows?: number;
208
+ }): string;
209
+ /** ----- Main session runner ----- */
210
+ /**
211
+ * Open a `drive` session. Resolves with the exit code the CLI should
212
+ * propagate. Cleans up its own stdin raw-mode and best-effort restores
213
+ * the worker's previous inbound delivery mode on any exit path.
214
+ */
215
+ export declare function runDriveSession(agentName: string, options: {
216
+ brokerUrl?: string;
217
+ apiKey?: string;
218
+ stateDir?: string;
219
+ }, deps: DriveDependencies): Promise<number>;
220
+ /** Register `agent-relay drive <name>` on the supplied commander program. */
221
+ export declare function registerDriveCommands(program: Command, overrides?: Partial<DriveDependencies>): void;
222
+ //# sourceMappingURL=drive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drive.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/drive.ts"],"names":[],"mappings":"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"}