cmux 0.3.6 → 0.4.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.
@@ -0,0 +1,770 @@
1
+ import type { AgentRecord, AgentReportSource, AgentState, Base64, CmuxRequestBase, ColorHex, EmptyResult, Id, IdRef, Json, NotificationLevel, PaneDirection, SplitDirection } from "./common.js";
2
+ import type { DeclarativeLayout, Layout, Tree, ViewportSplit } from "./tree.js";
3
+ import type { RenderRow } from "./render.js";
4
+ export interface IdentifyRequest extends CmuxRequestBase {
5
+ cmd: "identify";
6
+ }
7
+ export interface IdentifyResult {
8
+ app: "cmux-tui";
9
+ version: string;
10
+ build_commit?: string | null;
11
+ ghostty_commit?: string | null;
12
+ protocol: number;
13
+ capabilities?: string[];
14
+ session: string;
15
+ pid: number;
16
+ registry_id: string;
17
+ generation: string;
18
+ workspace_revision: number;
19
+ terminal_revision: number;
20
+ }
21
+ export interface PingRequest extends CmuxRequestBase {
22
+ cmd: "ping";
23
+ }
24
+ export interface PingResult {
25
+ ok: true;
26
+ version: string;
27
+ build_commit?: string | null;
28
+ ghostty_commit?: string | null;
29
+ protocol: number;
30
+ }
31
+ export interface SetClientInfoRequest extends CmuxRequestBase {
32
+ cmd: "set-client-info";
33
+ name?: string;
34
+ kind?: string;
35
+ }
36
+ export interface ListClientsRequest extends CmuxRequestBase {
37
+ cmd: "list-clients";
38
+ }
39
+ export type ClientTransport = "local" | "unix" | "ws";
40
+ export interface ClientSize {
41
+ surface: Id;
42
+ cols: number | null;
43
+ rows: number | null;
44
+ /** Protocol v10; protocol v9 reports this on ClientInfo instead. */
45
+ size_participating?: boolean;
46
+ }
47
+ export interface ClientInfo {
48
+ client: Id;
49
+ transport: ClientTransport;
50
+ name: string | null;
51
+ kind: string | null;
52
+ connected_seconds: number;
53
+ attached: Id[];
54
+ sizes: ClientSize[];
55
+ /** Protocol v9 compatibility; protocol v10 reports this per size entry. */
56
+ size_participating?: boolean;
57
+ self: boolean;
58
+ }
59
+ export type ListClientsResult = ClientInfo[];
60
+ export type TerminalLifecycle = "launching" | "adopting" | "running" | "exited" | "tombstoned";
61
+ export interface TerminalRecord {
62
+ terminal_id: string;
63
+ workspace_key: string;
64
+ terminal_incarnation: string | null;
65
+ lifecycle: TerminalLifecycle;
66
+ launch_spec: Json;
67
+ exit: Json | null;
68
+ }
69
+ export interface ListTerminalsRequest extends CmuxRequestBase {
70
+ cmd: "list-terminals";
71
+ }
72
+ export interface ListTerminalsResult {
73
+ registry_id: string;
74
+ generation: string;
75
+ terminal_revision: number;
76
+ terminals: TerminalRecord[];
77
+ }
78
+ export interface TerminalEventsRequest extends CmuxRequestBase {
79
+ cmd: "terminal-events";
80
+ after_revision?: number;
81
+ }
82
+ export interface TerminalRegistryEvent {
83
+ terminal_revision: number;
84
+ kind: string;
85
+ terminal_id: string;
86
+ workspace_key: string;
87
+ origin: string;
88
+ mutation_id: string;
89
+ result: Json;
90
+ }
91
+ export interface TerminalEventsResult {
92
+ registry_id: string;
93
+ generation: string;
94
+ terminal_revision: number;
95
+ events: TerminalRegistryEvent[];
96
+ }
97
+ export interface DetachClientRequest extends CmuxRequestBase {
98
+ cmd: "detach-client";
99
+ client: Id;
100
+ }
101
+ export interface SetClientSizingRequest extends CmuxRequestBase {
102
+ cmd: "set-client-sizing";
103
+ surface: Id;
104
+ client?: Id;
105
+ enabled: boolean;
106
+ exclusive?: boolean;
107
+ }
108
+ export interface ReloadConfigRequest extends CmuxRequestBase {
109
+ cmd: "reload-config";
110
+ }
111
+ export interface ReloadConfigResult {
112
+ reloaded: true;
113
+ path: string | null;
114
+ }
115
+ export interface SetWindowTitleRequest extends CmuxRequestBase {
116
+ cmd: "set-window-title";
117
+ title: string;
118
+ }
119
+ export interface ClearWindowTitleRequest extends CmuxRequestBase {
120
+ cmd: "clear-window-title";
121
+ }
122
+ export interface ListWorkspacesRequest extends CmuxRequestBase {
123
+ cmd: "list-workspaces";
124
+ }
125
+ export interface ExportLayoutRequest extends CmuxRequestBase {
126
+ cmd: "export-layout";
127
+ screen?: Id | null;
128
+ }
129
+ export interface ExportedPane {
130
+ pane: Id;
131
+ surfaces: Id[];
132
+ }
133
+ export interface ExportLayoutResult {
134
+ layout: Layout;
135
+ panes: ExportedPane[];
136
+ /** Authoritative width of the first viewport column. Older servers omit it. */
137
+ viewport_base_width?: number;
138
+ /** Authoritative widths of appended viewport columns. Older servers omit them. */
139
+ viewport_splits?: ViewportSplit[];
140
+ }
141
+ export interface ApplyLayoutRequest extends CmuxRequestBase {
142
+ cmd: "apply-layout";
143
+ workspace?: Id | null;
144
+ name?: string | null;
145
+ layout: DeclarativeLayout;
146
+ }
147
+ export interface AppliedPane {
148
+ pane: Id;
149
+ surface: Id;
150
+ }
151
+ export interface ApplyLayoutResult {
152
+ screen: Id;
153
+ panes: AppliedPane[];
154
+ }
155
+ export interface SendRequest extends CmuxRequestBase {
156
+ cmd: "send";
157
+ surface: Id;
158
+ /** When both are supplied, `text` is written before `bytes`. */
159
+ text?: string | null;
160
+ bytes?: Base64 | null;
161
+ /** Protocol v7 bracketed-paste request. */
162
+ paste?: boolean;
163
+ }
164
+ export type TerminalKey = "unidentified" | "backquote" | "backslash" | "bracket-left" | "bracket-right" | "comma" | "digit0" | "digit1" | "digit2" | "digit3" | "digit4" | "digit5" | "digit6" | "digit7" | "digit8" | "digit9" | "equal" | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "minus" | "period" | "quote" | "semicolon" | "slash" | "backspace" | "enter" | "space" | "tab" | "delete" | "end" | "home" | "insert" | "page-down" | "page-up" | "arrow-down" | "arrow-left" | "arrow-right" | "arrow-up" | "numpad0" | "numpad1" | "numpad2" | "numpad3" | "numpad4" | "numpad5" | "numpad6" | "numpad7" | "numpad8" | "numpad9" | "numpad-add" | "numpad-backspace" | "numpad-comma" | "numpad-decimal" | "numpad-divide" | "numpad-enter" | "numpad-equal" | "numpad-multiply" | "numpad-subtract" | "numpad-up" | "numpad-down" | "numpad-right" | "numpad-left" | "numpad-begin" | "numpad-home" | "numpad-end" | "numpad-insert" | "numpad-delete" | "numpad-page-up" | "numpad-page-down" | "escape" | "f1" | "f2" | "f3" | "f4" | "f5" | "f6" | "f7" | "f8" | "f9" | "f10" | "f11" | "f12" | "f13" | "f14" | "f15" | "f16" | "f17" | "f18" | "f19" | "f20";
165
+ export interface TerminalModifiers {
166
+ shift: boolean;
167
+ control: boolean;
168
+ alt: boolean;
169
+ super: boolean;
170
+ caps_lock: boolean;
171
+ num_lock: boolean;
172
+ }
173
+ export interface TerminalKeyInput {
174
+ key: TerminalKey;
175
+ mods: TerminalModifiers;
176
+ consumed_mods: TerminalModifiers;
177
+ composing: boolean;
178
+ utf8: string;
179
+ unshifted_codepoint: string | null;
180
+ shifted_codepoint: string | null;
181
+ base_layout_codepoint: string | null;
182
+ action: "press" | "release" | "repeat" | null;
183
+ macos_option_as_alt: boolean;
184
+ }
185
+ export interface ClearHistoryRequest extends CmuxRequestBase {
186
+ cmd: "clear-history";
187
+ surface: Id;
188
+ fallback_key?: TerminalKeyInput | null;
189
+ }
190
+ export interface ReadScreenRequest extends CmuxRequestBase {
191
+ cmd: "read-screen";
192
+ surface: Id;
193
+ }
194
+ export interface ReadScreenResult {
195
+ text: string;
196
+ }
197
+ export interface ReadScrollbackRequest extends CmuxRequestBase {
198
+ cmd: "read-scrollback";
199
+ surface: Id;
200
+ start: number;
201
+ count: number;
202
+ }
203
+ export interface ReadScrollbackResult {
204
+ rows: RenderRow[];
205
+ start: number;
206
+ total: number;
207
+ }
208
+ export interface SidebarPluginRequest extends CmuxRequestBase {
209
+ cmd: "sidebar-plugin";
210
+ cols: number;
211
+ rows: number;
212
+ relaunch?: boolean | null;
213
+ }
214
+ export interface SidebarPluginResult {
215
+ surface: Id | null;
216
+ error: string | null;
217
+ retry_after_ms: number | null;
218
+ }
219
+ export interface VtStateRequest extends CmuxRequestBase {
220
+ cmd: "vt-state";
221
+ surface: Id;
222
+ }
223
+ export interface VtStateResult {
224
+ cols: number;
225
+ rows: number;
226
+ data: Base64;
227
+ }
228
+ export interface ResolveTerminalRequest extends CmuxRequestBase {
229
+ cmd: "resolve-terminal";
230
+ /** Stable 16-byte terminal UUID encoded as exactly 32 lowercase hex characters. */
231
+ terminal_id: string;
232
+ }
233
+ export interface ResolveTerminalResult {
234
+ surface: Id | null;
235
+ terminal_id: string;
236
+ terminal_incarnation: string | null;
237
+ workspace_key: string;
238
+ lifecycle: TerminalLifecycle;
239
+ launch_spec: Json;
240
+ exit: Json | null;
241
+ registry_id: string;
242
+ generation: string;
243
+ terminal_revision: number;
244
+ }
245
+ export interface CloseTerminalRequest extends CmuxRequestBase {
246
+ cmd: "close-terminal";
247
+ terminal_id: string;
248
+ terminal_incarnation?: string | null;
249
+ origin?: string;
250
+ mutation_id?: string;
251
+ expected_generation?: string | null;
252
+ expected_terminal_revision?: number | null;
253
+ }
254
+ export interface CloseTerminalResult {
255
+ surface: Id | null;
256
+ terminal_id: string;
257
+ terminal_incarnation: string | null;
258
+ closed: true;
259
+ already_closed: boolean;
260
+ registry_id: string;
261
+ generation: string;
262
+ terminal_revision: number;
263
+ }
264
+ export interface NewTabRequest extends CmuxRequestBase {
265
+ cmd: "new-tab";
266
+ pane?: Id | null;
267
+ cwd?: string | null;
268
+ /** `cols` is used only when paired with `rows`. */
269
+ cols?: number | null;
270
+ rows?: number | null;
271
+ }
272
+ export interface NewBrowserTabRequest extends CmuxRequestBase {
273
+ cmd: "new-browser-tab";
274
+ url: string;
275
+ pane?: Id | null;
276
+ cols?: number | null;
277
+ rows?: number | null;
278
+ }
279
+ export interface NewWorkspaceRequest extends CmuxRequestBase {
280
+ cmd: "new-workspace";
281
+ name?: string | null;
282
+ cols?: number | null;
283
+ rows?: number | null;
284
+ }
285
+ export interface CreateWorkspaceRequest extends CmuxRequestBase {
286
+ cmd: "create-workspace";
287
+ name?: string | null;
288
+ key?: string | null;
289
+ expected_revision?: number | null;
290
+ }
291
+ export interface WorkspacePlacement {
292
+ workspace: Id;
293
+ key: string;
294
+ index: number;
295
+ workspace_revision: number;
296
+ }
297
+ export type WorkspaceSelector = {
298
+ workspace: Id;
299
+ key?: string | null;
300
+ } | {
301
+ key: string;
302
+ workspace?: Id | null;
303
+ };
304
+ interface CreateTerminalRequestBase extends CmuxRequestBase {
305
+ cmd: "create-terminal";
306
+ argv?: string[] | null;
307
+ command?: string | null;
308
+ cwd?: string | null;
309
+ name?: string | null;
310
+ cols?: number | null;
311
+ rows?: number | null;
312
+ terminal_id?: string | null;
313
+ origin?: string;
314
+ mutation_id?: string;
315
+ expected_generation?: string | null;
316
+ expected_terminal_revision?: number | null;
317
+ }
318
+ export type CreateTerminalRequest = CreateTerminalRequestBase & WorkspaceSelector;
319
+ export interface TerminalPlacement {
320
+ surface: Id;
321
+ pane: Id;
322
+ screen: Id;
323
+ workspace: Id;
324
+ key: string;
325
+ terminal_id: string | null;
326
+ terminal_incarnation: string | null;
327
+ lifecycle: "running" | null;
328
+ terminal_revision: number;
329
+ replayed: boolean;
330
+ registry_id: string;
331
+ generation: string;
332
+ }
333
+ export interface NewScreenRequest extends CmuxRequestBase {
334
+ cmd: "new-screen";
335
+ workspace?: Id | null;
336
+ cols?: number | null;
337
+ rows?: number | null;
338
+ }
339
+ export interface NewPaneRequest extends CmuxRequestBase {
340
+ cmd: "new-pane";
341
+ pane: Id;
342
+ cols?: number | null;
343
+ rows?: number | null;
344
+ }
345
+ export interface NewPaneRightRequest extends CmuxRequestBase {
346
+ cmd: "new-pane-right";
347
+ pane: Id;
348
+ width?: number | null;
349
+ cols?: number | null;
350
+ rows?: number | null;
351
+ }
352
+ export interface SplitRequest extends CmuxRequestBase {
353
+ cmd: "split";
354
+ pane: Id;
355
+ dir: SplitDirection;
356
+ cols?: number | null;
357
+ rows?: number | null;
358
+ }
359
+ export interface SurfaceResult {
360
+ surface: Id;
361
+ /** Present for process-hosted terminal creation, absent for browser surfaces. */
362
+ terminal_id?: string | null;
363
+ terminal_incarnation?: string | null;
364
+ }
365
+ export interface SetRatioRequest extends CmuxRequestBase {
366
+ cmd: "set-ratio";
367
+ pane: Id;
368
+ dir: SplitDirection;
369
+ /** The server clamps this value to `0.05..0.95`. */
370
+ ratio: number;
371
+ }
372
+ export interface SetSplitRatioRequest extends CmuxRequestBase {
373
+ cmd: "set-split-ratio";
374
+ split: Id;
375
+ /** The server clamps this value to `0.05..0.95`. */
376
+ ratio: number;
377
+ /** Samples sharing one client-scoped transaction form one undo entry. */
378
+ transaction?: number | null;
379
+ }
380
+ export interface SetViewportPaneWidthRequest extends CmuxRequestBase {
381
+ cmd: "set-viewport-pane-width";
382
+ pane: Id;
383
+ width: number;
384
+ /** Samples sharing one client-scoped transaction form one undo entry. */
385
+ transaction?: number | null;
386
+ }
387
+ interface UndoLayoutRequestBase extends CmuxRequestBase {
388
+ cmd: "undo-layout";
389
+ pane: Id;
390
+ }
391
+ export type UndoLayoutRequest = (UndoLayoutRequestBase & {
392
+ revision?: null;
393
+ confirm_close?: false | null;
394
+ }) | (UndoLayoutRequestBase & {
395
+ revision: number;
396
+ confirm_close: true;
397
+ });
398
+ export type LayoutUndoResult = {
399
+ undone: true;
400
+ confirmation_required?: false;
401
+ screen: Id;
402
+ revision: number;
403
+ } | {
404
+ undone: false;
405
+ confirmation_required: true;
406
+ screen: Id;
407
+ revision: number;
408
+ closes_panes: Id[];
409
+ };
410
+ export interface PaneNeighborRequest extends CmuxRequestBase {
411
+ cmd: "pane-neighbor";
412
+ pane: Id;
413
+ dir: PaneDirection;
414
+ }
415
+ export interface PaneNeighborResult {
416
+ pane: Id | null;
417
+ }
418
+ export interface FocusDirectionRequest extends CmuxRequestBase {
419
+ cmd: "focus-direction";
420
+ pane?: Id | null;
421
+ dir: PaneDirection;
422
+ }
423
+ export interface FocusDirectionResult {
424
+ pane: Id;
425
+ }
426
+ interface SwapPaneRequestBase extends CmuxRequestBase {
427
+ cmd: "swap-pane";
428
+ pane: Id;
429
+ }
430
+ export type SwapPaneRequest = (SwapPaneRequestBase & {
431
+ dir: PaneDirection;
432
+ target?: null;
433
+ }) | (SwapPaneRequestBase & {
434
+ target: Id;
435
+ dir?: null;
436
+ });
437
+ export interface ZoomPaneRequest extends CmuxRequestBase {
438
+ cmd: "zoom-pane";
439
+ pane?: Id | null;
440
+ mode?: "toggle" | "on" | "off" | null;
441
+ }
442
+ export interface ZoomPaneResult {
443
+ pane: Id;
444
+ zoomed: boolean;
445
+ zoomed_pane: Id | null;
446
+ }
447
+ export interface ProcessInfoRequest extends CmuxRequestBase {
448
+ cmd: "process-info";
449
+ surface: Id;
450
+ }
451
+ export interface ProcessInfoResult {
452
+ pid: number | null;
453
+ command: string | null;
454
+ cwd: string | null;
455
+ }
456
+ export interface SetDefaultColorsRequest extends CmuxRequestBase {
457
+ cmd: "set-default-colors";
458
+ fg?: ColorHex | null;
459
+ bg?: ColorHex | null;
460
+ }
461
+ export interface CloseSurfaceRequest extends CmuxRequestBase {
462
+ cmd: "close-surface";
463
+ surface: Id;
464
+ }
465
+ export interface ClosePaneRequest extends CmuxRequestBase {
466
+ cmd: "close-pane";
467
+ pane: Id;
468
+ }
469
+ export interface CloseScreenRequest extends CmuxRequestBase {
470
+ cmd: "close-screen";
471
+ screen: Id;
472
+ }
473
+ export interface WorkspaceMutation {
474
+ workspace: Id;
475
+ key: string;
476
+ workspace_revision: number;
477
+ }
478
+ interface CloseWorkspaceRequestBase extends CmuxRequestBase {
479
+ cmd: "close-workspace";
480
+ expected_revision?: number | null;
481
+ }
482
+ export type CloseWorkspaceRequest = CloseWorkspaceRequestBase & WorkspaceSelector;
483
+ export interface RenamePaneRequest extends CmuxRequestBase {
484
+ cmd: "rename-pane";
485
+ pane: Id;
486
+ name: string;
487
+ }
488
+ export interface RenameSurfaceRequest extends CmuxRequestBase {
489
+ cmd: "rename-surface";
490
+ surface: Id;
491
+ name: string;
492
+ }
493
+ export interface RenameScreenRequest extends CmuxRequestBase {
494
+ cmd: "rename-screen";
495
+ screen: Id;
496
+ name: string;
497
+ }
498
+ interface RenameWorkspaceRequestBase extends CmuxRequestBase {
499
+ cmd: "rename-workspace";
500
+ name: string;
501
+ expected_revision?: number | null;
502
+ }
503
+ export type RenameWorkspaceRequest = RenameWorkspaceRequestBase & WorkspaceSelector;
504
+ export interface ResizeSurfaceRequest extends CmuxRequestBase {
505
+ cmd: "resize-surface";
506
+ surface: Id;
507
+ cols: number;
508
+ rows: number;
509
+ }
510
+ export interface ResizeSurfaceResult {
511
+ accepted: boolean;
512
+ reservation_id?: number | null;
513
+ }
514
+ export interface ReleaseSurfaceSizeRequest extends CmuxRequestBase {
515
+ cmd: "release-surface-size";
516
+ surface: Id;
517
+ }
518
+ export interface FocusPaneRequest extends CmuxRequestBase {
519
+ cmd: "focus-pane";
520
+ pane: Id;
521
+ }
522
+ export interface SelectTabRequest extends CmuxRequestBase {
523
+ cmd: "select-tab";
524
+ pane?: Id | null;
525
+ /** If both selectors are present, `index` wins. */
526
+ index?: number | null;
527
+ delta?: number | null;
528
+ }
529
+ export interface SelectScreenRequest extends CmuxRequestBase {
530
+ cmd: "select-screen";
531
+ /** If both selectors are present, `index` wins. */
532
+ index?: number | null;
533
+ delta?: number | null;
534
+ }
535
+ export interface SelectWorkspaceRequest extends CmuxRequestBase {
536
+ cmd: "select-workspace";
537
+ /** If both selectors are present, `index` wins. */
538
+ index?: number | null;
539
+ delta?: number | null;
540
+ }
541
+ export interface MoveTerminalRequest extends CmuxRequestBase {
542
+ cmd: "move-terminal";
543
+ terminal_id: string;
544
+ workspace_key: string;
545
+ terminal_incarnation?: string | null;
546
+ origin?: string;
547
+ mutation_id?: string;
548
+ expected_generation?: string | null;
549
+ expected_terminal_revision?: number | null;
550
+ }
551
+ export interface MoveTerminalResult {
552
+ surface: Id | null;
553
+ pane: Id | null;
554
+ screen: Id | null;
555
+ workspace: Id | null;
556
+ terminal_id: string;
557
+ terminal_incarnation: string | null;
558
+ workspace_key: string;
559
+ lifecycle: TerminalLifecycle;
560
+ changed: boolean;
561
+ replayed: boolean;
562
+ terminal_revision: number;
563
+ registry_id: string;
564
+ generation: string;
565
+ }
566
+ export interface MoveTabRequest extends CmuxRequestBase {
567
+ cmd: "move-tab";
568
+ surface: Id;
569
+ pane: Id;
570
+ index: number;
571
+ }
572
+ interface MoveWorkspaceRequestBase extends CmuxRequestBase {
573
+ cmd: "move-workspace";
574
+ index: number;
575
+ expected_revision?: number | null;
576
+ }
577
+ export type MoveWorkspaceRequest = MoveWorkspaceRequestBase & WorkspaceSelector;
578
+ export interface ScrollSurfaceRequest extends CmuxRequestBase {
579
+ cmd: "scroll-surface";
580
+ surface: Id;
581
+ delta: number;
582
+ }
583
+ export interface SubscribeRequest extends CmuxRequestBase {
584
+ cmd: "subscribe";
585
+ /** Protocol v7 tree lifecycle delivery mode. */
586
+ tree_events?: "coarse" | "deltas";
587
+ }
588
+ export interface AttachSurfaceRequest extends CmuxRequestBase {
589
+ cmd: "attach-surface";
590
+ surface: Id;
591
+ mode?: "bytes" | "render";
592
+ cols?: number;
593
+ rows?: number;
594
+ }
595
+ export interface WaitForRequest extends CmuxRequestBase {
596
+ cmd: "wait-for";
597
+ surface: IdRef;
598
+ pattern: string;
599
+ /** `0` performs one immediate check. */
600
+ timeout_ms: number;
601
+ }
602
+ export interface WaitForResult {
603
+ matched: true;
604
+ text: string;
605
+ elapsed_ms: number;
606
+ }
607
+ interface RunRequestBase extends CmuxRequestBase {
608
+ cmd: "run";
609
+ cwd?: string | null;
610
+ pane?: IdRef | null;
611
+ new_workspace?: boolean;
612
+ name?: string | null;
613
+ cols?: number | null;
614
+ rows?: number | null;
615
+ }
616
+ export type RunRequest = (RunRequestBase & {
617
+ argv: string[];
618
+ command?: null;
619
+ }) | (RunRequestBase & {
620
+ command: string;
621
+ argv?: null;
622
+ });
623
+ export interface RunResult {
624
+ surface: Id;
625
+ pane: Id;
626
+ screen: Id;
627
+ workspace: Id;
628
+ }
629
+ export interface SendKeyRequest extends CmuxRequestBase {
630
+ cmd: "send-key";
631
+ surface: IdRef;
632
+ keys: string[];
633
+ }
634
+ export type CopyMode = "screen" | "selection" | "scrollback";
635
+ export interface CopyRequest extends CmuxRequestBase {
636
+ cmd: "copy";
637
+ surface: IdRef;
638
+ mode: CopyMode;
639
+ }
640
+ export interface CopyResult {
641
+ text: string;
642
+ mode: CopyMode;
643
+ }
644
+ export type IdKind = "workspace" | "screen" | "pane" | "surface";
645
+ export interface IdsRequest extends CmuxRequestBase {
646
+ cmd: "ids";
647
+ kind?: IdKind | null;
648
+ }
649
+ export interface IdMapping {
650
+ kind: IdKind;
651
+ id: Id;
652
+ short_id: string;
653
+ }
654
+ export interface IdsResult {
655
+ ids: IdMapping[];
656
+ }
657
+ export interface NotifyRequest extends CmuxRequestBase {
658
+ cmd: "notify";
659
+ title: string;
660
+ body: string;
661
+ level?: NotificationLevel | null;
662
+ surface?: IdRef | null;
663
+ }
664
+ export interface NotifyResult {
665
+ notification: Id;
666
+ }
667
+ export interface ListAgentsRequest extends CmuxRequestBase {
668
+ cmd: "list-agents";
669
+ surface?: IdRef | null;
670
+ state?: AgentState | null;
671
+ }
672
+ export interface ListAgentsResult {
673
+ agents: AgentRecord[];
674
+ }
675
+ export interface ReportAgentRequest extends CmuxRequestBase {
676
+ cmd: "report-agent";
677
+ surface: IdRef;
678
+ state: AgentState;
679
+ source: AgentReportSource;
680
+ session?: string | null;
681
+ }
682
+ export interface ReportAgentResult {
683
+ surface: Id;
684
+ state: AgentState;
685
+ source: AgentReportSource;
686
+ session: string | null;
687
+ }
688
+ /** Every implemented command request, discriminated by exact wire `cmd`. */
689
+ export type CmuxRequest = IdentifyRequest | PingRequest | SetClientInfoRequest | ListClientsRequest | ListTerminalsRequest | TerminalEventsRequest | DetachClientRequest | SetClientSizingRequest | ReloadConfigRequest | SetWindowTitleRequest | ClearWindowTitleRequest | ListWorkspacesRequest | ExportLayoutRequest | ApplyLayoutRequest | SendRequest | ClearHistoryRequest | ReadScreenRequest | ReadScrollbackRequest | SidebarPluginRequest | VtStateRequest | ResolveTerminalRequest | CloseTerminalRequest | NewTabRequest | NewBrowserTabRequest | NewWorkspaceRequest | CreateWorkspaceRequest | CreateTerminalRequest | NewScreenRequest | NewPaneRequest | NewPaneRightRequest | SplitRequest | SetRatioRequest | SetSplitRatioRequest | SetViewportPaneWidthRequest | UndoLayoutRequest | PaneNeighborRequest | FocusDirectionRequest | SwapPaneRequest | ZoomPaneRequest | ProcessInfoRequest | SetDefaultColorsRequest | CloseSurfaceRequest | ClosePaneRequest | CloseScreenRequest | CloseWorkspaceRequest | RenamePaneRequest | RenameSurfaceRequest | RenameScreenRequest | RenameWorkspaceRequest | ResizeSurfaceRequest | ReleaseSurfaceSizeRequest | FocusPaneRequest | SelectTabRequest | SelectScreenRequest | SelectWorkspaceRequest | MoveTerminalRequest | MoveTabRequest | MoveWorkspaceRequest | ScrollSurfaceRequest | SubscribeRequest | AttachSurfaceRequest | WaitForRequest | RunRequest | SendKeyRequest | CopyRequest | IdsRequest | NotifyRequest | ListAgentsRequest | ReportAgentRequest;
690
+ /** Command name to successful response `data` mapping. */
691
+ export interface CmuxResponseDataMap {
692
+ identify: IdentifyResult;
693
+ ping: PingResult;
694
+ "set-client-info": EmptyResult;
695
+ "list-clients": ListClientsResult;
696
+ "list-terminals": ListTerminalsResult;
697
+ "terminal-events": TerminalEventsResult;
698
+ "detach-client": EmptyResult;
699
+ "set-client-sizing": EmptyResult;
700
+ "reload-config": ReloadConfigResult;
701
+ "set-window-title": EmptyResult;
702
+ "clear-window-title": EmptyResult;
703
+ "list-workspaces": Tree;
704
+ "export-layout": ExportLayoutResult;
705
+ "apply-layout": ApplyLayoutResult;
706
+ send: EmptyResult;
707
+ "clear-history": EmptyResult;
708
+ "read-screen": ReadScreenResult;
709
+ "read-scrollback": ReadScrollbackResult;
710
+ "sidebar-plugin": SidebarPluginResult;
711
+ "vt-state": VtStateResult;
712
+ "resolve-terminal": ResolveTerminalResult;
713
+ "close-terminal": CloseTerminalResult;
714
+ "new-tab": SurfaceResult;
715
+ "new-browser-tab": SurfaceResult;
716
+ "new-workspace": SurfaceResult;
717
+ "create-workspace": WorkspacePlacement;
718
+ "create-terminal": TerminalPlacement;
719
+ "new-screen": SurfaceResult;
720
+ "new-pane": SurfaceResult;
721
+ "new-pane-right": SurfaceResult;
722
+ split: SurfaceResult;
723
+ "set-ratio": EmptyResult;
724
+ "set-viewport-pane-width": EmptyResult;
725
+ "undo-layout": LayoutUndoResult;
726
+ "set-split-ratio": EmptyResult;
727
+ "pane-neighbor": PaneNeighborResult;
728
+ "focus-direction": FocusDirectionResult;
729
+ "swap-pane": EmptyResult;
730
+ "zoom-pane": ZoomPaneResult;
731
+ "process-info": ProcessInfoResult;
732
+ "set-default-colors": EmptyResult;
733
+ "close-surface": EmptyResult;
734
+ "close-pane": EmptyResult;
735
+ "close-screen": EmptyResult;
736
+ "close-workspace": EmptyResult | WorkspaceMutation;
737
+ "rename-pane": EmptyResult;
738
+ "rename-surface": EmptyResult;
739
+ "rename-screen": EmptyResult;
740
+ "rename-workspace": EmptyResult | WorkspaceMutation;
741
+ "resize-surface": ResizeSurfaceResult;
742
+ "release-surface-size": EmptyResult;
743
+ "focus-pane": EmptyResult;
744
+ "select-tab": EmptyResult;
745
+ "select-screen": EmptyResult;
746
+ "select-workspace": EmptyResult;
747
+ "move-terminal": MoveTerminalResult;
748
+ "move-tab": EmptyResult;
749
+ "move-workspace": EmptyResult | WorkspaceMutation;
750
+ "scroll-surface": EmptyResult;
751
+ subscribe: EmptyResult;
752
+ "attach-surface": EmptyResult;
753
+ "wait-for": WaitForResult;
754
+ run: RunResult;
755
+ "send-key": EmptyResult;
756
+ copy: CopyResult;
757
+ ids: IdsResult;
758
+ notify: NotifyResult;
759
+ "list-agents": ListAgentsResult;
760
+ "report-agent": ReportAgentResult;
761
+ }
762
+ export type CmuxCommand = keyof CmuxResponseDataMap;
763
+ export type CmuxRequestFor<C extends CmuxCommand> = Extract<CmuxRequest, {
764
+ cmd: C;
765
+ }>;
766
+ type DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, Extract<keyof T, K>> : never;
767
+ export type CmuxRequestParams<C extends CmuxCommand> = DistributiveOmit<CmuxRequestFor<C>, "id" | "cmd">;
768
+ export type CmuxResponseDataFor<C extends CmuxCommand> = CmuxResponseDataMap[C];
769
+ export type CmuxResponseData<C extends CmuxRequest> = CmuxResponseDataFor<C["cmd"]>;
770
+ export {};