@get-bb/plugin-sdk 0.5.30 → 0.6.5

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.
@@ -285,6 +285,11 @@ declare const appKeybindingOverridesSchema: z$1.ZodArray<z$1.ZodObject<{
285
285
  "window.new": "window.new";
286
286
  "workspace.openPreferred": "workspace.openPreferred";
287
287
  }>, z$1.ZodTemplateLiteral<`plugin:${string}/${string}`>]>;
288
+ platform: z$1.ZodOptional<z$1.ZodEnum<{
289
+ linux: "linux";
290
+ mac: "mac";
291
+ windows: "windows";
292
+ }>>;
288
293
  shortcut: z$1.ZodNullable<z$1.ZodObject<{
289
294
  alt: z$1.ZodBoolean;
290
295
  control: z$1.ZodBoolean;
@@ -341,7 +346,6 @@ type AppThemeSelection = z$1.infer<typeof appThemeSelectionSchema>;
341
346
  declare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
342
347
  changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{
343
348
  "archived-changed": "archived-changed";
344
- "draft-changed": "draft-changed";
345
349
  "environment-changed": "environment-changed";
346
350
  "events-appended": "events-appended";
347
351
  "history-rewritten": "history-rewritten";
@@ -376,7 +380,6 @@ declare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
376
380
  latestAttentionAt: z$1.ZodNumber;
377
381
  runtime: z$1.ZodObject<{
378
382
  displayStatus: z$1.ZodEnum<{
379
- "host-reconnecting": "host-reconnecting";
380
383
  "waiting-for-host": "waiting-for-host";
381
384
  active: "active";
382
385
  error: "error";
@@ -386,7 +389,6 @@ declare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
386
389
  starting: "starting";
387
390
  stopping: "stopping";
388
391
  }>;
389
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
390
392
  }, z$1.core.$strip>;
391
393
  status: z$1.ZodEnum<{
392
394
  active: "active";
@@ -531,6 +533,7 @@ declare const environmentSchema: z$1.ZodObject<{
531
533
  type Environment = z$1.infer<typeof environmentSchema>;
532
534
 
533
535
  declare const experimentsSchema: z$1.ZodRecord<z$1.ZodEnum<{
536
+ androidTesting: "androidTesting";
534
537
  changelogPreview: "changelogPreview";
535
538
  legacyJitiPluginLoader: "legacyJitiPluginLoader";
536
539
  mobileApp: "mobileApp";
@@ -4209,7 +4212,6 @@ declare const threadTimelinePendingTodosSchema: z$1.ZodObject<{
4209
4212
  type ThreadTimelinePendingTodos = z$1.infer<typeof threadTimelinePendingTodosSchema>;
4210
4213
 
4211
4214
  declare const threadRuntimeDisplayStatusSchema: z$1.ZodEnum<{
4212
- "host-reconnecting": "host-reconnecting";
4213
4215
  "waiting-for-host": "waiting-for-host";
4214
4216
  active: "active";
4215
4217
  error: "error";
@@ -4902,7 +4904,6 @@ declare const projectWithThreadsResponseSchema: z$1.ZodObject<{
4902
4904
  }>;
4903
4905
  runtime: z$1.ZodObject<{
4904
4906
  displayStatus: z$1.ZodEnum<{
4905
- "host-reconnecting": "host-reconnecting";
4906
4907
  "waiting-for-host": "waiting-for-host";
4907
4908
  active: "active";
4908
4909
  error: "error";
@@ -4912,7 +4913,6 @@ declare const projectWithThreadsResponseSchema: z$1.ZodObject<{
4912
4913
  starting: "starting";
4913
4914
  stopping: "stopping";
4914
4915
  }>;
4915
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
4916
4916
  }, z$1.core.$strip>;
4917
4917
  sectionId: z$1.ZodNullable<z$1.ZodString>;
4918
4918
  sourceThreadId: z$1.ZodNullable<z$1.ZodString>;
@@ -5022,7 +5022,6 @@ declare const sidebarBootstrapResponseSchema: z$1.ZodObject<{
5022
5022
  }>;
5023
5023
  runtime: z$1.ZodObject<{
5024
5024
  displayStatus: z$1.ZodEnum<{
5025
- "host-reconnecting": "host-reconnecting";
5026
5025
  "waiting-for-host": "waiting-for-host";
5027
5026
  active: "active";
5028
5027
  error: "error";
@@ -5032,7 +5031,6 @@ declare const sidebarBootstrapResponseSchema: z$1.ZodObject<{
5032
5031
  starting: "starting";
5033
5032
  stopping: "stopping";
5034
5033
  }>;
5035
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
5036
5034
  }, z$1.core.$strip>;
5037
5035
  sectionId: z$1.ZodNullable<z$1.ZodString>;
5038
5036
  sourceThreadId: z$1.ZodNullable<z$1.ZodString>;
@@ -5140,7 +5138,6 @@ declare const sidebarBootstrapResponseSchema: z$1.ZodObject<{
5140
5138
  }>;
5141
5139
  runtime: z$1.ZodObject<{
5142
5140
  displayStatus: z$1.ZodEnum<{
5143
- "host-reconnecting": "host-reconnecting";
5144
5141
  "waiting-for-host": "waiting-for-host";
5145
5142
  active: "active";
5146
5143
  error: "error";
@@ -5150,7 +5147,6 @@ declare const sidebarBootstrapResponseSchema: z$1.ZodObject<{
5150
5147
  starting: "starting";
5151
5148
  stopping: "stopping";
5152
5149
  }>;
5153
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
5154
5150
  }, z$1.core.$strip>;
5155
5151
  sectionId: z$1.ZodNullable<z$1.ZodString>;
5156
5152
  sourceThreadId: z$1.ZodNullable<z$1.ZodString>;
@@ -10142,6 +10138,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10142
10138
  all: z$1.ZodArray<z$1.ZodEnum<{
10143
10139
  browserFocus: "browserFocus";
10144
10140
  editableFocus: "editableFocus";
10141
+ linuxPlatform: "linuxPlatform";
10145
10142
  macPlatform: "macPlatform";
10146
10143
  mainSurface: "mainSurface";
10147
10144
  modalOpen: "modalOpen";
@@ -10151,10 +10148,12 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10151
10148
  splitActive: "splitActive";
10152
10149
  terminalFocus: "terminalFocus";
10153
10150
  webSurface: "webSurface";
10151
+ windowsPlatform: "windowsPlatform";
10154
10152
  }>>;
10155
10153
  none: z$1.ZodArray<z$1.ZodEnum<{
10156
10154
  browserFocus: "browserFocus";
10157
10155
  editableFocus: "editableFocus";
10156
+ linuxPlatform: "linuxPlatform";
10158
10157
  macPlatform: "macPlatform";
10159
10158
  mainSurface: "mainSurface";
10160
10159
  modalOpen: "modalOpen";
@@ -10164,10 +10163,12 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10164
10163
  splitActive: "splitActive";
10165
10164
  terminalFocus: "terminalFocus";
10166
10165
  webSurface: "webSurface";
10166
+ windowsPlatform: "windowsPlatform";
10167
10167
  }>>;
10168
10168
  }, z$1.core.$strict>;
10169
10169
  }, z$1.core.$strict>>;
10170
10170
  experiments: z$1.ZodRecord<z$1.ZodEnum<{
10171
+ androidTesting: "androidTesting";
10171
10172
  changelogPreview: "changelogPreview";
10172
10173
  legacyJitiPluginLoader: "legacyJitiPluginLoader";
10173
10174
  mobileApp: "mobileApp";
@@ -10276,6 +10277,11 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10276
10277
  "window.new": "window.new";
10277
10278
  "workspace.openPreferred": "workspace.openPreferred";
10278
10279
  }>, z$1.ZodTemplateLiteral<`plugin:${string}/${string}`>]>;
10280
+ platform: z$1.ZodOptional<z$1.ZodEnum<{
10281
+ linux: "linux";
10282
+ mac: "mac";
10283
+ windows: "windows";
10284
+ }>>;
10279
10285
  shortcut: z$1.ZodNullable<z$1.ZodObject<{
10280
10286
  alt: z$1.ZodBoolean;
10281
10287
  control: z$1.ZodBoolean;
@@ -10376,6 +10382,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10376
10382
  all: z$1.ZodArray<z$1.ZodEnum<{
10377
10383
  browserFocus: "browserFocus";
10378
10384
  editableFocus: "editableFocus";
10385
+ linuxPlatform: "linuxPlatform";
10379
10386
  macPlatform: "macPlatform";
10380
10387
  mainSurface: "mainSurface";
10381
10388
  modalOpen: "modalOpen";
@@ -10385,10 +10392,12 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10385
10392
  splitActive: "splitActive";
10386
10393
  terminalFocus: "terminalFocus";
10387
10394
  webSurface: "webSurface";
10395
+ windowsPlatform: "windowsPlatform";
10388
10396
  }>>;
10389
10397
  none: z$1.ZodArray<z$1.ZodEnum<{
10390
10398
  browserFocus: "browserFocus";
10391
10399
  editableFocus: "editableFocus";
10400
+ linuxPlatform: "linuxPlatform";
10392
10401
  macPlatform: "macPlatform";
10393
10402
  mainSurface: "mainSurface";
10394
10403
  modalOpen: "modalOpen";
@@ -10398,6 +10407,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10398
10407
  splitActive: "splitActive";
10399
10408
  terminalFocus: "terminalFocus";
10400
10409
  webSurface: "webSurface";
10410
+ windowsPlatform: "windowsPlatform";
10401
10411
  }>>;
10402
10412
  }, z$1.core.$strict>;
10403
10413
  }, z$1.core.$strict>>;
@@ -10665,6 +10675,27 @@ declare const systemMachineProviderSchema: z$1.ZodObject<{
10665
10675
  supportsSuspend: z$1.ZodBoolean;
10666
10676
  }, z$1.core.$strip>;
10667
10677
  type SystemMachineProvider = z$1.infer<typeof systemMachineProviderSchema>;
10678
+ declare const androidAppArtifactSchema: z$1.ZodObject<{
10679
+ sha256: z$1.ZodString;
10680
+ size: z$1.ZodNumber;
10681
+ version: z$1.ZodString;
10682
+ versionCode: z$1.ZodNumber;
10683
+ }, z$1.core.$strip>;
10684
+ type AndroidAppArtifact = z$1.infer<typeof androidAppArtifactSchema>;
10685
+ type SystemAndroidAppResponse = AndroidAppArtifact | null;
10686
+ declare const androidAppPrepareRequestSchema: z$1.ZodObject<{
10687
+ source: z$1.ZodEnum<{
10688
+ github: "github";
10689
+ local: "local";
10690
+ }>;
10691
+ }, z$1.core.$strip>;
10692
+ type AndroidAppPrepareRequest = z$1.infer<typeof androidAppPrepareRequestSchema>;
10693
+ interface AndroidAppPreparation {
10694
+ status: "failed" | "idle" | "preparing" | "ready";
10695
+ source: "github" | "local" | null;
10696
+ message: string;
10697
+ artifact: AndroidAppArtifact | null;
10698
+ }
10668
10699
 
10669
10700
  interface UiPreferencesResponse {
10670
10701
  preferences: UiPreferenceEntries;
@@ -11982,7 +12013,6 @@ declare const createExecutionInputSourcesSchema: z$1.ZodObject<{
11982
12013
  }, z$1.core.$strict>;
11983
12014
  type CreateExecutionInputSources = z$1.infer<typeof createExecutionInputSourcesSchema>;
11984
12015
  declare const createThreadRequestSchema: z$1.ZodObject<{
11985
- draft: z$1.ZodOptional<z$1.ZodBoolean>;
11986
12016
  environment: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
11987
12017
  environmentId: z$1.ZodString;
11988
12018
  type: z$1.ZodLiteral<"reuse">;
@@ -12147,6 +12177,7 @@ declare const createThreadRequestSchema: z$1.ZodObject<{
12147
12177
  auto: "auto";
12148
12178
  full: "full";
12149
12179
  }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>;
12180
+ pinned: z$1.ZodOptional<z$1.ZodBoolean>;
12150
12181
  pluginMetadata: z$1.ZodOptional<z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>>;
12151
12182
  pluginSubmission: z$1.ZodOptional<z$1.ZodObject<{
12152
12183
  data: z$1.ZodType<JsonValue, unknown, z$1.core.$ZodTypeInternals<JsonValue, unknown>>;
@@ -13017,91 +13048,6 @@ declare const createQueuedMessageRequestSchema: z$1.ZodObject<{
13017
13048
  }>>;
13018
13049
  }, z$1.core.$strip>;
13019
13050
  type CreateQueuedMessageRequest = z$1.infer<typeof createQueuedMessageRequestSchema>;
13020
- declare const updateThreadDraftRequestSchema: z$1.ZodObject<{
13021
- input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
13022
- mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
13023
- end: z$1.ZodNumber;
13024
- resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
13025
- kind: z$1.ZodLiteral<"thread">;
13026
- label: z$1.ZodString;
13027
- projectId: z$1.ZodOptional<z$1.ZodString>;
13028
- threadId: z$1.ZodString;
13029
- }, z$1.core.$strip>, z$1.ZodObject<{
13030
- kind: z$1.ZodLiteral<"project">;
13031
- label: z$1.ZodString;
13032
- projectId: z$1.ZodString;
13033
- }, z$1.core.$strip>, z$1.ZodObject<{
13034
- kind: z$1.ZodLiteral<"section">;
13035
- label: z$1.ZodString;
13036
- sectionId: z$1.ZodString;
13037
- }, z$1.core.$strip>, z$1.ZodObject<{
13038
- entryKind: z$1.ZodEnum<{
13039
- directory: "directory";
13040
- file: "file";
13041
- }>;
13042
- kind: z$1.ZodLiteral<"path">;
13043
- label: z$1.ZodString;
13044
- path: z$1.ZodString;
13045
- source: z$1.ZodEnum<{
13046
- "thread-storage": "thread-storage";
13047
- workspace: "workspace";
13048
- }>;
13049
- }, z$1.core.$strip>, z$1.ZodObject<{
13050
- argumentHint: z$1.ZodNullable<z$1.ZodString>;
13051
- kind: z$1.ZodLiteral<"command">;
13052
- label: z$1.ZodString;
13053
- name: z$1.ZodString;
13054
- origin: z$1.ZodEnum<{
13055
- builtin: "builtin";
13056
- project: "project";
13057
- user: "user";
13058
- }>;
13059
- source: z$1.ZodEnum<{
13060
- command: "command";
13061
- skill: "skill";
13062
- }>;
13063
- trigger: z$1.ZodEnum<{
13064
- "/": "/";
13065
- $: "$";
13066
- }>;
13067
- }, z$1.core.$strip>, z$1.ZodObject<{
13068
- icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;
13069
- itemId: z$1.ZodString;
13070
- kind: z$1.ZodLiteral<"plugin">;
13071
- label: z$1.ZodString;
13072
- pluginId: z$1.ZodString;
13073
- }, z$1.core.$strip>], "kind">>;
13074
- start: z$1.ZodNumber;
13075
- }, z$1.core.$strip>>>;
13076
- text: z$1.ZodString;
13077
- type: z$1.ZodLiteral<"text">;
13078
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13079
- "agent-only": "agent-only";
13080
- }>>;
13081
- }, z$1.core.$strip>, z$1.ZodObject<{
13082
- type: z$1.ZodLiteral<"image">;
13083
- url: z$1.ZodString;
13084
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13085
- "agent-only": "agent-only";
13086
- }>>;
13087
- }, z$1.core.$strip>, z$1.ZodObject<{
13088
- path: z$1.ZodString;
13089
- type: z$1.ZodLiteral<"localImage">;
13090
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13091
- "agent-only": "agent-only";
13092
- }>>;
13093
- }, z$1.core.$strip>, z$1.ZodObject<{
13094
- mimeType: z$1.ZodOptional<z$1.ZodString>;
13095
- name: z$1.ZodOptional<z$1.ZodString>;
13096
- path: z$1.ZodString;
13097
- sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;
13098
- type: z$1.ZodLiteral<"localFile">;
13099
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13100
- "agent-only": "agent-only";
13101
- }>>;
13102
- }, z$1.core.$strip>], "type">>;
13103
- }, z$1.core.$strict>;
13104
- type UpdateThreadDraftRequest = z$1.infer<typeof updateThreadDraftRequestSchema>;
13105
13051
  declare const updateQueuedMessageRequestSchema: z$1.ZodObject<{
13106
13052
  expectedUpdatedAt: z$1.ZodNumber;
13107
13053
  input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
@@ -13411,7 +13357,6 @@ declare const threadListResponseSchema: z$1.ZodArray<z$1.ZodObject<{
13411
13357
  }>;
13412
13358
  runtime: z$1.ZodObject<{
13413
13359
  displayStatus: z$1.ZodEnum<{
13414
- "host-reconnecting": "host-reconnecting";
13415
13360
  "waiting-for-host": "waiting-for-host";
13416
13361
  active: "active";
13417
13362
  error: "error";
@@ -13421,7 +13366,6 @@ declare const threadListResponseSchema: z$1.ZodArray<z$1.ZodObject<{
13421
13366
  starting: "starting";
13422
13367
  stopping: "stopping";
13423
13368
  }>;
13424
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
13425
13369
  }, z$1.core.$strip>;
13426
13370
  sectionId: z$1.ZodNullable<z$1.ZodString>;
13427
13371
  sourceThreadId: z$1.ZodNullable<z$1.ZodString>;
@@ -13514,7 +13458,6 @@ declare const threadSearchResponseSchema: z$1.ZodObject<{
13514
13458
  }>;
13515
13459
  runtime: z$1.ZodObject<{
13516
13460
  displayStatus: z$1.ZodEnum<{
13517
- "host-reconnecting": "host-reconnecting";
13518
13461
  "waiting-for-host": "waiting-for-host";
13519
13462
  active: "active";
13520
13463
  error: "error";
@@ -13524,7 +13467,6 @@ declare const threadSearchResponseSchema: z$1.ZodObject<{
13524
13467
  starting: "starting";
13525
13468
  stopping: "stopping";
13526
13469
  }>;
13527
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
13528
13470
  }, z$1.core.$strip>;
13529
13471
  sectionId: z$1.ZodNullable<z$1.ZodString>;
13530
13472
  sourceThreadId: z$1.ZodNullable<z$1.ZodString>;
@@ -13608,7 +13550,6 @@ declare const threadSearchResponseSchema: z$1.ZodObject<{
13608
13550
  }>;
13609
13551
  runtime: z$1.ZodObject<{
13610
13552
  displayStatus: z$1.ZodEnum<{
13611
- "host-reconnecting": "host-reconnecting";
13612
13553
  "waiting-for-host": "waiting-for-host";
13613
13554
  active: "active";
13614
13555
  error: "error";
@@ -13618,7 +13559,6 @@ declare const threadSearchResponseSchema: z$1.ZodObject<{
13618
13559
  starting: "starting";
13619
13560
  stopping: "stopping";
13620
13561
  }>;
13621
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
13622
13562
  }, z$1.core.$strip>;
13623
13563
  sectionId: z$1.ZodNullable<z$1.ZodString>;
13624
13564
  sourceThreadId: z$1.ZodNullable<z$1.ZodString>;
@@ -13650,88 +13590,6 @@ declare const threadResponseSchema: z$1.ZodObject<{
13650
13590
  canSpawnChild: z$1.ZodBoolean;
13651
13591
  createdAt: z$1.ZodNumber;
13652
13592
  deletedAt: z$1.ZodNullable<z$1.ZodNumber>;
13653
- draft: z$1.ZodNullable<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
13654
- mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
13655
- end: z$1.ZodNumber;
13656
- resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
13657
- kind: z$1.ZodLiteral<"thread">;
13658
- label: z$1.ZodString;
13659
- projectId: z$1.ZodOptional<z$1.ZodString>;
13660
- threadId: z$1.ZodString;
13661
- }, z$1.core.$strip>, z$1.ZodObject<{
13662
- kind: z$1.ZodLiteral<"project">;
13663
- label: z$1.ZodString;
13664
- projectId: z$1.ZodString;
13665
- }, z$1.core.$strip>, z$1.ZodObject<{
13666
- kind: z$1.ZodLiteral<"section">;
13667
- label: z$1.ZodString;
13668
- sectionId: z$1.ZodString;
13669
- }, z$1.core.$strip>, z$1.ZodObject<{
13670
- entryKind: z$1.ZodEnum<{
13671
- directory: "directory";
13672
- file: "file";
13673
- }>;
13674
- kind: z$1.ZodLiteral<"path">;
13675
- label: z$1.ZodString;
13676
- path: z$1.ZodString;
13677
- source: z$1.ZodEnum<{
13678
- "thread-storage": "thread-storage";
13679
- workspace: "workspace";
13680
- }>;
13681
- }, z$1.core.$strip>, z$1.ZodObject<{
13682
- argumentHint: z$1.ZodNullable<z$1.ZodString>;
13683
- kind: z$1.ZodLiteral<"command">;
13684
- label: z$1.ZodString;
13685
- name: z$1.ZodString;
13686
- origin: z$1.ZodEnum<{
13687
- builtin: "builtin";
13688
- project: "project";
13689
- user: "user";
13690
- }>;
13691
- source: z$1.ZodEnum<{
13692
- command: "command";
13693
- skill: "skill";
13694
- }>;
13695
- trigger: z$1.ZodEnum<{
13696
- "/": "/";
13697
- $: "$";
13698
- }>;
13699
- }, z$1.core.$strip>, z$1.ZodObject<{
13700
- icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;
13701
- itemId: z$1.ZodString;
13702
- kind: z$1.ZodLiteral<"plugin">;
13703
- label: z$1.ZodString;
13704
- pluginId: z$1.ZodString;
13705
- }, z$1.core.$strip>], "kind">>;
13706
- start: z$1.ZodNumber;
13707
- }, z$1.core.$strip>>>;
13708
- text: z$1.ZodString;
13709
- type: z$1.ZodLiteral<"text">;
13710
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13711
- "agent-only": "agent-only";
13712
- }>>;
13713
- }, z$1.core.$strip>, z$1.ZodObject<{
13714
- type: z$1.ZodLiteral<"image">;
13715
- url: z$1.ZodString;
13716
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13717
- "agent-only": "agent-only";
13718
- }>>;
13719
- }, z$1.core.$strip>, z$1.ZodObject<{
13720
- path: z$1.ZodString;
13721
- type: z$1.ZodLiteral<"localImage">;
13722
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13723
- "agent-only": "agent-only";
13724
- }>>;
13725
- }, z$1.core.$strip>, z$1.ZodObject<{
13726
- mimeType: z$1.ZodOptional<z$1.ZodString>;
13727
- name: z$1.ZodOptional<z$1.ZodString>;
13728
- path: z$1.ZodString;
13729
- sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;
13730
- type: z$1.ZodLiteral<"localFile">;
13731
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13732
- "agent-only": "agent-only";
13733
- }>>;
13734
- }, z$1.core.$strip>], "type">>>;
13735
13593
  environmentId: z$1.ZodNullable<z$1.ZodString>;
