@immediately-run/sandbox-protocol 0.1.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,2123 @@
1
+ {
2
+ "formatVersion": 1,
3
+ "repo": "@immediately-run/sdk",
4
+ "channels": {
5
+ "api-catalog": {
6
+ "kind": "push",
7
+ "direction": "host->app",
8
+ "poll": "request-api-catalog",
9
+ "payload": {
10
+ "reads": [
11
+ "methods"
12
+ ]
13
+ },
14
+ "value": {
15
+ "array": {
16
+ "fields": [
17
+ {
18
+ "name": "capability",
19
+ "optional": false,
20
+ "type": "string"
21
+ },
22
+ {
23
+ "name": "name",
24
+ "optional": false,
25
+ "type": "string"
26
+ },
27
+ {
28
+ "name": "paramsSchema",
29
+ "optional": true,
30
+ "type": "Record<string, unknown> | undefined"
31
+ },
32
+ {
33
+ "name": "stream",
34
+ "optional": true,
35
+ "type": "boolean | undefined"
36
+ }
37
+ ]
38
+ },
39
+ "type": "ApiMethod[]"
40
+ },
41
+ "sites": [
42
+ "src/catalog.ts"
43
+ ]
44
+ },
45
+ "auth-state": {
46
+ "kind": "push",
47
+ "direction": "host->app",
48
+ "poll": "request-auth-state",
49
+ "payload": {
50
+ "reads": [
51
+ "state"
52
+ ]
53
+ },
54
+ "value": {
55
+ "fields": [
56
+ {
57
+ "name": "status",
58
+ "optional": false,
59
+ "union": [
60
+ {
61
+ "type": "\"signed-in\""
62
+ },
63
+ {
64
+ "type": "\"signed-out\""
65
+ },
66
+ {
67
+ "type": "\"unknown\""
68
+ }
69
+ ]
70
+ },
71
+ {
72
+ "name": "user",
73
+ "optional": false,
74
+ "union": [
75
+ {
76
+ "type": "SandboxUser"
77
+ },
78
+ {
79
+ "type": "null"
80
+ }
81
+ ]
82
+ }
83
+ ],
84
+ "type": "AuthState"
85
+ },
86
+ "sites": [
87
+ "src/auth.ts"
88
+ ]
89
+ },
90
+ "compile": {
91
+ "kind": "message",
92
+ "direction": "host->app",
93
+ "payload": {
94
+ "type": "unknown"
95
+ },
96
+ "sites": [
97
+ "src/moduleCache.tsx"
98
+ ]
99
+ },
100
+ "debug-enabled": {
101
+ "kind": "push",
102
+ "direction": "host->app",
103
+ "poll": "request-debug-enabled",
104
+ "payload": {
105
+ "reads": [
106
+ "enabled"
107
+ ]
108
+ },
109
+ "value": {
110
+ "type": "boolean"
111
+ },
112
+ "sites": [
113
+ "src/debug.ts"
114
+ ]
115
+ },
116
+ "debug-log": {
117
+ "kind": "message",
118
+ "direction": "app->host",
119
+ "payload": {
120
+ "fields": [
121
+ {
122
+ "name": "data",
123
+ "optional": false,
124
+ "type": "unknown"
125
+ },
126
+ {
127
+ "name": "level",
128
+ "optional": false,
129
+ "union": [
130
+ {
131
+ "type": "\"debug\""
132
+ },
133
+ {
134
+ "type": "\"error\""
135
+ },
136
+ {
137
+ "type": "\"info\""
138
+ },
139
+ {
140
+ "type": "\"warn\""
141
+ }
142
+ ]
143
+ },
144
+ {
145
+ "name": "message",
146
+ "optional": false,
147
+ "type": "string"
148
+ }
149
+ ]
150
+ },
151
+ "sites": [
152
+ "src/debug.ts"
153
+ ]
154
+ },
155
+ "debug-query": {
156
+ "kind": "message",
157
+ "direction": "host->app",
158
+ "payload": {
159
+ "fields": [
160
+ {
161
+ "name": "id",
162
+ "optional": true,
163
+ "type": "unknown"
164
+ },
165
+ {
166
+ "name": "method",
167
+ "optional": true,
168
+ "type": "unknown"
169
+ },
170
+ {
171
+ "name": "params",
172
+ "optional": true,
173
+ "type": "unknown"
174
+ }
175
+ ],
176
+ "reads": [
177
+ "id",
178
+ "method",
179
+ "params"
180
+ ]
181
+ },
182
+ "sites": [
183
+ "src/debug.ts"
184
+ ]
185
+ },
186
+ "debug-query-result": {
187
+ "kind": "message",
188
+ "direction": "app->host",
189
+ "payload": {
190
+ "fields": [
191
+ {
192
+ "name": "error",
193
+ "optional": false,
194
+ "union": [
195
+ {
196
+ "type": "string"
197
+ },
198
+ {
199
+ "type": "undefined"
200
+ }
201
+ ]
202
+ },
203
+ {
204
+ "name": "id",
205
+ "optional": false,
206
+ "type": "unknown"
207
+ },
208
+ {
209
+ "name": "ok",
210
+ "optional": false,
211
+ "type": "boolean"
212
+ },
213
+ {
214
+ "name": "result",
215
+ "optional": false,
216
+ "type": "unknown"
217
+ }
218
+ ]
219
+ },
220
+ "sites": [
221
+ "src/debug.ts"
222
+ ]
223
+ },
224
+ "diagnostics": {
225
+ "kind": "push",
226
+ "direction": "host->app",
227
+ "poll": "request-diagnostics",
228
+ "payload": {
229
+ "reads": [
230
+ "buildErrors",
231
+ "consoleEntries",
232
+ "provenance"
233
+ ]
234
+ },
235
+ "value": {
236
+ "fields": [
237
+ {
238
+ "name": "buildErrors",
239
+ "optional": false,
240
+ "array": {
241
+ "type": "BuildError"
242
+ }
243
+ },
244
+ {
245
+ "name": "consoleEntries",
246
+ "optional": false,
247
+ "array": {
248
+ "type": "ConsoleEntry"
249
+ }
250
+ },
251
+ {
252
+ "name": "provenance",
253
+ "optional": false,
254
+ "union": [
255
+ {
256
+ "type": "DiagnosticsProvenance"
257
+ },
258
+ {
259
+ "type": "null"
260
+ }
261
+ ]
262
+ }
263
+ ],
264
+ "type": "Diagnostics"
265
+ },
266
+ "sites": [
267
+ "src/diagnostics.ts"
268
+ ]
269
+ },
270
+ "dnd-cancel": {
271
+ "kind": "message",
272
+ "direction": "app->host",
273
+ "payload": {
274
+ "type": "{}"
275
+ },
276
+ "sites": [
277
+ "src/dnd.ts"
278
+ ]
279
+ },
280
+ "dropped-item": {
281
+ "kind": "message",
282
+ "direction": "host->app",
283
+ "payload": {
284
+ "fields": [
285
+ {
286
+ "name": "from",
287
+ "optional": false,
288
+ "type": "string"
289
+ },
290
+ {
291
+ "name": "item",
292
+ "optional": false,
293
+ "fields": [
294
+ {
295
+ "name": "bytes",
296
+ "optional": true,
297
+ "union": [
298
+ {
299
+ "type": "Uint8Array<ArrayBufferLike>"
300
+ },
301
+ {
302
+ "type": "undefined"
303
+ }
304
+ ]
305
+ },
306
+ {
307
+ "name": "kind",
308
+ "optional": false,
309
+ "union": [
310
+ {
311
+ "type": "\"dir\""
312
+ },
313
+ {
314
+ "type": "\"file\""
315
+ }
316
+ ]
317
+ },
318
+ {
319
+ "name": "mountId",
320
+ "optional": false,
321
+ "type": "string"
322
+ },
323
+ {
324
+ "name": "name",
325
+ "optional": false,
326
+ "type": "string"
327
+ },
328
+ {
329
+ "name": "relPath",
330
+ "optional": false,
331
+ "type": "string"
332
+ }
333
+ ]
334
+ },
335
+ {
336
+ "name": "position",
337
+ "optional": false,
338
+ "fields": [
339
+ {
340
+ "name": "x",
341
+ "optional": false,
342
+ "type": "number"
343
+ },
344
+ {
345
+ "name": "y",
346
+ "optional": false,
347
+ "type": "number"
348
+ }
349
+ ]
350
+ }
351
+ ],
352
+ "reads": [
353
+ "from",
354
+ "item",
355
+ "position"
356
+ ]
357
+ },
358
+ "sites": [
359
+ "src/dnd.ts"
360
+ ]
361
+ },
362
+ "editor-context": {
363
+ "kind": "push",
364
+ "direction": "host->app",
365
+ "poll": "request-editor-context",
366
+ "payload": {
367
+ "reads": [
368
+ "activeFile",
369
+ "dirtyPaths",
370
+ "openFiles",
371
+ "viewedFile"
372
+ ]
373
+ },
374
+ "value": {
375
+ "fields": [
376
+ {
377
+ "name": "activeFile",
378
+ "optional": false,
379
+ "union": [
380
+ {
381
+ "type": "null"
382
+ },
383
+ {
384
+ "type": "string"
385
+ }
386
+ ]
387
+ },
388
+ {
389
+ "name": "dirtyPaths",
390
+ "optional": false,
391
+ "array": {
392
+ "type": "string"
393
+ }
394
+ },
395
+ {
396
+ "name": "openFiles",
397
+ "optional": false,
398
+ "array": {
399
+ "type": "string"
400
+ }
401
+ },
402
+ {
403
+ "name": "viewedFile",
404
+ "optional": false,
405
+ "union": [
406
+ {
407
+ "type": "null"
408
+ },
409
+ {
410
+ "type": "string"
411
+ }
412
+ ]
413
+ }
414
+ ],
415
+ "type": "EditorContext"
416
+ },
417
+ "sites": [
418
+ "src/editorContext.ts"
419
+ ],
420
+ "divergent": true,
421
+ "divergentNote": "declared-incomplete — the host (site-main channelBridge.ts) sends {dirtyPaths, openFiles, activeFile, viewedFile}; this side declares only {dirtyPaths, activeFile?} while the SDK reads all four. `viewedFile` (R3-268) and `openFiles` never entered this declaration. R3-274e picks one shape for both sides."
422
+ },
423
+ "form-factor": {
424
+ "kind": "push",
425
+ "direction": "host->app",
426
+ "poll": "request-form-factor",
427
+ "payload": {
428
+ "reads": [
429
+ "formFactor"
430
+ ]
431
+ },
432
+ "value": {
433
+ "fields": [
434
+ {
435
+ "name": "class",
436
+ "optional": false,
437
+ "union": [
438
+ {
439
+ "type": "\"desktop\""
440
+ },
441
+ {
442
+ "type": "\"mobile\""
443
+ },
444
+ {
445
+ "type": "\"tablet\""
446
+ }
447
+ ]
448
+ },
449
+ {
450
+ "name": "height",
451
+ "optional": false,
452
+ "type": "number"
453
+ },
454
+ {
455
+ "name": "orientation",
456
+ "optional": false,
457
+ "union": [
458
+ {
459
+ "type": "\"landscape\""
460
+ },
461
+ {
462
+ "type": "\"portrait\""
463
+ }
464
+ ]
465
+ },
466
+ {
467
+ "name": "width",
468
+ "optional": false,
469
+ "type": "number"
470
+ }
471
+ ],
472
+ "type": "FormFactor"
473
+ },
474
+ "sites": [
475
+ "src/formFactor.ts"
476
+ ]
477
+ },
478
+ "fs-change": {
479
+ "kind": "push",
480
+ "direction": "host->app",
481
+ "payload": {
482
+ "reads": [
483
+ "epoch",
484
+ "paths"
485
+ ]
486
+ },
487
+ "value": {
488
+ "fields": [
489
+ {
490
+ "name": "epoch",
491
+ "optional": false,
492
+ "type": "number"
493
+ },
494
+ {
495
+ "name": "paths",
496
+ "optional": false,
497
+ "array": {
498
+ "type": "string"
499
+ }
500
+ }
501
+ ],
502
+ "type": "FsChange"
503
+ },
504
+ "sites": [
505
+ "src/onFsChange.ts"
506
+ ],
507
+ "divergent": true,
508
+ "divergentNote": "subset-reads with no declared owner on either side — the host sends {paths, epoch}; this side reads only `paths`, the SDK reads both. Nothing forces the two to agree, which is the divergence PLATFORM_LAYERING_SPEC §2 names as the exemplar. The `kind` also differs (message here, push channel in the SDK). R3-274e decides: keep `epoch` or drop it."
509
+ },
510
+ "invitations": {
511
+ "kind": "push",
512
+ "direction": "host->app",
513
+ "poll": "request-invitations",
514
+ "payload": {
515
+ "reads": [
516
+ "invites"
517
+ ]
518
+ },
519
+ "value": {
520
+ "array": {
521
+ "fields": [
522
+ {
523
+ "name": "avatarUrl",
524
+ "optional": true,
525
+ "type": "string | undefined"
526
+ },
527
+ {
528
+ "name": "invitedAt",
529
+ "optional": true,
530
+ "type": "number | undefined"
531
+ },
532
+ {
533
+ "name": "invitedBy",
534
+ "optional": false,
535
+ "type": "string"
536
+ },
537
+ {
538
+ "name": "login",
539
+ "optional": true,
540
+ "type": "string | undefined"
541
+ },
542
+ {
543
+ "name": "name",
544
+ "optional": true,
545
+ "type": "string | undefined"
546
+ },
547
+ {
548
+ "name": "owner",
549
+ "optional": false,
550
+ "type": "string"
551
+ },
552
+ {
553
+ "name": "role",
554
+ "optional": false,
555
+ "type": "Role"
556
+ },
557
+ {
558
+ "name": "spaceId",
559
+ "optional": false,
560
+ "type": "string"
561
+ },
562
+ {
563
+ "name": "uid",
564
+ "optional": false,
565
+ "type": "string"
566
+ }
567
+ ]
568
+ },
569
+ "type": "Invite[]"
570
+ },
571
+ "sites": [
572
+ "src/mounts.ts"
573
+ ]
574
+ },
575
+ "launch-dismiss": {
576
+ "kind": "message",
577
+ "direction": "app->host",
578
+ "payload": {
579
+ "fields": [
580
+ {
581
+ "name": "launchId",
582
+ "optional": false,
583
+ "type": "string"
584
+ }
585
+ ]
586
+ },
587
+ "sites": [
588
+ "src/launch.ts"
589
+ ]
590
+ },
591
+ "launch-ended": {
592
+ "kind": "message",
593
+ "direction": "host->app",
594
+ "payload": {
595
+ "fields": [
596
+ {
597
+ "name": "launchId",
598
+ "optional": false,
599
+ "type": "string"
600
+ },
601
+ {
602
+ "name": "status",
603
+ "optional": false,
604
+ "union": [
605
+ {
606
+ "type": "\"dismissed\""
607
+ },
608
+ {
609
+ "type": "\"failed\""
610
+ },
611
+ {
612
+ "type": "\"revoked\""
613
+ }
614
+ ]
615
+ }
616
+ ],
617
+ "reads": [
618
+ "launchId",
619
+ "status"
620
+ ]
621
+ },
622
+ "sites": [
623
+ "src/launch.ts"
624
+ ]
625
+ },
626
+ "llm-provider": {
627
+ "kind": "push",
628
+ "direction": "host->app",
629
+ "poll": "request-llm-provider",
630
+ "payload": {
631
+ "reads": [
632
+ "provider"
633
+ ]
634
+ },
635
+ "value": {
636
+ "union": [
637
+ {
638
+ "fields": [
639
+ {
640
+ "name": "features",
641
+ "optional": false,
642
+ "type": "ChatFeatures"
643
+ },
644
+ {
645
+ "name": "hostVouched",
646
+ "optional": false,
647
+ "type": "boolean"
648
+ },
649
+ {
650
+ "name": "providerId",
651
+ "optional": false,
652
+ "type": "string"
653
+ }
654
+ ]
655
+ },
656
+ {
657
+ "type": "null"
658
+ }
659
+ ],
660
+ "type": "ChatProviderInfo | null"
661
+ },
662
+ "sites": [
663
+ "src/llm.ts"
664
+ ]
665
+ },
666
+ "metadata-update": {
667
+ "kind": "message",
668
+ "direction": "host->app",
669
+ "payload": {
670
+ "type": "Record<string, any>"
671
+ },
672
+ "sites": [
673
+ "src/boot.tsx"
674
+ ]
675
+ },
676
+ "mount-add": {
677
+ "kind": "message",
678
+ "direction": "host->app",
679
+ "payload": {
680
+ "type": "Record<string, any>",
681
+ "reads": [
682
+ "mount"
683
+ ]
684
+ },
685
+ "sites": [
686
+ "src/mounts.ts"
687
+ ]
688
+ },
689
+ "mount-remove": {
690
+ "kind": "message",
691
+ "direction": "host->app",
692
+ "payload": {
693
+ "type": "Record<string, any>",
694
+ "reads": [
695
+ "id",
696
+ "path",
697
+ "reason"
698
+ ]
699
+ },
700
+ "sites": [
701
+ "src/mounts.ts"
702
+ ]
703
+ },
704
+ "protocol-contribute": {
705
+ "kind": "stream",
706
+ "direction": "app->host",
707
+ "methods": {
708
+ "run": {
709
+ "payload": {
710
+ "fields": [
711
+ {
712
+ "name": "branchName",
713
+ "optional": true,
714
+ "union": [
715
+ {
716
+ "type": "string"
717
+ },
718
+ {
719
+ "type": "undefined"
720
+ }
721
+ ]
722
+ },
723
+ {
724
+ "name": "commitMessage",
725
+ "optional": false,
726
+ "type": "string"
727
+ },
728
+ {
729
+ "name": "mode",
730
+ "optional": true,
731
+ "union": [
732
+ {
733
+ "type": "\"direct\""
734
+ },
735
+ {
736
+ "type": "\"pr\""
737
+ },
738
+ {
739
+ "type": "undefined"
740
+ }
741
+ ]
742
+ }
743
+ ]
744
+ }
745
+ }
746
+ },
747
+ "sites": [
748
+ "src/contribute.ts"
749
+ ]
750
+ },
751
+ "protocol-dnd": {
752
+ "kind": "request",
753
+ "direction": "app->host",
754
+ "methods": {
755
+ "startDrag": {
756
+ "payload": {
757
+ "fields": [
758
+ {
759
+ "name": "bytes",
760
+ "optional": true,
761
+ "union": [
762
+ {
763
+ "fields": [
764
+ {
765
+ "name": "buffer",
766
+ "optional": false,
767
+ "type": "ArrayBufferLike"
768
+ },
769
+ {
770
+ "name": "byteLength",
771
+ "optional": false,
772
+ "type": "number"
773
+ },
774
+ {
775
+ "name": "byteOffset",
776
+ "optional": false,
777
+ "type": "number"
778
+ },
779
+ {
780
+ "name": "BYTES_PER_ELEMENT",
781
+ "optional": false,
782
+ "type": "number"
783
+ },
784
+ {
785
+ "name": "copyWithin",
786
+ "optional": false,
787
+ "type": "(target: number, start: number, end?: number | undefined) => Uint8Array<ArrayBufferLike>"
788
+ },
789
+ {
790
+ "name": "entries",
791
+ "optional": false,
792
+ "type": "() => ArrayIterator<[number, number]>"
793
+ },
794
+ {
795
+ "name": "every",
796
+ "optional": false,
797
+ "type": "(predicate: (value: number, index: number, array: Uint8Array<ArrayBufferLike>) => unknown, thisArg?: any) => boolean"
798
+ },
799
+ {
800
+ "name": "fill",
801
+ "optional": false,
802
+ "type": "(value: number, start?: number | undefined, end?: number | undefined) => Uint8Array<ArrayBufferLike>"
803
+ },
804
+ {
805
+ "name": "filter",
806
+ "optional": false,
807
+ "type": "(predicate: (value: number, index: number, array: Uint8Array<ArrayBufferLike>) => any, thisArg?: any) => Uint8Array<ArrayBuffer>"
808
+ },
809
+ {
810
+ "name": "find",
811
+ "optional": false,
812
+ "type": "(predicate: (value: number, index: number, obj: Uint8Array<ArrayBufferLike>) => boolean, thisArg?: any) => number | undefined"
813
+ },
814
+ {
815
+ "name": "findIndex",
816
+ "optional": false,
817
+ "type": "(predicate: (value: number, index: number, obj: Uint8Array<ArrayBufferLike>) => boolean, thisArg?: any) => number"
818
+ },
819
+ {
820
+ "name": "forEach",
821
+ "optional": false,
822
+ "type": "(callbackfn: (value: number, index: number, array: Uint8Array<ArrayBufferLike>) => void, thisArg?: any) => void"
823
+ },
824
+ {
825
+ "name": "includes",
826
+ "optional": false,
827
+ "type": "(searchElement: number, fromIndex?: number | undefined) => boolean"
828
+ },
829
+ {
830
+ "name": "indexOf",
831
+ "optional": false,
832
+ "type": "(searchElement: number, fromIndex?: number | undefined) => number"
833
+ },
834
+ {
835
+ "name": "join",
836
+ "optional": false,
837
+ "type": "(separator?: string | undefined) => string"
838
+ },
839
+ {
840
+ "name": "keys",
841
+ "optional": false,
842
+ "type": "() => ArrayIterator<number>"
843
+ },
844
+ {
845
+ "name": "lastIndexOf",
846
+ "optional": false,
847
+ "type": "(searchElement: number, fromIndex?: number | undefined) => number"
848
+ },
849
+ {
850
+ "name": "length",
851
+ "optional": false,
852
+ "type": "number"
853
+ },
854
+ {
855
+ "name": "map",
856
+ "optional": false,
857
+ "type": "(callbackfn: (value: number, index: number, array: Uint8Array<ArrayBufferLike>) => number, thisArg?: any) => Uint8Array<ArrayBuffer>"
858
+ },
859
+ {
860
+ "name": "reduce",
861
+ "optional": false,
862
+ "type": "{ (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array<ArrayBufferLike>) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array<ArrayBufferLike>) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array<ArrayBufferLike>) => U, initialValue: U): U; }"
863
+ },
864
+ {
865
+ "name": "reduceRight",
866
+ "optional": false,
867
+ "type": "{ (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array<ArrayBufferLike>) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array<ArrayBufferLike>) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array<ArrayBufferLike>) => U, initialValue: U): U; }"
868
+ },
869
+ {
870
+ "name": "reverse",
871
+ "optional": false,
872
+ "type": "() => Uint8Array<ArrayBufferLike>"
873
+ },
874
+ {
875
+ "name": "set",
876
+ "optional": false,
877
+ "type": "(array: ArrayLike<number>, offset?: number | undefined) => void"
878
+ },
879
+ {
880
+ "name": "slice",
881
+ "optional": false,
882
+ "type": "(start?: number | undefined, end?: number | undefined) => Uint8Array<ArrayBuffer>"
883
+ },
884
+ {
885
+ "name": "some",
886
+ "optional": false,
887
+ "type": "(predicate: (value: number, index: number, array: Uint8Array<ArrayBufferLike>) => unknown, thisArg?: any) => boolean"
888
+ },
889
+ {
890
+ "name": "sort",
891
+ "optional": false,
892
+ "type": "(compareFn?: ((a: number, b: number) => number) | undefined) => Uint8Array<ArrayBufferLike>"
893
+ },
894
+ {
895
+ "name": "subarray",
896
+ "optional": false,
897
+ "type": "(begin?: number | undefined, end?: number | undefined) => Uint8Array<ArrayBufferLike>"
898
+ },
899
+ {
900
+ "name": "toLocaleString",
901
+ "optional": false,
902
+ "type": "{ (): string; (locales: string | string[], options?: NumberFormatOptions | undefined): string; }"
903
+ },
904
+ {
905
+ "name": "toString",
906
+ "optional": false,
907
+ "type": "() => string"
908
+ },
909
+ {
910
+ "name": "valueOf",
911
+ "optional": false,
912
+ "type": "() => Uint8Array<ArrayBufferLike>"
913
+ },
914
+ {
915
+ "name": "values",
916
+ "optional": false,
917
+ "type": "() => ArrayIterator<number>"
918
+ }
919
+ ]
920
+ },
921
+ {
922
+ "type": "undefined"
923
+ }
924
+ ]
925
+ },
926
+ {
927
+ "name": "kind",
928
+ "optional": false,
929
+ "union": [
930
+ {
931
+ "type": "\"dir\""
932
+ },
933
+ {
934
+ "type": "\"file\""
935
+ }
936
+ ]
937
+ },
938
+ {
939
+ "name": "mountId",
940
+ "optional": false,
941
+ "type": "string"
942
+ },
943
+ {
944
+ "name": "name",
945
+ "optional": false,
946
+ "type": "string"
947
+ },
948
+ {
949
+ "name": "relPath",
950
+ "optional": false,
951
+ "type": "string"
952
+ }
953
+ ]
954
+ }
955
+ }
956
+ },
957
+ "sites": [
958
+ "src/dnd.ts"
959
+ ]
960
+ },
961
+ "protocol-editor": {
962
+ "kind": "request",
963
+ "direction": "app->host",
964
+ "methods": {
965
+ "<dynamic>": {
966
+ "payload": {
967
+ "type": "Record<string, unknown>"
968
+ }
969
+ }
970
+ },
971
+ "sites": [
972
+ "src/editor.ts"
973
+ ]
974
+ },
975
+ "protocol-fetch": {
976
+ "kind": "request+stream",
977
+ "direction": "app->host",
978
+ "methods": {
979
+ "fetch": {
980
+ "payload": {
981
+ "fields": [
982
+ {
983
+ "name": "body",
984
+ "optional": false,
985
+ "union": [
986
+ {
987
+ "type": "string"
988
+ },
989
+ {
990
+ "type": "undefined"
991
+ }
992
+ ]
993
+ },
994
+ {
995
+ "name": "headers",
996
+ "optional": false,
997
+ "union": [
998
+ {
999
+ "type": "Record<string, string>"
1000
+ },
1001
+ {
1002
+ "type": "undefined"
1003
+ }
1004
+ ]
1005
+ },
1006
+ {
1007
+ "name": "method",
1008
+ "optional": false,
1009
+ "union": [
1010
+ {
1011
+ "type": "string"
1012
+ },
1013
+ {
1014
+ "type": "undefined"
1015
+ }
1016
+ ]
1017
+ },
1018
+ {
1019
+ "name": "url",
1020
+ "optional": false,
1021
+ "type": "string"
1022
+ }
1023
+ ]
1024
+ }
1025
+ },
1026
+ "fetchStream": {
1027
+ "payload": {
1028
+ "fields": [
1029
+ {
1030
+ "name": "body",
1031
+ "optional": false,
1032
+ "union": [
1033
+ {
1034
+ "type": "string"
1035
+ },
1036
+ {
1037
+ "type": "undefined"
1038
+ }
1039
+ ]
1040
+ },
1041
+ {
1042
+ "name": "headers",
1043
+ "optional": false,
1044
+ "union": [
1045
+ {
1046
+ "type": "Record<string, string>"
1047
+ },
1048
+ {
1049
+ "type": "undefined"
1050
+ }
1051
+ ]
1052
+ },
1053
+ {
1054
+ "name": "method",
1055
+ "optional": false,
1056
+ "union": [
1057
+ {
1058
+ "type": "string"
1059
+ },
1060
+ {
1061
+ "type": "undefined"
1062
+ }
1063
+ ]
1064
+ },
1065
+ {
1066
+ "name": "url",
1067
+ "optional": false,
1068
+ "type": "string"
1069
+ }
1070
+ ]
1071
+ }
1072
+ }
1073
+ },
1074
+ "sites": [
1075
+ "src/netFetch.ts"
1076
+ ]
1077
+ },
1078
+ "protocol-ipc": {
1079
+ "kind": "request",
1080
+ "direction": "app->host",
1081
+ "methods": {
1082
+ "post": {
1083
+ "payload": {
1084
+ "fields": [
1085
+ {
1086
+ "name": "msg",
1087
+ "optional": false,
1088
+ "type": "unknown"
1089
+ },
1090
+ {
1091
+ "name": "to",
1092
+ "optional": false,
1093
+ "type": "string"
1094
+ }
1095
+ ]
1096
+ }
1097
+ },
1098
+ "reveal": {
1099
+ "payload": {
1100
+ "fields": [
1101
+ {
1102
+ "name": "to",
1103
+ "optional": false,
1104
+ "type": "string"
1105
+ }
1106
+ ]
1107
+ }
1108
+ }
1109
+ },
1110
+ "sites": [
1111
+ "src/ipc.ts"
1112
+ ]
1113
+ },
1114
+ "protocol-launch": {
1115
+ "kind": "request",
1116
+ "direction": "app->host",
1117
+ "methods": {
1118
+ "create": {
1119
+ "payload": {
1120
+ "fields": [
1121
+ {
1122
+ "name": "opts",
1123
+ "optional": false,
1124
+ "fields": [
1125
+ {
1126
+ "name": "input",
1127
+ "optional": true,
1128
+ "union": [
1129
+ {
1130
+ "type": "Record<string, unknown>"
1131
+ },
1132
+ {
1133
+ "type": "undefined"
1134
+ }
1135
+ ]
1136
+ },
1137
+ {
1138
+ "name": "region",
1139
+ "optional": false,
1140
+ "union": [
1141
+ {
1142
+ "type": "\"overlay\""
1143
+ },
1144
+ {
1145
+ "type": "\"stage\""
1146
+ }
1147
+ ]
1148
+ }
1149
+ ]
1150
+ },
1151
+ {
1152
+ "name": "target",
1153
+ "optional": false,
1154
+ "fields": [
1155
+ {
1156
+ "name": "entryPoint",
1157
+ "optional": true,
1158
+ "union": [
1159
+ {
1160
+ "type": "string"
1161
+ },
1162
+ {
1163
+ "type": "undefined"
1164
+ }
1165
+ ]
1166
+ },
1167
+ {
1168
+ "name": "task",
1169
+ "optional": true,
1170
+ "union": [
1171
+ {
1172
+ "type": "string"
1173
+ },
1174
+ {
1175
+ "type": "undefined"
1176
+ }
1177
+ ]
1178
+ },
1179
+ {
1180
+ "name": "version",
1181
+ "optional": true,
1182
+ "union": [
1183
+ {
1184
+ "type": "string"
1185
+ },
1186
+ {
1187
+ "type": "undefined"
1188
+ }
1189
+ ]
1190
+ }
1191
+ ]
1192
+ }
1193
+ ]
1194
+ }
1195
+ }
1196
+ },
1197
+ "sites": [
1198
+ "src/launch.ts"
1199
+ ]
1200
+ },
1201
+ "protocol-llm": {
1202
+ "kind": "stream",
1203
+ "direction": "app->host",
1204
+ "methods": {
1205
+ "chat": {
1206
+ "payload": {
1207
+ "fields": [
1208
+ {
1209
+ "name": "maxTokens",
1210
+ "optional": true,
1211
+ "union": [
1212
+ {
1213
+ "type": "number"
1214
+ },
1215
+ {
1216
+ "type": "undefined"
1217
+ }
1218
+ ]
1219
+ },
1220
+ {
1221
+ "name": "messages",
1222
+ "optional": false,
1223
+ "array": {
1224
+ "fields": [
1225
+ {
1226
+ "name": "content",
1227
+ "optional": false,
1228
+ "type": "ContentPart[]"
1229
+ },
1230
+ {
1231
+ "name": "role",
1232
+ "optional": false,
1233
+ "type": "ChatRole"
1234
+ }
1235
+ ]
1236
+ }
1237
+ },
1238
+ {
1239
+ "name": "modelHint",
1240
+ "optional": true,
1241
+ "union": [
1242
+ {
1243
+ "type": "\"fast\""
1244
+ },
1245
+ {
1246
+ "type": "\"smart\""
1247
+ },
1248
+ {
1249
+ "type": "undefined"
1250
+ }
1251
+ ]
1252
+ },
1253
+ {
1254
+ "name": "responseFormat",
1255
+ "optional": true,
1256
+ "union": [
1257
+ {
1258
+ "type": "\"json\""
1259
+ },
1260
+ {
1261
+ "type": "\"text\""
1262
+ },
1263
+ {
1264
+ "type": "undefined"
1265
+ }
1266
+ ]
1267
+ },
1268
+ {
1269
+ "name": "tools",
1270
+ "optional": true,
1271
+ "union": [
1272
+ {
1273
+ "array": {
1274
+ "type": "ToolDef"
1275
+ }
1276
+ },
1277
+ {
1278
+ "type": "undefined"
1279
+ }
1280
+ ]
1281
+ }
1282
+ ]
1283
+ }
1284
+ }
1285
+ },
1286
+ "sites": [
1287
+ "src/llm.ts"
1288
+ ]
1289
+ },
1290
+ "protocol-secrets": {
1291
+ "kind": "request",
1292
+ "direction": "app->host",
1293
+ "methods": {
1294
+ "<dynamic>": {
1295
+ "payload": {
1296
+ "type": "object"
1297
+ }
1298
+ }
1299
+ },
1300
+ "sites": [
1301
+ "src/secrets.ts"
1302
+ ]
1303
+ },
1304
+ "protocol-settings": {
1305
+ "kind": "request",
1306
+ "direction": "app->host",
1307
+ "methods": {
1308
+ "<dynamic>": {
1309
+ "payload": {
1310
+ "type": "Record<string, unknown>"
1311
+ }
1312
+ }
1313
+ },
1314
+ "sites": [
1315
+ "src/mounts.ts"
1316
+ ]
1317
+ },
1318
+ "protocol-spaces": {
1319
+ "kind": "request",
1320
+ "direction": "app->host",
1321
+ "methods": {
1322
+ "<dynamic>": {
1323
+ "payload": {
1324
+ "type": "Record<string, unknown>"
1325
+ }
1326
+ },
1327
+ "grants": {
1328
+ "payload": {
1329
+ "type": "{}"
1330
+ }
1331
+ },
1332
+ "invite": {
1333
+ "payload": {
1334
+ "fields": [
1335
+ {
1336
+ "name": "login",
1337
+ "optional": false,
1338
+ "type": "string"
1339
+ },
1340
+ {
1341
+ "name": "role",
1342
+ "optional": false,
1343
+ "union": [
1344
+ {
1345
+ "type": "\"owner\""
1346
+ },
1347
+ {
1348
+ "type": "\"reader\""
1349
+ },
1350
+ {
1351
+ "type": "\"writer\""
1352
+ }
1353
+ ]
1354
+ },
1355
+ {
1356
+ "name": "spaceId",
1357
+ "optional": false,
1358
+ "type": "string"
1359
+ }
1360
+ ]
1361
+ }
1362
+ },
1363
+ "list": {
1364
+ "payload": {
1365
+ "fields": [
1366
+ {
1367
+ "name": "app",
1368
+ "optional": true,
1369
+ "union": [
1370
+ {
1371
+ "type": "false"
1372
+ },
1373
+ {
1374
+ "type": "true"
1375
+ },
1376
+ {
1377
+ "type": "undefined"
1378
+ }
1379
+ ]
1380
+ }
1381
+ ]
1382
+ }
1383
+ },
1384
+ "listAll": {
1385
+ "payload": {
1386
+ "type": "{}"
1387
+ }
1388
+ },
1389
+ "lookupUser": {
1390
+ "payload": {
1391
+ "fields": [
1392
+ {
1393
+ "name": "login",
1394
+ "optional": false,
1395
+ "type": "string"
1396
+ }
1397
+ ]
1398
+ }
1399
+ },
1400
+ "members": {
1401
+ "payload": {
1402
+ "fields": [
1403
+ {
1404
+ "name": "spaceId",
1405
+ "optional": false,
1406
+ "type": "string"
1407
+ }
1408
+ ]
1409
+ }
1410
+ },
1411
+ "revokeGrant": {
1412
+ "payload": {
1413
+ "fields": [
1414
+ {
1415
+ "name": "appKey",
1416
+ "optional": false,
1417
+ "type": "string"
1418
+ },
1419
+ {
1420
+ "name": "spaceId",
1421
+ "optional": false,
1422
+ "type": "string"
1423
+ }
1424
+ ]
1425
+ }
1426
+ },
1427
+ "setRole": {
1428
+ "payload": {
1429
+ "fields": [
1430
+ {
1431
+ "name": "role",
1432
+ "optional": false,
1433
+ "union": [
1434
+ {
1435
+ "type": "\"owner\""
1436
+ },
1437
+ {
1438
+ "type": "\"reader\""
1439
+ },
1440
+ {
1441
+ "type": "\"writer\""
1442
+ }
1443
+ ]
1444
+ },
1445
+ {
1446
+ "name": "spaceId",
1447
+ "optional": false,
1448
+ "type": "string"
1449
+ },
1450
+ {
1451
+ "name": "uid",
1452
+ "optional": false,
1453
+ "type": "string"
1454
+ }
1455
+ ]
1456
+ }
1457
+ },
1458
+ "unshare": {
1459
+ "payload": {
1460
+ "fields": [
1461
+ {
1462
+ "name": "spaceId",
1463
+ "optional": false,
1464
+ "type": "string"
1465
+ },
1466
+ {
1467
+ "name": "uid",
1468
+ "optional": false,
1469
+ "type": "string"
1470
+ }
1471
+ ]
1472
+ }
1473
+ }
1474
+ },
1475
+ "sites": [
1476
+ "src/generated/spaces.ts",
1477
+ "src/mounts.ts"
1478
+ ]
1479
+ },
1480
+ "protocol-task": {
1481
+ "kind": "request",
1482
+ "direction": "app->host",
1483
+ "methods": {
1484
+ "invoke": {
1485
+ "payload": {
1486
+ "fields": [
1487
+ {
1488
+ "name": "params",
1489
+ "optional": false,
1490
+ "type": "Record<string, unknown>"
1491
+ },
1492
+ {
1493
+ "name": "task",
1494
+ "optional": false,
1495
+ "type": "string"
1496
+ }
1497
+ ]
1498
+ }
1499
+ }
1500
+ },
1501
+ "sites": [
1502
+ "src/tasks.ts"
1503
+ ]
1504
+ },
1505
+ "protocol-theme": {
1506
+ "kind": "request",
1507
+ "direction": "app->host",
1508
+ "methods": {
1509
+ "set": {
1510
+ "payload": {
1511
+ "fields": [
1512
+ {
1513
+ "name": "theme",
1514
+ "optional": false,
1515
+ "union": [
1516
+ {
1517
+ "type": "\"dark\""
1518
+ },
1519
+ {
1520
+ "type": "\"light\""
1521
+ }
1522
+ ]
1523
+ }
1524
+ ]
1525
+ }
1526
+ }
1527
+ },
1528
+ "sites": [
1529
+ "src/theme.ts"
1530
+ ]
1531
+ },
1532
+ "protocol-vcs": {
1533
+ "kind": "request",
1534
+ "direction": "app->host",
1535
+ "methods": {
1536
+ "<dynamic>": {
1537
+ "payload": {
1538
+ "type": "Record<string, unknown>"
1539
+ }
1540
+ }
1541
+ },
1542
+ "sites": [
1543
+ "src/vcs.ts"
1544
+ ]
1545
+ },
1546
+ "region-message": {
1547
+ "kind": "message",
1548
+ "direction": "host->app",
1549
+ "payload": {
1550
+ "fields": [
1551
+ {
1552
+ "name": "data",
1553
+ "optional": false,
1554
+ "type": "unknown"
1555
+ },
1556
+ {
1557
+ "name": "from",
1558
+ "optional": false,
1559
+ "type": "string"
1560
+ }
1561
+ ],
1562
+ "reads": [
1563
+ "data",
1564
+ "from"
1565
+ ]
1566
+ },
1567
+ "sites": [
1568
+ "src/ipc.ts"
1569
+ ]
1570
+ },
1571
+ "request-api-catalog": {
1572
+ "kind": "poll",
1573
+ "direction": "app->host",
1574
+ "payload": {
1575
+ "fields": []
1576
+ },
1577
+ "sites": [
1578
+ "src/catalog.ts"
1579
+ ]
1580
+ },
1581
+ "request-auth-state": {
1582
+ "kind": "poll",
1583
+ "direction": "app->host",
1584
+ "payload": {
1585
+ "fields": []
1586
+ },
1587
+ "sites": [
1588
+ "src/auth.ts"
1589
+ ]
1590
+ },
1591
+ "request-debug-enabled": {
1592
+ "kind": "poll",
1593
+ "direction": "app->host",
1594
+ "payload": {
1595
+ "fields": []
1596
+ },
1597
+ "sites": [
1598
+ "src/debug.ts"
1599
+ ]
1600
+ },
1601
+ "request-diagnostics": {
1602
+ "kind": "poll",
1603
+ "direction": "app->host",
1604
+ "payload": {
1605
+ "fields": []
1606
+ },
1607
+ "sites": [
1608
+ "src/diagnostics.ts"
1609
+ ]
1610
+ },
1611
+ "request-editor-context": {
1612
+ "kind": "poll",
1613
+ "direction": "app->host",
1614
+ "payload": {
1615
+ "fields": []
1616
+ },
1617
+ "sites": [
1618
+ "src/editorContext.ts"
1619
+ ]
1620
+ },
1621
+ "request-form-factor": {
1622
+ "kind": "poll",
1623
+ "direction": "app->host",
1624
+ "payload": {
1625
+ "fields": []
1626
+ },
1627
+ "sites": [
1628
+ "src/formFactor.ts"
1629
+ ]
1630
+ },
1631
+ "request-handshake": {
1632
+ "kind": "message",
1633
+ "direction": "host->app",
1634
+ "payload": {
1635
+ "type": "unknown"
1636
+ },
1637
+ "sites": [
1638
+ "src/runtime.ts"
1639
+ ]
1640
+ },
1641
+ "request-invitations": {
1642
+ "kind": "poll",
1643
+ "direction": "app->host",
1644
+ "payload": {
1645
+ "fields": []
1646
+ },
1647
+ "sites": [
1648
+ "src/mounts.ts"
1649
+ ]
1650
+ },
1651
+ "request-llm-provider": {
1652
+ "kind": "poll",
1653
+ "direction": "app->host",
1654
+ "payload": {
1655
+ "fields": []
1656
+ },
1657
+ "sites": [
1658
+ "src/llm.ts"
1659
+ ]
1660
+ },
1661
+ "request-mounts": {
1662
+ "kind": "message",
1663
+ "direction": "app->host",
1664
+ "payload": {
1665
+ "fields": []
1666
+ },
1667
+ "sites": [
1668
+ "src/mounts.ts"
1669
+ ]
1670
+ },
1671
+ "request-secrets-metadata": {
1672
+ "kind": "poll",
1673
+ "direction": "app->host",
1674
+ "payload": {
1675
+ "fields": []
1676
+ },
1677
+ "sites": [
1678
+ "src/secrets.ts"
1679
+ ]
1680
+ },
1681
+ "request-session-mounts": {
1682
+ "kind": "poll",
1683
+ "direction": "app->host",
1684
+ "payload": {
1685
+ "fields": []
1686
+ },
1687
+ "sites": [
1688
+ "src/mounts.ts"
1689
+ ]
1690
+ },
1691
+ "request-theme": {
1692
+ "kind": "poll",
1693
+ "direction": "app->host",
1694
+ "payload": {
1695
+ "fields": []
1696
+ },
1697
+ "sites": [
1698
+ "src/theme.ts"
1699
+ ]
1700
+ },
1701
+ "request-vcs-state": {
1702
+ "kind": "poll",
1703
+ "direction": "app->host",
1704
+ "payload": {
1705
+ "fields": []
1706
+ },
1707
+ "sites": [
1708
+ "src/vcs.ts"
1709
+ ]
1710
+ },
1711
+ "sdk-handshake": {
1712
+ "kind": "message",
1713
+ "direction": "app->host",
1714
+ "payload": {
1715
+ "fields": [
1716
+ {
1717
+ "name": "protocolVersion",
1718
+ "optional": false,
1719
+ "type": "string"
1720
+ },
1721
+ {
1722
+ "name": "sdkVersion",
1723
+ "optional": false,
1724
+ "type": "string"
1725
+ }
1726
+ ]
1727
+ },
1728
+ "sites": [
1729
+ "src/runtime.ts"
1730
+ ],
1731
+ "divergent": true,
1732
+ "divergentNote": "divergent-declared — TWO producers of one name with different payloads: this frame announces {protocolVersion, sandboxProtocolVersion}, the SDK announces {protocolVersion, sdkVersion}. R3-274d gave the frame its own SANDBOX_PROTOCOL_VERSION (announced additively; the host logs it, fail-open) and retired the sibling-checkout read that used to source `protocolVersion`. R3-274e picks one shape."
1733
+ },
1734
+ "secrets-metadata": {
1735
+ "kind": "push",
1736
+ "direction": "host->app",
1737
+ "poll": "request-secrets-metadata",
1738
+ "payload": {
1739
+ "reads": [
1740
+ "secrets"
1741
+ ]
1742
+ },
1743
+ "value": {
1744
+ "array": {
1745
+ "fields": [
1746
+ {
1747
+ "name": "boundOrigin",
1748
+ "optional": true,
1749
+ "type": "string | undefined"
1750
+ },
1751
+ {
1752
+ "name": "description",
1753
+ "optional": false,
1754
+ "type": "string"
1755
+ },
1756
+ {
1757
+ "name": "family",
1758
+ "optional": true,
1759
+ "type": "string | undefined"
1760
+ },
1761
+ {
1762
+ "name": "id",
1763
+ "optional": false,
1764
+ "type": "string"
1765
+ },
1766
+ {
1767
+ "name": "lastUsedAt",
1768
+ "optional": false,
1769
+ "type": "string | null"
1770
+ },
1771
+ {
1772
+ "name": "type",
1773
+ "optional": false,
1774
+ "type": "SecretType"
1775
+ }
1776
+ ]
1777
+ },
1778
+ "type": "SecretView[]"
1779
+ },
1780
+ "sites": [
1781
+ "src/secrets.ts"
1782
+ ]
1783
+ },
1784
+ "session-mounts": {
1785
+ "kind": "push",
1786
+ "direction": "host->app",
1787
+ "poll": "request-session-mounts",
1788
+ "payload": {
1789
+ "reads": [
1790
+ "mounts"
1791
+ ]
1792
+ },
1793
+ "value": {
1794
+ "array": {
1795
+ "fields": [
1796
+ {
1797
+ "name": "forwardedToApp",
1798
+ "optional": false,
1799
+ "type": "boolean"
1800
+ },
1801
+ {
1802
+ "name": "id",
1803
+ "optional": true,
1804
+ "type": "string | undefined"
1805
+ },
1806
+ {
1807
+ "name": "mode",
1808
+ "optional": true,
1809
+ "type": "\"ro\" | \"rw\" | undefined"
1810
+ },
1811
+ {
1812
+ "name": "name",
1813
+ "optional": true,
1814
+ "type": "string | undefined"
1815
+ },
1816
+ {
1817
+ "name": "path",
1818
+ "optional": false,
1819
+ "type": "string"
1820
+ },
1821
+ {
1822
+ "name": "rules",
1823
+ "optional": true,
1824
+ "type": "MountRule[] | undefined"
1825
+ },
1826
+ {
1827
+ "name": "type",
1828
+ "optional": false,
1829
+ "type": "string"
1830
+ }
1831
+ ]
1832
+ },
1833
+ "type": "SessionMount[]"
1834
+ },
1835
+ "sites": [
1836
+ "src/mounts.ts"
1837
+ ]
1838
+ },
1839
+ "task-cancel": {
1840
+ "kind": "message",
1841
+ "direction": "app->host",
1842
+ "payload": {
1843
+ "type": "{}"
1844
+ },
1845
+ "sites": [
1846
+ "src/tasks.ts"
1847
+ ]
1848
+ },
1849
+ "task-complete": {
1850
+ "kind": "message",
1851
+ "direction": "app->host",
1852
+ "payload": {
1853
+ "fields": [
1854
+ {
1855
+ "name": "result",
1856
+ "optional": false,
1857
+ "type": "unknown"
1858
+ }
1859
+ ]
1860
+ },
1861
+ "sites": [
1862
+ "src/tasks.ts"
1863
+ ]
1864
+ },
1865
+ "task-input": {
1866
+ "kind": "message",
1867
+ "direction": "host->app",
1868
+ "payload": {
1869
+ "fields": [
1870
+ {
1871
+ "name": "params",
1872
+ "optional": true,
1873
+ "union": [
1874
+ {
1875
+ "type": "Record<string, unknown>"
1876
+ },
1877
+ {
1878
+ "type": "undefined"
1879
+ }
1880
+ ]
1881
+ },
1882
+ {
1883
+ "name": "task",
1884
+ "optional": false,
1885
+ "type": "string"
1886
+ }
1887
+ ],
1888
+ "reads": [
1889
+ "params",
1890
+ "task"
1891
+ ]
1892
+ },
1893
+ "sites": [
1894
+ "src/tasks.ts"
1895
+ ]
1896
+ },
1897
+ "theme": {
1898
+ "kind": "push",
1899
+ "direction": "host->app",
1900
+ "poll": "request-theme",
1901
+ "payload": {
1902
+ "reads": [
1903
+ "theme"
1904
+ ]
1905
+ },
1906
+ "value": {
1907
+ "union": [
1908
+ {
1909
+ "type": "\"dark\""
1910
+ },
1911
+ {
1912
+ "type": "\"light\""
1913
+ }
1914
+ ],
1915
+ "type": "HostTheme"
1916
+ },
1917
+ "sites": [
1918
+ "src/theme.ts"
1919
+ ]
1920
+ },
1921
+ "urlchange": {
1922
+ "kind": "message",
1923
+ "direction": "both",
1924
+ "payload": {
1925
+ "type": "any"
1926
+ },
1927
+ "sites": [
1928
+ "src/boot.tsx",
1929
+ "src/routing.tsx"
1930
+ ]
1931
+ },
1932
+ "vcs-state": {
1933
+ "kind": "push",
1934
+ "direction": "host->app",
1935
+ "poll": "request-vcs-state",
1936
+ "payload": {
1937
+ "reads": [
1938
+ "branch",
1939
+ "changes",
1940
+ "diffLoading",
1941
+ "prs"
1942
+ ]
1943
+ },
1944
+ "value": {
1945
+ "fields": [
1946
+ {
1947
+ "name": "branch",
1948
+ "optional": false,
1949
+ "union": [
1950
+ {
1951
+ "type": "VcsBranch"
1952
+ },
1953
+ {
1954
+ "type": "null"
1955
+ }
1956
+ ]
1957
+ },
1958
+ {
1959
+ "name": "changes",
1960
+ "optional": false,
1961
+ "array": {
1962
+ "type": "VcsChange"
1963
+ }
1964
+ },
1965
+ {
1966
+ "name": "diffLoading",
1967
+ "optional": false,
1968
+ "type": "boolean"
1969
+ },
1970
+ {
1971
+ "name": "prs",
1972
+ "optional": false,
1973
+ "array": {
1974
+ "type": "VcsPR"
1975
+ }
1976
+ }
1977
+ ],
1978
+ "type": "VcsState"
1979
+ },
1980
+ "sites": [
1981
+ "src/vcs.ts"
1982
+ ]
1983
+ }
1984
+ },
1985
+ "dynamicFamilies": {
1986
+ "protocol-<scheme>": {
1987
+ "schemes": [
1988
+ "contribute",
1989
+ "dnd",
1990
+ "editor",
1991
+ "ipc",
1992
+ "launch",
1993
+ "llm",
1994
+ "secrets",
1995
+ "settings",
1996
+ "spaces",
1997
+ "task",
1998
+ "theme",
1999
+ "vcs"
2000
+ ],
2001
+ "sites": [
2002
+ "src/catalog.ts"
2003
+ ]
2004
+ }
2005
+ },
2006
+ "envelopes": {
2007
+ "frame": [
2008
+ {
2009
+ "fields": [
2010
+ {
2011
+ "name": "kind",
2012
+ "optional": false,
2013
+ "type": "\"event\""
2014
+ },
2015
+ {
2016
+ "name": "value",
2017
+ "optional": false,
2018
+ "type": "unknown"
2019
+ }
2020
+ ]
2021
+ },
2022
+ {
2023
+ "fields": [
2024
+ {
2025
+ "name": "kind",
2026
+ "optional": false,
2027
+ "type": "\"done\""
2028
+ },
2029
+ {
2030
+ "name": "value",
2031
+ "optional": false,
2032
+ "type": "unknown"
2033
+ }
2034
+ ]
2035
+ },
2036
+ {
2037
+ "fields": [
2038
+ {
2039
+ "name": "code",
2040
+ "optional": false,
2041
+ "type": "string"
2042
+ },
2043
+ {
2044
+ "name": "kind",
2045
+ "optional": false,
2046
+ "type": "\"error\""
2047
+ },
2048
+ {
2049
+ "name": "message",
2050
+ "optional": false,
2051
+ "type": "string"
2052
+ }
2053
+ ]
2054
+ }
2055
+ ],
2056
+ "send": [
2057
+ {
2058
+ "name": "msg",
2059
+ "fields": [
2060
+ {
2061
+ "name": "method",
2062
+ "optional": false,
2063
+ "type": "string"
2064
+ },
2065
+ {
2066
+ "name": "msgId",
2067
+ "optional": false,
2068
+ "type": "number"
2069
+ },
2070
+ {
2071
+ "name": "params",
2072
+ "optional": false,
2073
+ "array": {
2074
+ "type": "unknown"
2075
+ }
2076
+ },
2077
+ {
2078
+ "name": "stream",
2079
+ "optional": false,
2080
+ "type": "true"
2081
+ },
2082
+ {
2083
+ "name": "type",
2084
+ "optional": false,
2085
+ "type": "string"
2086
+ }
2087
+ ]
2088
+ }
2089
+ ],
2090
+ "subscribe": [
2091
+ {
2092
+ "name": "type",
2093
+ "type": "string"
2094
+ },
2095
+ {
2096
+ "name": "handler",
2097
+ "type": "(msg: { msgId?: number | undefined; stream?: StreamFrame | undefined; }) => void"
2098
+ }
2099
+ ],
2100
+ "cancel": [
2101
+ {
2102
+ "name": "msg",
2103
+ "fields": [
2104
+ {
2105
+ "name": "cancel",
2106
+ "optional": false,
2107
+ "type": "true"
2108
+ },
2109
+ {
2110
+ "name": "msgId",
2111
+ "optional": false,
2112
+ "type": "number"
2113
+ },
2114
+ {
2115
+ "name": "type",
2116
+ "optional": false,
2117
+ "type": "string"
2118
+ }
2119
+ ]
2120
+ }
2121
+ ]
2122
+ }
2123
+ }