13736
13594
  id: z$1.ZodString;
13737
13595
  lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;
@@ -13748,7 +13606,6 @@ declare const threadResponseSchema: z$1.ZodObject<{
13748
13606
  queuedMessageCount: z$1.ZodNumber;
13749
13607
  runtime: z$1.ZodObject<{
13750
13608
  displayStatus: z$1.ZodEnum<{
13751
- "host-reconnecting": "host-reconnecting";
13752
13609
  "waiting-for-host": "waiting-for-host";
13753
13610
  active: "active";
13754
13611
  error: "error";
@@ -13758,7 +13615,6 @@ declare const threadResponseSchema: z$1.ZodObject<{
13758
13615
  starting: "starting";
13759
13616
  stopping: "stopping";
13760
13617
  }>;
13761
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
13762
13618
  }, z$1.core.$strip>;
13763
13619
  sectionId: z$1.ZodNullable<z$1.ZodString>;
13764
13620
  sourceThreadId: z$1.ZodNullable<z$1.ZodString>;
@@ -13791,88 +13647,6 @@ declare const threadWithIncludesResponseSchema: z$1.ZodObject<{
13791
13647
  canSpawnChild: z$1.ZodBoolean;
13792
13648
  createdAt: z$1.ZodNumber;
13793
13649
  deletedAt: z$1.ZodNullable<z$1.ZodNumber>;
13794
- draft: z$1.ZodNullable<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
13795
- mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
13796
- end: z$1.ZodNumber;
13797
- resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
13798
- kind: z$1.ZodLiteral<"thread">;
13799
- label: z$1.ZodString;
13800
- projectId: z$1.ZodOptional<z$1.ZodString>;
13801
- threadId: z$1.ZodString;
13802
- }, z$1.core.$strip>, z$1.ZodObject<{
13803
- kind: z$1.ZodLiteral<"project">;
13804
- label: z$1.ZodString;
13805
- projectId: z$1.ZodString;
13806
- }, z$1.core.$strip>, z$1.ZodObject<{
13807
- kind: z$1.ZodLiteral<"section">;
13808
- label: z$1.ZodString;
13809
- sectionId: z$1.ZodString;
13810
- }, z$1.core.$strip>, z$1.ZodObject<{
13811
- entryKind: z$1.ZodEnum<{
13812
- directory: "directory";
13813
- file: "file";
13814
- }>;
13815
- kind: z$1.ZodLiteral<"path">;
13816
- label: z$1.ZodString;
13817
- path: z$1.ZodString;
13818
- source: z$1.ZodEnum<{
13819
- "thread-storage": "thread-storage";
13820
- workspace: "workspace";
13821
- }>;
13822
- }, z$1.core.$strip>, z$1.ZodObject<{
13823
- argumentHint: z$1.ZodNullable<z$1.ZodString>;
13824
- kind: z$1.ZodLiteral<"command">;
13825
- label: z$1.ZodString;
13826
- name: z$1.ZodString;
13827
- origin: z$1.ZodEnum<{
13828
- builtin: "builtin";
13829
- project: "project";
13830
- user: "user";
13831
- }>;
13832
- source: z$1.ZodEnum<{
13833
- command: "command";
13834
- skill: "skill";
13835
- }>;
13836
- trigger: z$1.ZodEnum<{
13837
- "/": "/";
13838
- $: "$";
13839
- }>;
13840
- }, z$1.core.$strip>, z$1.ZodObject<{
13841
- icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;
13842
- itemId: z$1.ZodString;
13843
- kind: z$1.ZodLiteral<"plugin">;
13844
- label: z$1.ZodString;
13845
- pluginId: z$1.ZodString;
13846
- }, z$1.core.$strip>], "kind">>;
13847
- start: z$1.ZodNumber;
13848
- }, z$1.core.$strip>>>;
13849
- text: z$1.ZodString;
13850
- type: z$1.ZodLiteral<"text">;
13851
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13852
- "agent-only": "agent-only";
13853
- }>>;
13854
- }, z$1.core.$strip>, z$1.ZodObject<{
13855
- type: z$1.ZodLiteral<"image">;
13856
- url: z$1.ZodString;
13857
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13858
- "agent-only": "agent-only";
13859
- }>>;
13860
- }, z$1.core.$strip>, z$1.ZodObject<{
13861
- path: z$1.ZodString;
13862
- type: z$1.ZodLiteral<"localImage">;
13863
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13864
- "agent-only": "agent-only";
13865
- }>>;
13866
- }, z$1.core.$strip>, z$1.ZodObject<{
13867
- mimeType: z$1.ZodOptional<z$1.ZodString>;
13868
- name: z$1.ZodOptional<z$1.ZodString>;
13869
- path: z$1.ZodString;
13870
- sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;
13871
- type: z$1.ZodLiteral<"localFile">;
13872
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13873
- "agent-only": "agent-only";
13874
- }>>;
13875
- }, z$1.core.$strip>], "type">>>;
13876
13650
  environment: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{
13877
13651
  baseBranch: z$1.ZodNullable<z$1.ZodString>;
13878
13652
  branchName: z$1.ZodNullable<z$1.ZodString>;
@@ -13999,7 +13773,6 @@ declare const threadWithIncludesResponseSchema: z$1.ZodObject<{
13999
13773
  queuedMessageCount: z$1.ZodNumber;
14000
13774
  runtime: z$1.ZodObject<{
14001
13775
  displayStatus: z$1.ZodEnum<{
14002
- "host-reconnecting": "host-reconnecting";
14003
13776
  "waiting-for-host": "waiting-for-host";
14004
13777
  active: "active";
14005
13778
  error: "error";
@@ -14009,7 +13782,6 @@ declare const threadWithIncludesResponseSchema: z$1.ZodObject<{
14009
13782
  starting: "starting";
14010
13783
  stopping: "stopping";
14011
13784
  }>;
14012
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
14013
13785
  }, z$1.core.$strip>;
14014
13786
  sectionId: z$1.ZodNullable<z$1.ZodString>;
14015
13787
  sourceThreadId: z$1.ZodNullable<z$1.ZodString>;
@@ -15730,6 +15502,9 @@ interface EnvironmentListProvidersArgs {
15730
15502
  }
15731
15503
  type EnvironmentListProvidersResult = SystemEnvironmentProvider[];
15732
15504
  interface EnvironmentsArea {
15505
+ experimental_cleanup(args: EnvironmentActionArgs): Promise<{
15506
+ ok: true;
15507
+ }>;
15733
15508
  archiveThreads(args: EnvironmentActionArgs): Promise<EnvironmentArchiveThreadsResult>;
15734
15509
  commit(args: EnvironmentCommitArgs): Promise<EnvironmentCommitResult>;
15735
15510
  diff(args: EnvironmentDiffArgs): Promise<EnvironmentDiffResult>;
@@ -15879,6 +15654,7 @@ type HostDeleteResult = {
15879
15654
  type HostDirectoryResult = HostDirectoryListing;
15880
15655
  type HostGetResult = Host & {
15881
15656
  connectMachineId: string | null;
15657
+ threadStorageRootPath: string | null;
15882
15658
  };
15883
15659
  type HostEnrollmentCommandResult = HostEnrollmentCommandResponse;
15884
15660
  type HostReconnectResult = HostReconnectResponse;
@@ -16549,6 +16325,9 @@ interface SystemArea {
16549
16325
  testAiService(args: SystemTestAiServiceArgs): Promise<SystemTestAiServiceResult>;
16550
16326
  transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise<SystemVoiceTranscriptionResult>;
16551
16327
  uiPreferences: SystemUiPreferencesArea;
16328
+ androidAppPreparation(): Promise<AndroidAppPreparation>;
16329
+ prepareAndroidApp(input: AndroidAppPrepareRequest): Promise<AndroidAppPreparation>;
16330
+ androidApp(): Promise<SystemAndroidAppResponse>;
16552
16331
  updateExperiments(args: Experiments): Promise<SystemUpdateExperimentsResult>;
16553
16332
  updateGeneralSettings(args: AppSettingsUpdate): Promise<SystemUpdateGeneralSettingsResult>;
16554
16333
  updateKeyboardSettings(args: AppKeybindingOverrides): Promise<SystemUpdateKeyboardSettingsResult>;
@@ -16804,9 +16583,6 @@ interface ThreadForkArgs extends Omit<ForkThreadRequest, "origin" | "visibility"
16804
16583
  interface ThreadUpdateArgs extends UpdateThreadRequest {
16805
16584
  threadId: string;
16806
16585
  }
16807
- interface ThreadUpdateDraftArgs extends UpdateThreadDraftRequest {
16808
- threadId: string;
16809
- }
16810
16586
  interface ThreadPluginMetadataArgs {
16811
16587
  pluginId: string;
16812
16588
  signal?: AbortSignal;
@@ -17090,12 +16866,6 @@ interface ThreadsArea {
17090
16866
  unarchive(args: ThreadActionArgs): Promise<ThreadUnarchiveResult>;
17091
16867
  unpin(args: ThreadActionArgs): Promise<ThreadMutationResult>;
17092
16868
  update(args: ThreadUpdateArgs): Promise<ThreadMutationResult>;
17093
- /**
17094
- * Replace the thread's saved, unsent draft message. An empty `input` clears
17095
- * it. On a `pending` thread the draft also becomes the thread's fallback
17096
- * title. Sending a message does not clear the draft; clear it explicitly.
17097
- */
17098
- updateDraft(args: ThreadUpdateDraftArgs): Promise<ThreadMutationResult>;
17099
16869
  wait(args: ThreadWaitArgs): Promise<ThreadWaitResult>;
17100
16870
  }
17101
16871
 
@@ -17267,7 +17037,7 @@ type ExperimentalSidebarNavigationAction = {
17267
17037
  /**
17268
17038
  * Semantic icon identity for one sidebar navigation item. Render it with
17269
17039
  * {@link PluginSdkApp.experimental_SidebarNavigationIcon} to match bb's
17270
- * artwork, including plugin branding.
17040
+ * artwork, including panel icons with plugin branding as their fallback.
17271
17041
  */
17272
17042
  type ExperimentalSidebarNavigationIcon = {
17273
17043
  kind: "host";
@@ -17793,6 +17563,7 @@ type ExperimentalPluginFixedTabReference<Target extends JsonValue$1 = never> = {
17793
17563
  /** A fixed tab declared by a plugin nav panel. */
17794
17564
  type PluginFixedTabRegistration<Target extends JsonValue$1 = never> = ExperimentalPluginFixedTabReference<Target> & {
17795
17565
  title: string;
17566
+ /** Resolved names take precedence over plugin branding; unknown names fall back to branding. */
17796
17567
  icon: BbIconName;
17797
17568
  component: ComponentType<PluginNavPanelProps>;
17798
17569
  /** `flush` lets the component own padding and scrolling. */
@@ -17804,6 +17575,7 @@ interface PluginNavPanelRegistration {
17804
17575
  /** Unique within the plugin; letters, digits, `-`, `_`. */
17805
17576
  id: string;
17806
17577
  title: string;
17578
+ /** Resolved names take precedence over plugin branding in navigation and the header; unknown names fall back to branding. */
17807
17579
  icon: BbIconName;
17808
17580
  /** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */
17809
17581
  path: string;
@@ -17887,8 +17659,8 @@ interface PluginThreadPanelActionRegistration {
17887
17659
  /** Label of the action row in the panel's new-tab launcher. */
17888
17660
  title: string;
17889
17661
  /**
17890
- * Drawn only when the manifest declares no `bb.branding.icon`; the launcher
17891
- * row and opened tabs prefer that over this hint.
17662
+ * Resolved names take precedence over plugin branding in the launcher and
17663
+ * opened tabs. Omitted or unknown names fall back to plugin branding.
17892
17664
  */
17893
17665
  icon?: BbIconName;
17894
17666
  /** Rendered inside every panel tab this action opens. */
@@ -17927,7 +17699,7 @@ interface PluginNewThreadPanelActionRegistration {
17927
17699
  id: string;
17928
17700
  /** Label of the action row in the panel's new-tab launcher. */
17929
17701
  title: string;
17930
- /** Drawn only when the manifest declares no `bb.branding.icon`. */
17702
+ /** Resolved names take precedence over plugin branding; omitted or unknown names fall back to branding. */
17931
17703
  icon?: BbIconName;
17932
17704
  /** Rendered inside every panel tab this action opens. */
17933
17705
  component: ComponentType<PluginNewThreadPanelProps>;
@@ -17972,7 +17744,7 @@ interface PluginSidebarFooterActionRegistration {
17972
17744
  id: string;
17973
17745
  /** Tooltip and accessible label for the icon button. */
17974
17746
  title: string;
17975
- /** Drawn only when the manifest declares no `bb.branding.icon`. */
17747
+ /** Resolved names take precedence over plugin branding; omitted or unknown names fall back to branding. */
17976
17748
  icon: BbIconName;
17977
17749
  /**
17978
17750
  * Runs when the user activates the action (e.g. call `openSettings()`,
@@ -18088,9 +17860,9 @@ interface PluginSidebarThread {
18088
17860
  */
18089
17861
  status: ThreadStatus;
18090
17862
  /**
18091
- * `status` refined by host and environment state: adds "provisioning",
18092
- * "host-reconnecting", and "waiting-for-host" for a thread whose machine is
18093
- * not ready. Treat an unknown value as `status`.
17863
+ * `status` refined by host and environment state: adds "provisioning" and
17864
+ * "waiting-for-host" for a thread whose machine is not ready. Treat an
17865
+ * unknown value as `status`.
18094
17866
  */
18095
17867
  runtimeStatus: ThreadRuntimeDisplayStatus;
18096
17868
  /**
@@ -18357,7 +18129,7 @@ interface PluginSidebarThreadDraftState {
18357
18129
  }
18358
18130
  /**
18359
18131
  * The status another plugin's app-wide script set on a thread's row through
18360
- * `useComposer().experimental_setThreadRowStatus` (see
18132
+ * the content-script context's `experimental_setThreadRowStatus` (see
18361
18133
  * {@link PluginSdkApp.useSidebarThreadRowStatus}). bb's row draws it in
18362
18134
  * place of the draft glyph while it is set; a replaced list should do the
18363
18135
  * same so a status set by, say, the drafts or workflows plugin does not
@@ -18397,6 +18169,9 @@ interface PluginSidebarThreadActions {
18397
18169
  * `sectionId` files the new thread under that section, and
18398
18170
  * `environmentId` reuses that environment (the "New thread in
18399
18171
  * environment" affordance), both exactly as bb's own list does.
18172
+ * `experimental_placement` explicitly selects the section and pin state,
18173
+ * overriding `sectionId`. Omitting placement starts unpinned, outside sections
18174
+ * unless `sectionId` is supplied; previous composer placement is cleared.
18400
18175
  * `hostId` selects a machine for a new environment when it
18401
18176
  * is known and supports an environment provider. `environmentId` wins when
18402
18177
  * both are supplied.
@@ -18404,6 +18179,10 @@ interface PluginSidebarThreadActions {
18404
18179
  openNewThread(options?: {
18405
18180
  projectId?: string;
18406
18181
  sectionId?: string;
18182
+ experimental_placement?: {
18183
+ sectionId: string | null;
18184
+ pinned: boolean;
18185
+ };
18407
18186
  environmentId?: string;
18408
18187
  hostId?: string;
18409
18188
  focusPrompt?: boolean;
@@ -18692,12 +18471,19 @@ interface PluginMessageActionContext {
18692
18471
  * is never thrown: the host logs it and reports it here.
18693
18472
  */
18694
18473
  openPanel(options: PluginTargetedPanelActionOpenOptions): boolean;
18474
+ /**
18475
+ * The composer of the thread the message is in, or null when that thread's
18476
+ * composer is not available on this surface. The same handle
18477
+ * `useComposer()` returns there.
18478
+ */
18479
+ composer: PluginComposerApi | null;
18695
18480
  }
18696
18481
  /**
18697
18482
  * An action on chat messages: an icon button in the per-message action bar
18698
18483
  * (user and assistant messages) and an entry in the assistant-message
18699
18484
  * text-selection menu. Host-rendered chrome — the plugin supplies title,
18700
- * icon hint, and `run` behavior only.
18485
+ * icon, and `run` behavior only. Resolved icon names take precedence over
18486
+ * plugin branding; omitted or unknown names fall back to branding.
18701
18487
  */
18702
18488
  interface PluginMessageActionRegistration {
18703
18489
  /** Unique within the plugin; letters, digits, `-`, `_`. */
@@ -19207,12 +18993,6 @@ type PluginComposerScope = {
19207
18993
  kind: "queued-message";
19208
18994
  threadId: string;
19209
18995
  queuedMessageId: string;
19210
- } | {
19211
- kind: "side-chat";
19212
- projectId: string;
19213
- parentThreadId: string;
19214
- tabId: string;
19215
- childThreadId: string | null;
19216
18996
  } | {
19217
18997
  kind: "new-thread";
19218
18998
  /** Root compose's effective selected project; null only while unresolved. */
@@ -19235,35 +19015,39 @@ interface ComposerCustomization {
19235
19015
  component: ComponentType;
19236
19016
  }[];
19237
19017
  plusMenu?: readonly ComposerPlusMenuItem[];
19018
+ /** Host-rendered rows in the menu next to the composer's send button. */
19019
+ sendMenu?: readonly ComposerSendMenuItem[];
19238
19020
  richText?: ComposerRichTextSpec;
19239
19021
  }
19240
19022
  /** Host-rendered menu row in the composer's `+` menu. */
19241
19023
  interface ComposerPlusMenuItem {
19242
19024
  id: string;
19243
19025
  label: string;
19244
- /** Drawn only when the manifest declares no `bb.branding.icon`. */
19026
+ /** Takes precedence over the plugin's `bb.branding.icon`, which is drawn when this is omitted. */
19245
19027
  icon?: BbIconName;
19246
19028
  /** Accessible description for the host-rendered row. */
19247
19029
  description?: string;
19248
- disabled?: boolean | ((view: ComposerView) => boolean);
19030
+ disabled?: boolean | ((composer: PluginComposerApi) => boolean);
19249
19031
  run(context: {
19250
19032
  composer: PluginComposerApi;
19251
- view: ComposerView;
19252
19033
  }): void | Promise<void>;
19253
19034
  }
19254
- /** Reactive read-side of the composer a plugin surface is mounted in. */
19255
- interface ComposerView {
19256
- scope: PluginComposerScope;
19257
- layout: "compact" | "expanded" | "zen";
19258
- draft: {
19259
- text: string;
19260
- isEmpty: boolean;
19261
- attachmentCount: number;
19262
- };
19263
- run: {
19264
- isRunning: boolean;
19265
- isSubmitting: boolean;
19266
- };
19035
+ /**
19036
+ * Host-rendered row in the menu next to the composer's send button, for
19037
+ * alternatives to sending right away (save as a draft, send later). The menu
19038
+ * shows only while the composer can submit.
19039
+ */
19040
+ interface ComposerSendMenuItem {
19041
+ id: string;
19042
+ label: string;
19043
+ /** Takes precedence over the plugin's `bb.branding.icon`, which is drawn when this is omitted. */
19044
+ icon?: BbIconName;
19045
+ /** Accessible description for the host-rendered row. */
19046
+ description?: string;
19047
+ disabled?: boolean | ((composer: PluginComposerApi) => boolean);
19048
+ run(context: {
19049
+ composer: PluginComposerApi;
19050
+ }): void | Promise<void>;
19267
19051
  }
19268
19052
  interface ComposerRichTextSpec {
19269
19053
  /** Content-derived paint: match ranges receive `className`; text is never mutated. */
@@ -19276,18 +19060,80 @@ interface ComposerRichTextSpec {
19276
19060
  }[];
19277
19061
  className: string;
19278
19062
  }[];
19279
- /** Debounced, read-only observation of the structured draft. */
19280
- onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;
19281
19063
  }
19282
- interface ComposerStructuredDraft {
19064
+ /** The composer's text and the @-mention pills in it. */
19065
+ interface ComposerDraft {
19283
19066
  text: string;
19284
- mentions: readonly {
19285
- from: number;
19286
- to: number;
19287
- provider: string;
19288
- id: string;
19289
- label: string;
19290
- }[];
19067
+ mentions: readonly ComposerMention[];
19068
+ }
19069
+ /** An already uploaded attachment; paths retain their original project or thread ownership. */
19070
+ type ComposerAttachment = UploadedPromptAttachment;
19071
+ /** The complete current draft. Snapshots and their entries are immutable. */
19072
+ interface ComposerDraftSnapshot extends ComposerDraft {
19073
+ readonly attachments: readonly ComposerAttachment[];
19074
+ }
19075
+ /** Atomic text and mention replacement, optionally replacing uploaded attachments too. */
19076
+ interface ComposerDraftReplacement extends ComposerDraft {
19077
+ /** Omit to preserve attachments; supply an empty array to remove them all. Does not upload or copy files. */
19078
+ attachments?: readonly ComposerAttachment[];
19079
+ }
19080
+ /**
19081
+ * One @-mention pill: its range in `ComposerDraft.text` plus everything the
19082
+ * host needs to recreate it, so a mention read from `draft` can be passed
19083
+ * back to `insert` unchanged.
19084
+ */
19085
+ type ComposerMention = {
19086
+ from: number;
19087
+ to: number;
19088
+ label: string;
19089
+ } & ({
19090
+ kind: "thread";
19091
+ threadId: string;
19092
+ projectId?: string;
19093
+ } | {
19094
+ kind: "project";
19095
+ projectId: string;
19096
+ } | {
19097
+ kind: "section";
19098
+ sectionId: string;
19099
+ } | {
19100
+ kind: "path";
19101
+ path: string;
19102
+ source: "thread-storage" | "workspace";
19103
+ entryKind: "directory" | "file";
19104
+ } | {
19105
+ kind: "command";
19106
+ trigger: "$" | "/";
19107
+ name: string;
19108
+ source: "command" | "skill";
19109
+ origin: "builtin" | "project" | "user";
19110
+ argumentHint: string | null;
19111
+ } | {
19112
+ kind: "plugin";
19113
+ /** The plugin that owns the pill. */
19114
+ pluginId: string;
19115
+ /** The mention provider id that plugin registered. */
19116
+ provider: string;
19117
+ /** The item id the provider's `resolve` receives at send time. */
19118
+ id: string;
19119
+ icon?: string | null;
19120
+ });
19121
+ /**
19122
+ * What `insert` accepts: text, a mention read from `draft` (any kind), or one
19123
+ * of the calling plugin's own mentions (`{ provider, id, label }`, no `kind`).
19124
+ */
19125
+ type ComposerInsertPart = string | ComposerMention | PluginComposerMention;
19126
+ /** Where `insert` puts its content. */
19127
+ interface ComposerInsertOptions {
19128
+ /**
19129
+ * `"cursor"` (default) inserts at the editor's selection, replacing any
19130
+ * selected text; the selection is kept while focus is elsewhere, and the
19131
+ * composer must be on screen. `"end"` inserts after the last character and
19132
+ * also works for a composer that is not on screen.
19133
+ */
19134
+ at?: "cursor" | "end";
19135
+ /** Put the content on its own paragraph, adding a paragraph break before and after only where text is adjacent. */
19136
+ block?: boolean;
19291
19137
  }
19292
19138
  /** Host-rendered paint applied to the editable composer text. */
19293
19139
  interface PluginComposerTextEffect {
@@ -19319,31 +19165,77 @@ interface PluginComposerMention {
19319
19165
  label: string;
19320
19166
  }
19321
19167
  /**
19322
- * Programmatic access to the chat composer draft — the same shared draft the
19323
- * built-in "Add to chat" affordances (file preview, diff, terminal selections)
19324
- * write to. While a queued message is being edited, writes land in that
19325
- * message's inline editor. In a side chat, writes land in the visible side-chat
19326
- * draft. Otherwise, inside a thread context writes land in that thread's draft;
19327
- * anywhere else (nav panel, homepage section) they seed the new-thread composer
19328
- * draft, which persists until the user sends or clears it.
19168
+ * One composer: its state and the writes a plugin can make. `useComposer()`
19169
+ * returns the composer the calling surface belongs to — inside a composer
19170
+ * slot, that composer; in a thread's panels, that thread's composer;
19171
+ * elsewhere, the current route's draft (the thread in view, or the new-thread
19172
+ * draft).
19173
+ *
19174
+ * The handle is stable: the same composer returns the same object across
19175
+ * renders, and its methods always act on the current draft, so it is safe to
19176
+ * keep in effects, callbacks and async work. Its reactive fields (`text`,
19177
+ * `draft`, `selection`, `isEmpty`, …) re-render the calling component when they change;
19178
+ * depend on those fields, not on the handle, in memo dependency lists.
19179
+ *
19180
+ * A handle always writes to its own composer's draft. Thread and new-thread
19181
+ * drafts persist, so a write after the composer left the screen still lands
19182
+ * in that draft. When the draft no longer exists (a queued-message or
19183
+ * sent-message editor that closed), `insert`, `replace`, `removeMention`, `submit` and
19184
+ * `setSelection` throw "This composer is no longer available"; the older
19185
+ * text methods log a warning and do nothing.
19329
19186
  */
19330
19187
  interface PluginComposerApi {
19331
19188
  scope: PluginComposerScope;
19189
+ /**
19190
+ * Stable identity for this composer's draft: the same across remounts and
19191
+ * reloads for thread and new-thread composers (including a `ThreadChat`),
19192
+ * and per editing session for queued-message and sent-message editors.
19193
+ */
19194
+ readonly key: string;
19195
+ /** `"compact"` in the collapsed single-line layout, otherwise `"expanded"`. */
19196
+ readonly layout: "compact" | "expanded";
19197
+ /** The thread's agent is running or stopping. Always false in a new-thread composer. */
19198
+ readonly isRunning: boolean;
19199
+ /** The composer is submitting right now. */
19200
+ readonly isSubmitting: boolean;
19201
+ /**
19202
+ * Pressing Enter would not submit right now: the same decision as the
19203
+ * host's send button (empty draft, uploads in progress, loading, a
19204
+ * selection or setup missing, a pending interaction, voice input, …).
19205
+ */
19206
+ readonly isSubmittingBlocked: boolean;
19207
+ /** The host's message for why submitting is blocked, or null when it is not. */
19208
+ readonly submittingBlockedReason: string | null;
19209
+ /** No text (ignoring whitespace), no mentions and no attachments. */
19210
+ readonly isEmpty: boolean;
19211
+ /** Attachments that have finished uploading. */
19212
+ readonly attachmentCount: number;
19332
19213
  /** Current plain text for this composer scope. */
19333
19214
  readonly text: string;
19215
+ /** The complete current draft, including uploaded attachments. Stable until the draft changes. */
19216
+ readonly draft: ComposerDraftSnapshot;
19217
+ /** Current picker values, or null when this composer has no pickers. Stable until a picker value changes. */
19218
+ readonly selection: ComposerSelection | null;
19334
19219
  /**
19335
- * Replace the draft's plain text. Attachments are preserved. Inline mentions
19336
- * outside the changed range are preserved and rebased; mentions overlapped
19337
- * by the replacement are removed because their text representation changed.
19220
+ * Replace text and mentions together in one committed change. An updater
19221
+ * receives the latest immutable snapshot, including attachments, and must
19222
+ * return its result synchronously. Returning that same snapshot is a no-op.
19223
+ * Omitted attachments are preserved; an explicit list replaces them, and
19224
+ * an empty list clears them. Does not infer or rebase mention ranges.
19225
+ * Ranges are non-overlapping UTF-16 offsets into the supplied text.
19226
+ * Invalid results, throwing updaters, and unavailable editors leave the
19227
+ * draft unchanged. Does not focus, submit, upload, or copy files between
19228
+ * projects. Use `insert` for insertion at the editor's cursor.
19338
19229
  */
19339
- setText(next: string): void;
19230
+ replace(next: ComposerDraftReplacement | ((current: ComposerDraftSnapshot) => ComposerDraftReplacement)): void;
19340
19231
  /**
19341
- * Replace the draft's plain text from the latest committed value. Uses the
19342
- * same structured-state reconciliation as `setText`.
19232
+ * Insert text and mentions. See {@link ComposerInsertOptions} for placement.
19233
+ * Mentions read from `draft` are recreated exactly; the calling plugin's
19234
+ * own `{ provider, id, label }` resolves through its mention provider.
19235
+ * Throws for another plugin's mention without `kind`, and for
19236
+ * `at: "cursor"` when the composer is not on screen.
19343
19237
  */
19344
- updateText(updater: (current: string) => string): void;
19345
- /** Clear plain text without clearing independently attached files. */
19346
- clear(): void;
19238
+ insert(parts: ComposerInsertPart | readonly ComposerInsertPart[], options?: ComposerInsertOptions): void;
19347
19239
  /**
19348
19240
  * Apply a host-rendered effect to this composer's editable text, or clear it.
19349
19241
  * Effects are scoped to the calling plugin and automatically clear when the
@@ -19356,38 +19248,22 @@ interface PluginComposerApi {
19356
19248
  * scope changes.
19357
19249
  */
19358
19250
  setInputLock(locked: boolean): void;
19359
- /**
19360
- * Append text to the draft as a `> ` blockquote block and focus the
19361
- * composer. Blank text is a no-op. This is the "reference this selection
19362
- * in chat" primitive.
19363
- */
19364
- addQuote(text: string): void;
19365
- /**
19366
- * Insert an @-mention pill that resolves through this plugin's mention
19367
- * provider at send time — the durable way to reference an entity whose
19368
- * content should be fetched fresh when the message is sent.
19369
- */
19370
- insertMention(mention: PluginComposerMention): void;
19371
- /** Remove this plugin's matching mention pills and their text from the current draft. */
19372
- experimental_removeMention(mention: {
19373
- provider: string;
19374
- id: string;
19375
- }): void;
19376
19251
  /** Subscribe to successful local submissions in this composer scope, including accepted queued messages. Failed sends and draft clearing do not notify. Dispose on unmount. */
19377
- experimental_onSubmitted(listener: () => void): () => void;
19252
+ onSubmitted(listener: () => void): () => void;
19378
19253
  /** Focus the composer caret at the end of the draft. */
19379
19254
  focus(): void;
19380
19255
  /**
19381
- * Submit this composer's draft through the composer's OWN submit pipeline,
19382
- * optionally scheduling it or attaching plugin-owned dispatch data.
19383
- *
19384
- * This is a real submission, not a plugin-issued send: the host builds the
19385
- * request exactly as pressing Enter would, so the draft's attachments and
19256
+ * Submit this composer's draft exactly as pressing Enter would: the same
19257
+ * checks and the same action (send, or queue while the thread is busy; a
19258
+ * provider handoff creates a new thread). The draft's attachments and
19386
19259
  * @-mentions, and — in the new-thread composer — the provider, model,
19387
19260
  * reasoning level, service tier, permission mode and environment the user
19388
- * has selected on screen, all travel with it. A plugin cannot assemble that
19389
- * tuple itself, which is why sending from the backend instead would silently
19390
- * run the message with different settings than the ones in front of the user.
19261
+ * has selected on screen, all travel with it.
19262
+ *
19263
+ * While attachments are uploading it waits for them, then checks again; it
19264
+ * rejects if an upload fails. Otherwise, when submitting is blocked it
19265
+ * rejects with `submittingBlockedReason`, a message safe to show to the
19266
+ * user. The queued-message and sent-message editors save edits and reject.
19391
19267
  *
19392
19268
  * `sendAt` queues the submission until that time. `experimental_data` is
19393
19269
  * opaque JSON delivered to dispatch hooks together with the calling plugin's
@@ -19396,16 +19272,10 @@ interface PluginComposerApi {
19396
19272
  * later attempts; core does not persist or interpret the opaque data.
19397
19273
  *
19398
19274
  * Resolves once the host has accepted the submission and cleared the draft.
19399
- * Rejects when the composer refused to submit — a scope with no submit
19400
- * pipeline (a queued-message editor, a side chat), an empty draft, or a
19401
- * composer that is not ready (still loading its execution defaults, missing
19402
- * an environment). The rejection's message is safe to show to the user.
19403
19275
  * Failures of the underlying request are reported by bb's own submit error
19404
19276
  * handling and restore the draft, exactly as an interactive failure does.
19405
- *
19406
- * Experimental: see docs/api_to_audit.md.
19407
19277
  */
19408
- experimental_submit(options: ExperimentalComposerSubmitOptions): Promise<void>;
19278
+ submit(options: ComposerSubmitOptions): Promise<void>;
19409
19279
  /**
19410
19280
  * Set this composer's pickers as if each value had been picked by hand.
19411
19281
  *
@@ -19452,18 +19322,15 @@ interface PluginComposerApi {
19452
19322
  * mounted outside any composer), when the calling surface is no longer
19453
19323
  * active, and when a value is not a known reasoning level, service tier or
19454
19324
  * permission mode.
19455
- *
19456
- * Experimental: see docs/api_to_audit.md.
19457
19325
  */
19458
- experimental_setSelection(selection: ExperimentalComposerSelection): Promise<ExperimentalComposerSelection>;
19326
+ setSelection(selection: ComposerSelection): Promise<ComposerSelection>;
19459
19327
  }
19460
19328
  /**
19461
- * Picker values for `experimental_setSelection`, and the shape it resolves
19462
- * with. Field names match `NewThreadRequest` and the `default*` props of
19329
+ * Current picker values in `selection`, input for `setSelection`, and the shape it resolves with. Field names match `NewThreadRequest` and the `default*` props of
19463
19330
  * `experimental_NewThreadComposer`, so one routed decision can feed the
19464
19331
  * composer, the embedded composer and `bb.sdk.threads.spawn` alike.
19465
19332
  */
19466
- interface ExperimentalComposerSelection {
19333
+ interface ComposerSelection {
19467
19334
  /** New-thread composers only. BB's personal-project id means "Don't work in a project". */
19468
19335
  projectId?: string;
19469
19336
  /**
@@ -19484,13 +19351,13 @@ interface ExperimentalComposerSelection {
19484
19351
  permissionMode?: PermissionMode;
19485
19352
  }
19486
19353
  /**
19487
- * What `experimental_submit` does differently from pressing Enter.
19354
+ * What `submit` does differently from pressing Enter.
19488
19355
  *
19489
19356
  * `experimental_data` is opaque JSON delivered to dispatch hooks. The runtime
19490
19357
  * associates it with the calling plugin automatically for the initial
19491
19358
  * dispatch attempt.
19492
19359
  */
19493
- type ExperimentalComposerSubmitOptions = {
19360
+ type ComposerSubmitOptions = {
19494
19361
  sendAt: number;
19495
19362
  experimental_data?: JsonValue$1;
19496
19363
  } | {
@@ -19715,7 +19582,7 @@ interface NewThreadRequest {
19715
19582
  input: PromptInput[];
19716
19583
  /**
19717
19584
  * Epoch ms the first turn should dispatch at. Present only when the
19718
- * submission came from `useComposer().experimental_submit` — a scheduled
19585
+ * submission came from `useComposer().submit` — a scheduled
19719
19586
  * create — and absent otherwise, which is what makes an ordinary submission
19720
19587
  * start work at once. Forward it to `threads.spawn` unchanged: the thread is
19721
19588
  * created `pending` and its first message is queued as a row until then.
@@ -20019,6 +19886,20 @@ interface PluginSdkApp {
20019
19886
  /** Read or clear the owning tab's validated, session-scoped target. */
20020
19887
  experimental_useFixedTabTarget<Target extends JsonValue$1>(tab: ExperimentalPluginFixedTabReference<Target>): ExperimentalFixedTabTargetState<Target> | null;
20021
19888
  useComposer(): PluginComposerApi;
19889
+ /**
19890
+ * Every composer on screen that plugin composer customizations mount in,
19891
+ * oldest first: the thread page's composer, a `ThreadChat`'s composer, the
19892
+ * new-thread composer and open queued-message editors. Use it from a panel
19893
+ * or page that writes into a composer the user picks — label each by its
19894
+ * `scope`, then call `insert`, `focus` or `submit` on the chosen handle.
19895
+ *
19896
+ * Each handle is stable while its composer stays on screen and follows the
19897
+ * same lifetime rule as `useComposer()`. `setTextEffect` and `setInputLock`
19898
+ * have no effect here; call them from a composer slot's `useComposer()`.
19899
+ * The calling component re-renders when the list or any listed draft
19900
+ * changes.
19901
+ */
19902
+ useComposers(): readonly PluginComposerApi[];
20022
19903
  /**
20023
19904
  * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).
20024
19905
  * Reads the host's own cache and realtime subscriptions, so it costs no
@@ -20079,7 +19960,7 @@ interface PluginSdkApp {
20079
19960
  experimental_useSidebarNavigationSplit(itemId: string, options?: ExperimentalSidebarNavigationSplitOptions): ExperimentalSidebarNavigationSplit;
20080
19961
  /**
20081
19962
  * bb's artwork for a navigation item's icon: bb's glyphs for its own items,
20082
- * and the contributing plugin's branding for plugin panels. Experimental:
19963
+ * and the panel's explicit icon, falling back to plugin branding, for plugin panels. Experimental:
20083
19964
  * see docs/api_to_audit.md.
20084
19965
  */
20085
19966
  experimental_SidebarNavigationIcon: ComponentType<ExperimentalSidebarNavigationIconProps>;
@@ -20239,7 +20120,6 @@ interface PluginSdkApp {
20239
20120
  * docs/api_to_audit.md.
20240
20121
  */
20241
20122
  experimental_Diff: ComponentType<DiffProps>;
20242
- useComposerView(): ComposerView;
20243
20123
  }
20244
20124
 
20245
20125
  declare const experimental_Icon: react.ComponentType<ExperimentalIconProps>;
@@ -20268,7 +20148,7 @@ declare const useBbNavigate: () => BbNavigate;
20268
20148
  declare const experimental_useAppPanel: () => ExperimentalAppPanel;
20269
20149
  declare const experimental_useFixedTabTarget: <Target extends JsonValue$1>(tab: ExperimentalPluginFixedTabReference<Target>) => ExperimentalFixedTabTargetState<Target> | null;
20270
20150
  declare const useComposer: () => PluginComposerApi;
20271
- declare const useComposerView: () => ComposerView;
20151
+ declare const useComposers: () => readonly PluginComposerApi[];
20272
20152
  declare const experimental_useSidebarThreads: (options?: {
20273
20153
  experimental_lifecycles: readonly ("active" | "archived")[];
20274
20154
  }) => PluginSidebarThreadsState;
@@ -20290,5 +20170,5 @@ declare const useSdk: () => PluginBrowserBbSdk;
20290
20170
  declare const experimental_useProviders: () => PluginProvidersState;
20291
20171
  declare const experimental_useCodeTheme: () => PluginCodeThemeState;
20292
20172
 
20293
- export { Markdown, ThreadChat, ThreadTitle, UrlLink, definePluginApp, experimental_BranchPicker, experimental_Diff, experimental_FileLink, experimental_Icon, experimental_NewThreadComposer, experimental_PermissionModePicker, experimental_ProviderIcon, experimental_ProviderModelPicker, experimental_SidebarNavigationIcon, experimental_SourceCode, experimental_useAppPanel, experimental_useBranches, experimental_useCheckoutState, experimental_useCodeTheme, experimental_useFixedTabTarget, experimental_usePluginId, experimental_useProviders, experimental_useQuestionFormHost, experimental_useSidebarNavigation, experimental_useSidebarNavigationSplit, experimental_useSidebarThreadActions, experimental_useSidebarThreadPullRequest, experimental_useSidebarThreadSplit, experimental_useSidebarThreads, useBbContext, useBbNavigate, useComposer, useComposerView, useEnvironmentProviders, useRealtime, useRealtimeConnectionState, useRpc, useSdk, useSettings, useSidebarSplitLayout, useSidebarThreadDraft, useSidebarThreadDraftIds, useSidebarThreadRowStatus, useSidebarThreadRowStatuses, useSidebarThreadShortcut };
20294
- export type { BbContext, BbNavigate, BranchPickerProps, BranchesState, CheckoutState, CodeOverflowMode, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, DiffProps, DiffViewMode, ExperimentalAppIcons, ExperimentalAppOverlayProps, ExperimentalAppOverlayRegistration, ExperimentalAppPanel, ExperimentalAppPanelSurface, ExperimentalComposerSelection, ExperimentalComposerSubmitOptions, ExperimentalDiffFileContent, ExperimentalDiffFullFileContents, ExperimentalFileLinkProps, ExperimentalFileLocation, ExperimentalFileOpenOptions, ExperimentalFixedTabTargetContract, ExperimentalFixedTabTargetState, ExperimentalIconProps, ExperimentalIconRegistration, ExperimentalLiveFileTarget, ExperimentalOpenFixedTabOptions, ExperimentalPermissionModePickerProps, ExperimentalPluginBrowserPage, ExperimentalPluginBrowserPageEvaluateOptions, ExperimentalPluginBrowserPageWorld, ExperimentalPluginBrowserToolbarActionProps, ExperimentalPluginBrowserToolbarActionRegistration, ExperimentalPluginFixedTabReference, ExperimentalProviderIconProps, ExperimentalProviderModelPickerProps, ExperimentalProviderModelPickerRouting, ExperimentalProviderModelPickerValue, ExperimentalQuestionFormHost, ExperimentalQuestionShortcut, ExperimentalSidebarFooter, ExperimentalSidebarFooterActionContext, ExperimentalSidebarFooterActionRegistration, ExperimentalSidebarFooterDisclosureController, ExperimentalSidebarFooterDisclosureProps, ExperimentalSidebarFooterDisclosureRegistration, ExperimentalSidebarFooterItemBase, ExperimentalSidebarFooterItemRegistration, ExperimentalSidebarHeaderProps, ExperimentalSidebarHeaderRegistration, ExperimentalSidebarNavigationAction, ExperimentalSidebarNavigationActions, ExperimentalSidebarNavigationActivationOptions, ExperimentalSidebarNavigationIcon, ExperimentalSidebarNavigationIconProps, ExperimentalSidebarNavigationItem, ExperimentalSidebarNavigationProps, ExperimentalSidebarNavigationRegistration, ExperimentalSidebarNavigationShortcut, ExperimentalSidebarNavigationSplit, ExperimentalSidebarNavigationSplitOptions, ExperimentalSidebarNavigationState, JsonValue$1 as JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAppBuilder, PluginAppCommands, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBoundThreadsArea, PluginBrowserBbSdk, PluginCodeThemeData, PluginCodeThemeState, PluginCodeThemeTokenRule, PluginCommandContext, PluginCommandRegistration, PluginCommandShortcut, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginDiffRendererProps, PluginDiffRendererRegistration, PluginEnvironmentProvider, PluginEnvironmentProviderInputsChange, PluginEnvironmentProviderInputsProps, PluginEnvironmentProviderInputsRegistration, PluginEnvironmentProvidersState, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginFixedTabDeclaration, PluginFixedTabRegistration, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMachineProviderInputsChange, PluginMachineProviderInputsProps, PluginMachineProviderInputsRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginNewThreadPanelActionContext, PluginNewThreadPanelActionRegistration, PluginNewThreadPanelProps, PluginPanelActionOpenOptions, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginProviderIconRegistration, PluginProvidersState, PluginRealtimeConnectionState, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSection, PluginSidebarSplitLayout, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadDraftState, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadRowStatus, PluginSidebarThreadShortcut, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSourceCodeRendererProps, PluginSourceCodeRendererRegistration, PluginTargetedPanelActionOpenOptions, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginThreadTitleProps, PluginTimelineRendererProps, PluginTimelineRendererRegistration, PluginTimelineRendererRow, PluginTimelineRowPresentation, PluginTimelineRowStatus, ReadonlyJsonValue, SourceCodeLineRange, SourceCodeProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps, UrlLinkProps, UseBranchesArgs, UseCheckoutStateArgs };
20173
+ export { Markdown, ThreadChat, ThreadTitle, UrlLink, definePluginApp, experimental_BranchPicker, experimental_Diff, experimental_FileLink, experimental_Icon, experimental_NewThreadComposer, experimental_PermissionModePicker, experimental_ProviderIcon, experimental_ProviderModelPicker, experimental_SidebarNavigationIcon, experimental_SourceCode, experimental_useAppPanel, experimental_useBranches, experimental_useCheckoutState, experimental_useCodeTheme, experimental_useFixedTabTarget, experimental_usePluginId, experimental_useProviders, experimental_useQuestionFormHost, experimental_useSidebarNavigation, experimental_useSidebarNavigationSplit, experimental_useSidebarThreadActions, experimental_useSidebarThreadPullRequest, experimental_useSidebarThreadSplit, experimental_useSidebarThreads, useBbContext, useBbNavigate, useComposer, useComposers, useEnvironmentProviders, useRealtime, useRealtimeConnectionState, useRpc, useSdk, useSettings, useSidebarSplitLayout, useSidebarThreadDraft, useSidebarThreadDraftIds, useSidebarThreadRowStatus, useSidebarThreadRowStatuses, useSidebarThreadShortcut };
20174
+ export type { BbContext, BbNavigate, BranchPickerProps, BranchesState, CheckoutState, CodeOverflowMode, ComposerAttachment, ComposerCustomization, ComposerDraft, ComposerDraftReplacement, ComposerDraftSnapshot, ComposerInsertOptions, ComposerInsertPart, ComposerMention, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerSelection, ComposerSendMenuItem, ComposerSubmitOptions, DiffProps, DiffViewMode, ExperimentalAppIcons, ExperimentalAppOverlayProps, ExperimentalAppOverlayRegistration, ExperimentalAppPanel, ExperimentalAppPanelSurface, ExperimentalDiffFileContent, ExperimentalDiffFullFileContents, ExperimentalFileLinkProps, ExperimentalFileLocation, ExperimentalFileOpenOptions, ExperimentalFixedTabTargetContract, ExperimentalFixedTabTargetState, ExperimentalIconProps, ExperimentalIconRegistration, ExperimentalLiveFileTarget, ExperimentalOpenFixedTabOptions, ExperimentalPermissionModePickerProps, ExperimentalPluginBrowserPage, ExperimentalPluginBrowserPageEvaluateOptions, ExperimentalPluginBrowserPageWorld, ExperimentalPluginBrowserToolbarActionProps, ExperimentalPluginBrowserToolbarActionRegistration, ExperimentalPluginFixedTabReference, ExperimentalProviderIconProps, ExperimentalProviderModelPickerProps, ExperimentalProviderModelPickerRouting, ExperimentalProviderModelPickerValue, ExperimentalQuestionFormHost, ExperimentalQuestionShortcut, ExperimentalSidebarFooter, ExperimentalSidebarFooterActionContext, ExperimentalSidebarFooterActionRegistration, ExperimentalSidebarFooterDisclosureController, ExperimentalSidebarFooterDisclosureProps, ExperimentalSidebarFooterDisclosureRegistration, ExperimentalSidebarFooterItemBase, ExperimentalSidebarFooterItemRegistration, ExperimentalSidebarHeaderProps, ExperimentalSidebarHeaderRegistration, ExperimentalSidebarNavigationAction, ExperimentalSidebarNavigationActions, ExperimentalSidebarNavigationActivationOptions, ExperimentalSidebarNavigationIcon, ExperimentalSidebarNavigationIconProps, ExperimentalSidebarNavigationItem, ExperimentalSidebarNavigationProps, ExperimentalSidebarNavigationRegistration, ExperimentalSidebarNavigationShortcut, ExperimentalSidebarNavigationSplit, ExperimentalSidebarNavigationSplitOptions, ExperimentalSidebarNavigationState, JsonValue$1 as JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAppBuilder, PluginAppCommands, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBoundThreadsArea, PluginBrowserBbSdk, PluginCodeThemeData, PluginCodeThemeState, PluginCodeThemeTokenRule, PluginCommandContext, PluginCommandRegistration, PluginCommandShortcut, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginDiffRendererProps, PluginDiffRendererRegistration, PluginEnvironmentProvider, PluginEnvironmentProviderInputsChange, PluginEnvironmentProviderInputsProps, PluginEnvironmentProviderInputsRegistration, PluginEnvironmentProvidersState, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginFixedTabDeclaration, PluginFixedTabRegistration, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMachineProviderInputsChange, PluginMachineProviderInputsProps, PluginMachineProviderInputsRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginNewThreadPanelActionContext, PluginNewThreadPanelActionRegistration, PluginNewThreadPanelProps, PluginPanelActionOpenOptions, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginProviderIconRegistration, PluginProvidersState, PluginRealtimeConnectionState, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSection, PluginSidebarSplitLayout, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadDraftState, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadRowStatus, PluginSidebarThreadShortcut, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSourceCodeRendererProps, PluginSourceCodeRendererRegistration, PluginTargetedPanelActionOpenOptions, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginThreadTitleProps, PluginTimelineRendererProps, PluginTimelineRendererRegistration, PluginTimelineRendererRow, PluginTimelineRowPresentation, PluginTimelineRowStatus, ReadonlyJsonValue, SourceCodeLineRange, SourceCodeProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps, UrlLinkProps, UseBranchesArgs, UseCheckoutStateArgs };