@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.
@@ -234,6 +234,11 @@ declare const appKeybindingOverridesSchema: z$1.ZodArray<z$1.ZodObject<{
234
234
  "window.new": "window.new";
235
235
  "workspace.openPreferred": "workspace.openPreferred";
236
236
  }>, z$1.ZodTemplateLiteral<`plugin:${string}/${string}`>]>;
237
+ platform: z$1.ZodOptional<z$1.ZodEnum<{
238
+ linux: "linux";
239
+ mac: "mac";
240
+ windows: "windows";
241
+ }>>;
237
242
  shortcut: z$1.ZodNullable<z$1.ZodObject<{
238
243
  alt: z$1.ZodBoolean;
239
244
  control: z$1.ZodBoolean;
@@ -290,7 +295,6 @@ type AppThemeSelection = z$1.infer<typeof appThemeSelectionSchema>;
290
295
  declare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
291
296
  changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{
292
297
  "archived-changed": "archived-changed";
293
- "draft-changed": "draft-changed";
294
298
  "environment-changed": "environment-changed";
295
299
  "events-appended": "events-appended";
296
300
  "history-rewritten": "history-rewritten";
@@ -325,7 +329,6 @@ declare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
325
329
  latestAttentionAt: z$1.ZodNumber;
326
330
  runtime: z$1.ZodObject<{
327
331
  displayStatus: z$1.ZodEnum<{
328
- "host-reconnecting": "host-reconnecting";
329
332
  "waiting-for-host": "waiting-for-host";
330
333
  active: "active";
331
334
  error: "error";
@@ -335,7 +338,6 @@ declare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
335
338
  starting: "starting";
336
339
  stopping: "stopping";
337
340
  }>;
338
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
339
341
  }, z$1.core.$strip>;
340
342
  status: z$1.ZodEnum<{
341
343
  active: "active";
@@ -486,6 +488,7 @@ declare const environmentSchema: z$1.ZodObject<{
486
488
  type Environment = z$1.infer<typeof environmentSchema>;
487
489
 
488
490
  declare const experimentsSchema: z$1.ZodRecord<z$1.ZodEnum<{
491
+ androidTesting: "androidTesting";
489
492
  changelogPreview: "changelogPreview";
490
493
  legacyJitiPluginLoader: "legacyJitiPluginLoader";
491
494
  mobileApp: "mobileApp";
@@ -4260,7 +4263,6 @@ declare const threadTimelinePendingTodosSchema: z$1.ZodObject<{
4260
4263
  type ThreadTimelinePendingTodos = z$1.infer<typeof threadTimelinePendingTodosSchema>;
4261
4264
 
4262
4265
  declare const threadRuntimeDisplayStatusSchema: z$1.ZodEnum<{
4263
- "host-reconnecting": "host-reconnecting";
4264
4266
  "waiting-for-host": "waiting-for-host";
4265
4267
  active: "active";
4266
4268
  error: "error";
@@ -4953,7 +4955,6 @@ declare const projectWithThreadsResponseSchema: z$1.ZodObject<{
4953
4955
  }>;
4954
4956
  runtime: z$1.ZodObject<{
4955
4957
  displayStatus: z$1.ZodEnum<{
4956
- "host-reconnecting": "host-reconnecting";
4957
4958
  "waiting-for-host": "waiting-for-host";
4958
4959
  active: "active";
4959
4960
  error: "error";
@@ -4963,7 +4964,6 @@ declare const projectWithThreadsResponseSchema: z$1.ZodObject<{
4963
4964
  starting: "starting";
4964
4965
  stopping: "stopping";
4965
4966
  }>;
4966
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
4967
4967
  }, z$1.core.$strip>;
4968
4968
  sectionId: z$1.ZodNullable<z$1.ZodString>;
4969
4969
  sourceThreadId: z$1.ZodNullable<z$1.ZodString>;
@@ -5073,7 +5073,6 @@ declare const sidebarBootstrapResponseSchema: z$1.ZodObject<{
5073
5073
  }>;
5074
5074
  runtime: z$1.ZodObject<{
5075
5075
  displayStatus: z$1.ZodEnum<{
5076
- "host-reconnecting": "host-reconnecting";
5077
5076
  "waiting-for-host": "waiting-for-host";
5078
5077
  active: "active";
5079
5078
  error: "error";
@@ -5083,7 +5082,6 @@ declare const sidebarBootstrapResponseSchema: z$1.ZodObject<{
5083
5082
  starting: "starting";
5084
5083
  stopping: "stopping";
5085
5084
  }>;
5086
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
5087
5085
  }, z$1.core.$strip>;
5088
5086
  sectionId: z$1.ZodNullable<z$1.ZodString>;
5089
5087
  sourceThreadId: z$1.ZodNullable<z$1.ZodString>;
@@ -5191,7 +5189,6 @@ declare const sidebarBootstrapResponseSchema: z$1.ZodObject<{
5191
5189
  }>;
5192
5190
  runtime: z$1.ZodObject<{
5193
5191
  displayStatus: z$1.ZodEnum<{
5194
- "host-reconnecting": "host-reconnecting";
5195
5192
  "waiting-for-host": "waiting-for-host";
5196
5193
  active: "active";
5197
5194
  error: "error";
@@ -5201,7 +5198,6 @@ declare const sidebarBootstrapResponseSchema: z$1.ZodObject<{
5201
5198
  starting: "starting";
5202
5199
  stopping: "stopping";
5203
5200
  }>;
5204
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
5205
5201
  }, z$1.core.$strip>;
5206
5202
  sectionId: z$1.ZodNullable<z$1.ZodString>;
5207
5203
  sourceThreadId: z$1.ZodNullable<z$1.ZodString>;
@@ -10193,6 +10189,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10193
10189
  all: z$1.ZodArray<z$1.ZodEnum<{
10194
10190
  browserFocus: "browserFocus";
10195
10191
  editableFocus: "editableFocus";
10192
+ linuxPlatform: "linuxPlatform";
10196
10193
  macPlatform: "macPlatform";
10197
10194
  mainSurface: "mainSurface";
10198
10195
  modalOpen: "modalOpen";
@@ -10202,10 +10199,12 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10202
10199
  splitActive: "splitActive";
10203
10200
  terminalFocus: "terminalFocus";
10204
10201
  webSurface: "webSurface";
10202
+ windowsPlatform: "windowsPlatform";
10205
10203
  }>>;
10206
10204
  none: z$1.ZodArray<z$1.ZodEnum<{
10207
10205
  browserFocus: "browserFocus";
10208
10206
  editableFocus: "editableFocus";
10207
+ linuxPlatform: "linuxPlatform";
10209
10208
  macPlatform: "macPlatform";
10210
10209
  mainSurface: "mainSurface";
10211
10210
  modalOpen: "modalOpen";
@@ -10215,10 +10214,12 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10215
10214
  splitActive: "splitActive";
10216
10215
  terminalFocus: "terminalFocus";
10217
10216
  webSurface: "webSurface";
10217
+ windowsPlatform: "windowsPlatform";
10218
10218
  }>>;
10219
10219
  }, z$1.core.$strict>;
10220
10220
  }, z$1.core.$strict>>;
10221
10221
  experiments: z$1.ZodRecord<z$1.ZodEnum<{
10222
+ androidTesting: "androidTesting";
10222
10223
  changelogPreview: "changelogPreview";
10223
10224
  legacyJitiPluginLoader: "legacyJitiPluginLoader";
10224
10225
  mobileApp: "mobileApp";
@@ -10327,6 +10328,11 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10327
10328
  "window.new": "window.new";
10328
10329
  "workspace.openPreferred": "workspace.openPreferred";
10329
10330
  }>, z$1.ZodTemplateLiteral<`plugin:${string}/${string}`>]>;
10331
+ platform: z$1.ZodOptional<z$1.ZodEnum<{
10332
+ linux: "linux";
10333
+ mac: "mac";
10334
+ windows: "windows";
10335
+ }>>;
10330
10336
  shortcut: z$1.ZodNullable<z$1.ZodObject<{
10331
10337
  alt: z$1.ZodBoolean;
10332
10338
  control: z$1.ZodBoolean;
@@ -10427,6 +10433,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10427
10433
  all: z$1.ZodArray<z$1.ZodEnum<{
10428
10434
  browserFocus: "browserFocus";
10429
10435
  editableFocus: "editableFocus";
10436
+ linuxPlatform: "linuxPlatform";
10430
10437
  macPlatform: "macPlatform";
10431
10438
  mainSurface: "mainSurface";
10432
10439
  modalOpen: "modalOpen";
@@ -10436,10 +10443,12 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10436
10443
  splitActive: "splitActive";
10437
10444
  terminalFocus: "terminalFocus";
10438
10445
  webSurface: "webSurface";
10446
+ windowsPlatform: "windowsPlatform";
10439
10447
  }>>;
10440
10448
  none: z$1.ZodArray<z$1.ZodEnum<{
10441
10449
  browserFocus: "browserFocus";
10442
10450
  editableFocus: "editableFocus";
10451
+ linuxPlatform: "linuxPlatform";
10443
10452
  macPlatform: "macPlatform";
10444
10453
  mainSurface: "mainSurface";
10445
10454
  modalOpen: "modalOpen";
@@ -10449,6 +10458,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10449
10458
  splitActive: "splitActive";
10450
10459
  terminalFocus: "terminalFocus";
10451
10460
  webSurface: "webSurface";
10461
+ windowsPlatform: "windowsPlatform";
10452
10462
  }>>;
10453
10463
  }, z$1.core.$strict>;
10454
10464
  }, z$1.core.$strict>>;
@@ -10716,6 +10726,27 @@ declare const systemMachineProviderSchema: z$1.ZodObject<{
10716
10726
  supportsSuspend: z$1.ZodBoolean;
10717
10727
  }, z$1.core.$strip>;
10718
10728
  type SystemMachineProvider = z$1.infer<typeof systemMachineProviderSchema>;
10729
+ declare const androidAppArtifactSchema: z$1.ZodObject<{
10730
+ sha256: z$1.ZodString;
10731
+ size: z$1.ZodNumber;
10732
+ version: z$1.ZodString;
10733
+ versionCode: z$1.ZodNumber;
10734
+ }, z$1.core.$strip>;
10735
+ type AndroidAppArtifact = z$1.infer<typeof androidAppArtifactSchema>;
10736
+ type SystemAndroidAppResponse = AndroidAppArtifact | null;
10737
+ declare const androidAppPrepareRequestSchema: z$1.ZodObject<{
10738
+ source: z$1.ZodEnum<{
10739
+ github: "github";
10740
+ local: "local";
10741
+ }>;
10742
+ }, z$1.core.$strip>;
10743
+ type AndroidAppPrepareRequest = z$1.infer<typeof androidAppPrepareRequestSchema>;
10744
+ interface AndroidAppPreparation {
10745
+ status: "failed" | "idle" | "preparing" | "ready";
10746
+ source: "github" | "local" | null;
10747
+ message: string;
10748
+ artifact: AndroidAppArtifact | null;
10749
+ }
10719
10750
 
10720
10751
  interface UiPreferencesResponse {
10721
10752
  preferences: UiPreferenceEntries;
@@ -12034,7 +12065,6 @@ declare const createExecutionInputSourcesSchema: z$1.ZodObject<{
12034
12065
  }, z$1.core.$strict>;
12035
12066
  type CreateExecutionInputSources = z$1.infer<typeof createExecutionInputSourcesSchema>;
12036
12067
  declare const createThreadRequestSchema: z$1.ZodObject<{
12037
- draft: z$1.ZodOptional<z$1.ZodBoolean>;
12038
12068
  environment: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
12039
12069
  environmentId: z$1.ZodString;
12040
12070
  type: z$1.ZodLiteral<"reuse">;
@@ -12199,6 +12229,7 @@ declare const createThreadRequestSchema: z$1.ZodObject<{
12199
12229
  auto: "auto";
12200
12230
  full: "full";
12201
12231
  }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>;
12232
+ pinned: z$1.ZodOptional<z$1.ZodBoolean>;
12202
12233
  pluginMetadata: z$1.ZodOptional<z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>>;
12203
12234
  pluginSubmission: z$1.ZodOptional<z$1.ZodObject<{
12204
12235
  data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;
@@ -13069,91 +13100,6 @@ declare const createQueuedMessageRequestSchema: z$1.ZodObject<{
13069
13100
  }>>;
13070
13101
  }, z$1.core.$strip>;
13071
13102
  type CreateQueuedMessageRequest = z$1.infer<typeof createQueuedMessageRequestSchema>;
13072
- declare const updateThreadDraftRequestSchema: z$1.ZodObject<{
13073
- input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
13074
- mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
13075
- end: z$1.ZodNumber;
13076
- resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
13077
- kind: z$1.ZodLiteral<"thread">;
13078
- label: z$1.ZodString;
13079
- projectId: z$1.ZodOptional<z$1.ZodString>;
13080
- threadId: z$1.ZodString;
13081
- }, z$1.core.$strip>, z$1.ZodObject<{
13082
- kind: z$1.ZodLiteral<"project">;
13083
- label: z$1.ZodString;
13084
- projectId: z$1.ZodString;
13085
- }, z$1.core.$strip>, z$1.ZodObject<{
13086
- kind: z$1.ZodLiteral<"section">;
13087
- label: z$1.ZodString;
13088
- sectionId: z$1.ZodString;
13089
- }, z$1.core.$strip>, z$1.ZodObject<{
13090
- entryKind: z$1.ZodEnum<{
13091
- directory: "directory";
13092
- file: "file";
13093
- }>;
13094
- kind: z$1.ZodLiteral<"path">;
13095
- label: z$1.ZodString;
13096
- path: z$1.ZodString;
13097
- source: z$1.ZodEnum<{
13098
- "thread-storage": "thread-storage";
13099
- workspace: "workspace";
13100
- }>;
13101
- }, z$1.core.$strip>, z$1.ZodObject<{
13102
- argumentHint: z$1.ZodNullable<z$1.ZodString>;
13103
- kind: z$1.ZodLiteral<"command">;
13104
- label: z$1.ZodString;
13105
- name: z$1.ZodString;
13106
- origin: z$1.ZodEnum<{
13107
- builtin: "builtin";
13108
- project: "project";
13109
- user: "user";
13110
- }>;
13111
- source: z$1.ZodEnum<{
13112
- command: "command";
13113
- skill: "skill";
13114
- }>;
13115
- trigger: z$1.ZodEnum<{
13116
- "/": "/";
13117
- $: "$";
13118
- }>;
13119
- }, z$1.core.$strip>, z$1.ZodObject<{
13120
- icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;
13121
- itemId: z$1.ZodString;
13122
- kind: z$1.ZodLiteral<"plugin">;
13123
- label: z$1.ZodString;
13124
- pluginId: z$1.ZodString;
13125
- }, z$1.core.$strip>], "kind">>;
13126
- start: z$1.ZodNumber;
13127
- }, z$1.core.$strip>>>;
13128
- text: z$1.ZodString;
13129
- type: z$1.ZodLiteral<"text">;
13130
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13131
- "agent-only": "agent-only";
13132
- }>>;
13133
- }, z$1.core.$strip>, z$1.ZodObject<{
13134
- type: z$1.ZodLiteral<"image">;
13135
- url: z$1.ZodString;
13136
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13137
- "agent-only": "agent-only";
13138
- }>>;
13139
- }, z$1.core.$strip>, z$1.ZodObject<{
13140
- path: z$1.ZodString;
13141
- type: z$1.ZodLiteral<"localImage">;
13142
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13143
- "agent-only": "agent-only";
13144
- }>>;
13145
- }, z$1.core.$strip>, z$1.ZodObject<{
13146
- mimeType: z$1.ZodOptional<z$1.ZodString>;
13147
- name: z$1.ZodOptional<z$1.ZodString>;
13148
- path: z$1.ZodString;
13149
- sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;
13150
- type: z$1.ZodLiteral<"localFile">;
13151
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13152
- "agent-only": "agent-only";
13153
- }>>;
13154
- }, z$1.core.$strip>], "type">>;
13155
- }, z$1.core.$strict>;
13156
- type UpdateThreadDraftRequest = z$1.infer<typeof updateThreadDraftRequestSchema>;
13157
13103
  declare const updateQueuedMessageRequestSchema: z$1.ZodObject<{
13158
13104
  expectedUpdatedAt: z$1.ZodNumber;
13159
13105
  input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
@@ -13463,7 +13409,6 @@ declare const threadListResponseSchema: z$1.ZodArray<z$1.ZodObject<{
13463
13409
  }>;
13464
13410
  runtime: z$1.ZodObject<{
13465
13411
  displayStatus: z$1.ZodEnum<{
13466
- "host-reconnecting": "host-reconnecting";
13467
13412
  "waiting-for-host": "waiting-for-host";
13468
13413
  active: "active";
13469
13414
  error: "error";
@@ -13473,7 +13418,6 @@ declare const threadListResponseSchema: z$1.ZodArray<z$1.ZodObject<{
13473
13418
  starting: "starting";
13474
13419
  stopping: "stopping";
13475
13420
  }>;
13476
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
13477
13421
  }, z$1.core.$strip>;
13478
13422
  sectionId: z$1.ZodNullable<z$1.ZodString>;
13479
13423
  sourceThreadId: z$1.ZodNullable<z$1.ZodString>;
@@ -13566,7 +13510,6 @@ declare const threadSearchResponseSchema: z$1.ZodObject<{
13566
13510
  }>;
13567
13511
  runtime: z$1.ZodObject<{
13568
13512
  displayStatus: z$1.ZodEnum<{
13569
- "host-reconnecting": "host-reconnecting";
13570
13513
  "waiting-for-host": "waiting-for-host";
13571
13514
  active: "active";
13572
13515
  error: "error";
@@ -13576,7 +13519,6 @@ declare const threadSearchResponseSchema: z$1.ZodObject<{
13576
13519
  starting: "starting";
13577
13520
  stopping: "stopping";
13578
13521
  }>;
13579
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
13580
13522
  }, z$1.core.$strip>;
13581
13523
  sectionId: z$1.ZodNullable<z$1.ZodString>;
13582
13524
  sourceThreadId: z$1.ZodNullable<z$1.ZodString>;
@@ -13660,7 +13602,6 @@ declare const threadSearchResponseSchema: z$1.ZodObject<{
13660
13602
  }>;
13661
13603
  runtime: z$1.ZodObject<{
13662
13604
  displayStatus: z$1.ZodEnum<{
13663
- "host-reconnecting": "host-reconnecting";
13664
13605
  "waiting-for-host": "waiting-for-host";
13665
13606
  active: "active";
13666
13607
  error: "error";
@@ -13670,7 +13611,6 @@ declare const threadSearchResponseSchema: z$1.ZodObject<{
13670
13611
  starting: "starting";
13671
13612
  stopping: "stopping";
13672
13613
  }>;
13673
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
13674
13614
  }, z$1.core.$strip>;
13675
13615
  sectionId: z$1.ZodNullable<z$1.ZodString>;
13676
13616
  sourceThreadId: z$1.ZodNullable<z$1.ZodString>;
@@ -13702,88 +13642,6 @@ declare const threadResponseSchema: z$1.ZodObject<{
13702
13642
  canSpawnChild: z$1.ZodBoolean;
13703
13643
  createdAt: z$1.ZodNumber;
13704
13644
  deletedAt: z$1.ZodNullable<z$1.ZodNumber>;
13705
- draft: z$1.ZodNullable<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
13706
- mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
13707
- end: z$1.ZodNumber;
13708
- resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
13709
- kind: z$1.ZodLiteral<"thread">;
13710
- label: z$1.ZodString;
13711
- projectId: z$1.ZodOptional<z$1.ZodString>;
13712
- threadId: z$1.ZodString;
13713
- }, z$1.core.$strip>, z$1.ZodObject<{
13714
- kind: z$1.ZodLiteral<"project">;
13715
- label: z$1.ZodString;
13716
- projectId: z$1.ZodString;
13717
- }, z$1.core.$strip>, z$1.ZodObject<{
13718
- kind: z$1.ZodLiteral<"section">;
13719
- label: z$1.ZodString;
13720
- sectionId: z$1.ZodString;
13721
- }, z$1.core.$strip>, z$1.ZodObject<{
13722
- entryKind: z$1.ZodEnum<{
13723
- directory: "directory";
13724
- file: "file";
13725
- }>;
13726
- kind: z$1.ZodLiteral<"path">;
13727
- label: z$1.ZodString;
13728
- path: z$1.ZodString;
13729
- source: z$1.ZodEnum<{
13730
- "thread-storage": "thread-storage";
13731
- workspace: "workspace";
13732
- }>;
13733
- }, z$1.core.$strip>, z$1.ZodObject<{
13734
- argumentHint: z$1.ZodNullable<z$1.ZodString>;
13735
- kind: z$1.ZodLiteral<"command">;
13736
- label: z$1.ZodString;
13737
- name: z$1.ZodString;
13738
- origin: z$1.ZodEnum<{
13739
- builtin: "builtin";
13740
- project: "project";
13741
- user: "user";
13742
- }>;
13743
- source: z$1.ZodEnum<{
13744
- command: "command";
13745
- skill: "skill";
13746
- }>;
13747
- trigger: z$1.ZodEnum<{
13748
- "/": "/";
13749
- $: "$";
13750
- }>;
13751
- }, z$1.core.$strip>, z$1.ZodObject<{
13752
- icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;
13753
- itemId: z$1.ZodString;
13754
- kind: z$1.ZodLiteral<"plugin">;
13755
- label: z$1.ZodString;
13756
- pluginId: z$1.ZodString;
13757
- }, z$1.core.$strip>], "kind">>;
13758
- start: z$1.ZodNumber;
13759
- }, z$1.core.$strip>>>;
13760
- text: z$1.ZodString;
13761
- type: z$1.ZodLiteral<"text">;
13762
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13763
- "agent-only": "agent-only";
13764
- }>>;
13765
- }, z$1.core.$strip>, z$1.ZodObject<{
13766
- type: z$1.ZodLiteral<"image">;
13767
- url: z$1.ZodString;
13768
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13769
- "agent-only": "agent-only";
13770
- }>>;
13771
- }, z$1.core.$strip>, z$1.ZodObject<{
13772
- path: z$1.ZodString;
13773
- type: z$1.ZodLiteral<"localImage">;
13774
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13775
- "agent-only": "agent-only";
13776
- }>>;
13777
- }, z$1.core.$strip>, z$1.ZodObject<{
13778
- mimeType: z$1.ZodOptional<z$1.ZodString>;
13779
- name: z$1.ZodOptional<z$1.ZodString>;
13780
- path: z$1.ZodString;
13781
- sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;
13782
- type: z$1.ZodLiteral<"localFile">;
13783
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13784
- "agent-only": "agent-only";
13785
- }>>;
13786
- }, z$1.core.$strip>], "type">>>;
13787
13645
  environmentId: z$1.ZodNullable<z$1.ZodString>;
13788
13646
  id: z$1.ZodString;
13789
13647
  lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;
@@ -13800,7 +13658,6 @@ declare const threadResponseSchema: z$1.ZodObject<{
13800
13658
  queuedMessageCount: z$1.ZodNumber;
13801
13659
  runtime: z$1.ZodObject<{
13802
13660
  displayStatus: z$1.ZodEnum<{
13803
- "host-reconnecting": "host-reconnecting";
13804
13661
  "waiting-for-host": "waiting-for-host";
13805
13662
  active: "active";
13806
13663
  error: "error";
@@ -13810,7 +13667,6 @@ declare const threadResponseSchema: z$1.ZodObject<{
13810
13667
  starting: "starting";
13811
13668
  stopping: "stopping";
13812
13669
  }>;
13813
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
13814
13670
  }, z$1.core.$strip>;
13815
13671
  sectionId: z$1.ZodNullable<z$1.ZodString>;
13816
13672
  sourceThreadId: z$1.ZodNullable<z$1.ZodString>;
@@ -13843,88 +13699,6 @@ declare const threadWithIncludesResponseSchema: z$1.ZodObject<{
13843
13699
  canSpawnChild: z$1.ZodBoolean;
13844
13700
  createdAt: z$1.ZodNumber;
13845
13701
  deletedAt: z$1.ZodNullable<z$1.ZodNumber>;
13846
- draft: z$1.ZodNullable<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
13847
- mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
13848
- end: z$1.ZodNumber;
13849
- resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
13850
- kind: z$1.ZodLiteral<"thread">;
13851
- label: z$1.ZodString;
13852
- projectId: z$1.ZodOptional<z$1.ZodString>;
13853
- threadId: z$1.ZodString;
13854
- }, z$1.core.$strip>, z$1.ZodObject<{
13855
- kind: z$1.ZodLiteral<"project">;
13856
- label: z$1.ZodString;
13857
- projectId: z$1.ZodString;
13858
- }, z$1.core.$strip>, z$1.ZodObject<{
13859
- kind: z$1.ZodLiteral<"section">;
13860
- label: z$1.ZodString;
13861
- sectionId: z$1.ZodString;
13862
- }, z$1.core.$strip>, z$1.ZodObject<{
13863
- entryKind: z$1.ZodEnum<{
13864
- directory: "directory";
13865
- file: "file";
13866
- }>;
13867
- kind: z$1.ZodLiteral<"path">;
13868
- label: z$1.ZodString;
13869
- path: z$1.ZodString;
13870
- source: z$1.ZodEnum<{
13871
- "thread-storage": "thread-storage";
13872
- workspace: "workspace";
13873
- }>;
13874
- }, z$1.core.$strip>, z$1.ZodObject<{
13875
- argumentHint: z$1.ZodNullable<z$1.ZodString>;
13876
- kind: z$1.ZodLiteral<"command">;
13877
- label: z$1.ZodString;
13878
- name: z$1.ZodString;
13879
- origin: z$1.ZodEnum<{
13880
- builtin: "builtin";
13881
- project: "project";
13882
- user: "user";
13883
- }>;
13884
- source: z$1.ZodEnum<{
13885
- command: "command";
13886
- skill: "skill";
13887
- }>;
13888
- trigger: z$1.ZodEnum<{
13889
- "/": "/";
13890
- $: "$";
13891
- }>;
13892
- }, z$1.core.$strip>, z$1.ZodObject<{
13893
- icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;
13894
- itemId: z$1.ZodString;
13895
- kind: z$1.ZodLiteral<"plugin">;
13896
- label: z$1.ZodString;
13897
- pluginId: z$1.ZodString;
13898
- }, z$1.core.$strip>], "kind">>;
13899
- start: z$1.ZodNumber;
13900
- }, z$1.core.$strip>>>;
13901
- text: z$1.ZodString;
13902
- type: z$1.ZodLiteral<"text">;
13903
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13904
- "agent-only": "agent-only";
13905
- }>>;
13906
- }, z$1.core.$strip>, z$1.ZodObject<{
13907
- type: z$1.ZodLiteral<"image">;
13908
- url: z$1.ZodString;
13909
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13910
- "agent-only": "agent-only";
13911
- }>>;
13912
- }, z$1.core.$strip>, z$1.ZodObject<{
13913
- path: z$1.ZodString;
13914
- type: z$1.ZodLiteral<"localImage">;
13915
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13916
- "agent-only": "agent-only";
13917
- }>>;
13918
- }, z$1.core.$strip>, z$1.ZodObject<{
13919
- mimeType: z$1.ZodOptional<z$1.ZodString>;
13920
- name: z$1.ZodOptional<z$1.ZodString>;
13921
- path: z$1.ZodString;
13922
- sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;
13923
- type: z$1.ZodLiteral<"localFile">;
13924
- visibility: z$1.ZodOptional<z$1.ZodEnum<{
13925
- "agent-only": "agent-only";
13926
- }>>;
13927
- }, z$1.core.$strip>], "type">>>;
13928
13702
  environment: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{
13929
13703
  baseBranch: z$1.ZodNullable<z$1.ZodString>;
13930
13704
  branchName: z$1.ZodNullable<z$1.ZodString>;
@@ -14051,7 +13825,6 @@ declare const threadWithIncludesResponseSchema: z$1.ZodObject<{
14051
13825
  queuedMessageCount: z$1.ZodNumber;
14052
13826
  runtime: z$1.ZodObject<{
14053
13827
  displayStatus: z$1.ZodEnum<{
14054
- "host-reconnecting": "host-reconnecting";
14055
13828
  "waiting-for-host": "waiting-for-host";
14056
13829
  active: "active";
14057
13830
  error: "error";
@@ -14061,7 +13834,6 @@ declare const threadWithIncludesResponseSchema: z$1.ZodObject<{
14061
13834
  starting: "starting";
14062
13835
  stopping: "stopping";
14063
13836
  }>;
14064
- hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;
14065
13837
  }, z$1.core.$strip>;
14066
13838
  sectionId: z$1.ZodNullable<z$1.ZodString>;
14067
13839
  sourceThreadId: z$1.ZodNullable<z$1.ZodString>;
@@ -15782,6 +15554,9 @@ interface EnvironmentListProvidersArgs {
15782
15554
  }
15783
15555
  type EnvironmentListProvidersResult = SystemEnvironmentProvider[];
15784
15556
  interface EnvironmentsArea {
15557
+ experimental_cleanup(args: EnvironmentActionArgs): Promise<{
15558
+ ok: true;
15559
+ }>;
15785
15560
  archiveThreads(args: EnvironmentActionArgs): Promise<EnvironmentArchiveThreadsResult>;
15786
15561
  commit(args: EnvironmentCommitArgs): Promise<EnvironmentCommitResult>;
15787
15562
  diff(args: EnvironmentDiffArgs): Promise<EnvironmentDiffResult>;
@@ -15942,6 +15717,7 @@ type HostDeleteResult = {
15942
15717
  type HostDirectoryResult = HostDirectoryListing;
15943
15718
  type HostGetResult = Host & {
15944
15719
  connectMachineId: string | null;
15720
+ threadStorageRootPath: string | null;
15945
15721
  };
15946
15722
  type HostEnrollmentCommandResult = HostEnrollmentCommandResponse;
15947
15723
  type HostReconnectResult = HostReconnectResponse;
@@ -16612,6 +16388,9 @@ interface SystemArea {
16612
16388
  testAiService(args: SystemTestAiServiceArgs): Promise<SystemTestAiServiceResult>;
16613
16389
  transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise<SystemVoiceTranscriptionResult>;
16614
16390
  uiPreferences: SystemUiPreferencesArea;
16391
+ androidAppPreparation(): Promise<AndroidAppPreparation>;
16392
+ prepareAndroidApp(input: AndroidAppPrepareRequest): Promise<AndroidAppPreparation>;
16393
+ androidApp(): Promise<SystemAndroidAppResponse>;
16615
16394
  updateExperiments(args: Experiments): Promise<SystemUpdateExperimentsResult>;
16616
16395
  updateGeneralSettings(args: AppSettingsUpdate): Promise<SystemUpdateGeneralSettingsResult>;
16617
16396
  updateKeyboardSettings(args: AppKeybindingOverrides): Promise<SystemUpdateKeyboardSettingsResult>;
@@ -16867,9 +16646,6 @@ interface ThreadForkArgs extends Omit<ForkThreadRequest, "origin" | "visibility"
16867
16646
  interface ThreadUpdateArgs extends UpdateThreadRequest {
16868
16647
  threadId: string;
16869
16648
  }
16870
- interface ThreadUpdateDraftArgs extends UpdateThreadDraftRequest {
16871
- threadId: string;
16872
- }
16873
16649
  interface ThreadPluginMetadataArgs {
16874
16650
  pluginId: string;
16875
16651
  signal?: AbortSignal;
@@ -17153,12 +16929,6 @@ interface ThreadsArea {
17153
16929
  unarchive(args: ThreadActionArgs): Promise<ThreadUnarchiveResult>;
17154
16930
  unpin(args: ThreadActionArgs): Promise<ThreadMutationResult>;
17155
16931
  update(args: ThreadUpdateArgs): Promise<ThreadMutationResult>;
17156
- /**
17157
- * Replace the thread's saved, unsent draft message. An empty `input` clears
17158
- * it. On a `pending` thread the draft also becomes the thread's fallback
17159
- * title. Sending a message does not clear the draft; clear it explicitly.
17160
- */
17161
- updateDraft(args: ThreadUpdateDraftArgs): Promise<ThreadMutationResult>;
17162
16932
  wait(args: ThreadWaitArgs): Promise<ThreadWaitResult>;
17163
16933
  }
17164
16934
 
@@ -17276,9 +17046,33 @@ interface PluginRpcMethodContract<InputSchema extends StandardSchemaV1 = Standar
17276
17046
  type PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract>>;
17277
17047
  /** Define a shared RPC contract while preserving exact method/schema types. */
17278
17048
  declare function defineRpcContract<const Contract extends PluginRpcContract>(contract: Contract): Contract;
17049
+ /**
17050
+ * Who invoked an rpc method. `plugin` means another loaded plugin (or this
17051
+ * one) called through its own `bb.sdk.plugins.callRpc`; the host verifies
17052
+ * that with a per-load token only the server knows. Every other caller — the
17053
+ * app, the `bb` CLI, agents, and bb itself — is `client`.
17054
+ */
17055
+ type ExperimentalPluginRpcCaller = {
17056
+ readonly kind: "plugin";
17057
+ readonly pluginId: string;
17058
+ } | {
17059
+ readonly kind: "client";
17060
+ };
17061
+ /** Second argument of every rpc handler. */
17062
+ interface ExperimentalPluginRpcHandlerContext {
17063
+ readonly experimental_caller: ExperimentalPluginRpcCaller;
17064
+ }
17279
17065
  type PluginRpcHandlers<Contract extends PluginRpcContract> = {
17280
17066
  [Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method]["input"]>) => StandardSchemaV1InferInput<Contract[Method]["output"]> | Promise<StandardSchemaV1InferInput<Contract[Method]["output"]>>;
17281
17067
  };
17068
+ /**
17069
+ * Handlers as `bb.rpc.register` calls them: the validated input, then the
17070
+ * call's context. A `PluginRpcHandlers` map is assignable to this type, so
17071
+ * handlers that ignore the context keep their one-argument signature.
17072
+ */
17073
+ type ExperimentalPluginRpcHandlersWithContext<Contract extends PluginRpcContract> = {
17074
+ [Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method]["input"]>, context: ExperimentalPluginRpcHandlerContext) => StandardSchemaV1InferInput<Contract[Method]["output"]> | Promise<StandardSchemaV1InferInput<Contract[Method]["output"]>>;
17075
+ };
17282
17076
  type PluginRpcCallInput<Method extends PluginRpcMethodContract> = StandardSchemaV1InferInput<Method["input"]>;
17283
17077
  type PluginRpcCallArgs<Method extends PluginRpcMethodContract> = null extends PluginRpcCallInput<Method> ? [input?: PluginRpcCallInput<Method>] : [input: PluginRpcCallInput<Method>];
17284
17078
  type PluginRpcResult<Method extends PluginRpcMethodContract> = StandardSchemaV1InferOutput<Method["output"]>;
@@ -17419,7 +17213,7 @@ type ExperimentalSidebarNavigationAction = {
17419
17213
  /**
17420
17214
  * Semantic icon identity for one sidebar navigation item. Render it with
17421
17215
  * {@link PluginSdkApp.experimental_SidebarNavigationIcon} to match bb's
17422
- * artwork, including plugin branding.
17216
+ * artwork, including panel icons with plugin branding as their fallback.
17423
17217
  */
17424
17218
  type ExperimentalSidebarNavigationIcon = {
17425
17219
  kind: "host";
@@ -17945,6 +17739,7 @@ type ExperimentalPluginFixedTabReference<Target extends JsonValue = never> = {
17945
17739
  /** A fixed tab declared by a plugin nav panel. */
17946
17740
  type PluginFixedTabRegistration<Target extends JsonValue = never> = ExperimentalPluginFixedTabReference<Target> & {
17947
17741
  title: string;
17742
+ /** Resolved names take precedence over plugin branding; unknown names fall back to branding. */
17948
17743
  icon: BbIconName;
17949
17744
  component: ComponentType<PluginNavPanelProps>;
17950
17745
  /** `flush` lets the component own padding and scrolling. */
@@ -17956,6 +17751,7 @@ interface PluginNavPanelRegistration {
17956
17751
  /** Unique within the plugin; letters, digits, `-`, `_`. */
17957
17752
  id: string;
17958
17753
  title: string;
17754
+ /** Resolved names take precedence over plugin branding in navigation and the header; unknown names fall back to branding. */
17959
17755
  icon: BbIconName;
17960
17756
  /** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */
17961
17757
  path: string;
@@ -18039,8 +17835,8 @@ interface PluginThreadPanelActionRegistration {
18039
17835
  /** Label of the action row in the panel's new-tab launcher. */
18040
17836
  title: string;
18041
17837
  /**
18042
- * Drawn only when the manifest declares no `bb.branding.icon`; the launcher
18043
- * row and opened tabs prefer that over this hint.
17838
+ * Resolved names take precedence over plugin branding in the launcher and
17839
+ * opened tabs. Omitted or unknown names fall back to plugin branding.
18044
17840
  */
18045
17841
  icon?: BbIconName;
18046
17842
  /** Rendered inside every panel tab this action opens. */
@@ -18079,7 +17875,7 @@ interface PluginNewThreadPanelActionRegistration {
18079
17875
  id: string;
18080
17876
  /** Label of the action row in the panel's new-tab launcher. */
18081
17877
  title: string;
18082
- /** Drawn only when the manifest declares no `bb.branding.icon`. */
17878
+ /** Resolved names take precedence over plugin branding; omitted or unknown names fall back to branding. */
18083
17879
  icon?: BbIconName;
18084
17880
  /** Rendered inside every panel tab this action opens. */
18085
17881
  component: ComponentType<PluginNewThreadPanelProps>;
@@ -18124,7 +17920,7 @@ interface PluginSidebarFooterActionRegistration {
18124
17920
  id: string;
18125
17921
  /** Tooltip and accessible label for the icon button. */
18126
17922
  title: string;
18127
- /** Drawn only when the manifest declares no `bb.branding.icon`. */
17923
+ /** Resolved names take precedence over plugin branding; omitted or unknown names fall back to branding. */
18128
17924
  icon: BbIconName;
18129
17925
  /**
18130
17926
  * Runs when the user activates the action (e.g. call `openSettings()`,
@@ -18240,9 +18036,9 @@ interface PluginSidebarThread {
18240
18036
  */
18241
18037
  status: ThreadStatus;
18242
18038
  /**
18243
- * `status` refined by host and environment state: adds "provisioning",
18244
- * "host-reconnecting", and "waiting-for-host" for a thread whose machine is
18245
- * not ready. Treat an unknown value as `status`.
18039
+ * `status` refined by host and environment state: adds "provisioning" and
18040
+ * "waiting-for-host" for a thread whose machine is not ready. Treat an
18041
+ * unknown value as `status`.
18246
18042
  */
18247
18043
  runtimeStatus: ThreadRuntimeDisplayStatus;
18248
18044
  /**
@@ -18509,7 +18305,7 @@ interface PluginSidebarThreadDraftState {
18509
18305
  }
18510
18306
  /**
18511
18307
  * The status another plugin's app-wide script set on a thread's row through
18512
- * `useComposer().experimental_setThreadRowStatus` (see
18308
+ * the content-script context's `experimental_setThreadRowStatus` (see
18513
18309
  * {@link PluginSdkApp.useSidebarThreadRowStatus}). bb's row draws it in
18514
18310
  * place of the draft glyph while it is set; a replaced list should do the
18515
18311
  * same so a status set by, say, the drafts or workflows plugin does not
@@ -18549,6 +18345,9 @@ interface PluginSidebarThreadActions {
18549
18345
  * `sectionId` files the new thread under that section, and
18550
18346
  * `environmentId` reuses that environment (the "New thread in
18551
18347
  * environment" affordance), both exactly as bb's own list does.
18348
+ * `experimental_placement` explicitly selects the section and pin state,
18349
+ * overriding `sectionId`. Omitting placement starts unpinned, outside sections
18350
+ * unless `sectionId` is supplied; previous composer placement is cleared.
18552
18351
  * `hostId` selects a machine for a new environment when it
18553
18352
  * is known and supports an environment provider. `environmentId` wins when
18554
18353
  * both are supplied.
@@ -18556,6 +18355,10 @@ interface PluginSidebarThreadActions {
18556
18355
  openNewThread(options?: {
18557
18356
  projectId?: string;
18558
18357
  sectionId?: string;
18358
+ experimental_placement?: {
18359
+ sectionId: string | null;
18360
+ pinned: boolean;
18361
+ };
18559
18362
  environmentId?: string;
18560
18363
  hostId?: string;
18561
18364
  focusPrompt?: boolean;
@@ -18844,12 +18647,19 @@ interface PluginMessageActionContext {
18844
18647
  * is never thrown: the host logs it and reports it here.
18845
18648
  */
18846
18649
  openPanel(options: PluginTargetedPanelActionOpenOptions): boolean;
18650
+ /**
18651
+ * The composer of the thread the message is in, or null when that thread's
18652
+ * composer is not available on this surface. The same handle
18653
+ * `useComposer()` returns there.
18654
+ */
18655
+ composer: PluginComposerApi | null;
18847
18656
  }
18848
18657
  /**
18849
18658
  * An action on chat messages: an icon button in the per-message action bar
18850
18659
  * (user and assistant messages) and an entry in the assistant-message
18851
18660
  * text-selection menu. Host-rendered chrome — the plugin supplies title,
18852
- * icon hint, and `run` behavior only.
18661
+ * icon, and `run` behavior only. Resolved icon names take precedence over
18662
+ * plugin branding; omitted or unknown names fall back to branding.
18853
18663
  */
18854
18664
  interface PluginMessageActionRegistration {
18855
18665
  /** Unique within the plugin; letters, digits, `-`, `_`. */
@@ -19359,12 +19169,6 @@ type PluginComposerScope = {
19359
19169
  kind: "queued-message";
19360
19170
  threadId: string;
19361
19171
  queuedMessageId: string;
19362
- } | {
19363
- kind: "side-chat";
19364
- projectId: string;
19365
- parentThreadId: string;
19366
- tabId: string;
19367
- childThreadId: string | null;
19368
19172
  } | {
19369
19173
  kind: "new-thread";
19370
19174
  /** Root compose's effective selected project; null only while unresolved. */
@@ -19387,35 +19191,39 @@ interface ComposerCustomization {
19387
19191
  component: ComponentType;
19388
19192
  }[];
19389
19193
  plusMenu?: readonly ComposerPlusMenuItem[];
19194
+ /** Host-rendered rows in the menu next to the composer's send button. */
19195
+ sendMenu?: readonly ComposerSendMenuItem[];
19390
19196
  richText?: ComposerRichTextSpec;
19391
19197
  }
19392
19198
  /** Host-rendered menu row in the composer's `+` menu. */
19393
19199
  interface ComposerPlusMenuItem {
19394
19200
  id: string;
19395
19201
  label: string;
19396
- /** Drawn only when the manifest declares no `bb.branding.icon`. */
19202
+ /** Takes precedence over the plugin's `bb.branding.icon`, which is drawn when this is omitted. */
19397
19203
  icon?: BbIconName;
19398
19204
  /** Accessible description for the host-rendered row. */
19399
19205
  description?: string;
19400
- disabled?: boolean | ((view: ComposerView) => boolean);
19206
+ disabled?: boolean | ((composer: PluginComposerApi) => boolean);
19401
19207
  run(context: {
19402
19208
  composer: PluginComposerApi;
19403
- view: ComposerView;
19404
19209
  }): void | Promise<void>;
19405
19210
  }
19406
- /** Reactive read-side of the composer a plugin surface is mounted in. */
19407
- interface ComposerView {
19408
- scope: PluginComposerScope;
19409
- layout: "compact" | "expanded" | "zen";
19410
- draft: {
19411
- text: string;
19412
- isEmpty: boolean;
19413
- attachmentCount: number;
19414
- };
19415
- run: {
19416
- isRunning: boolean;
19417
- isSubmitting: boolean;
19418
- };
19211
+ /**
19212
+ * Host-rendered row in the menu next to the composer's send button, for
19213
+ * alternatives to sending right away (save as a draft, send later). The menu
19214
+ * shows only while the composer can submit.
19215
+ */
19216
+ interface ComposerSendMenuItem {
19217
+ id: string;
19218
+ label: string;
19219
+ /** Takes precedence over the plugin's `bb.branding.icon`, which is drawn when this is omitted. */
19220
+ icon?: BbIconName;
19221
+ /** Accessible description for the host-rendered row. */
19222
+ description?: string;
19223
+ disabled?: boolean | ((composer: PluginComposerApi) => boolean);
19224
+ run(context: {
19225
+ composer: PluginComposerApi;
19226
+ }): void | Promise<void>;
19419
19227
  }
19420
19228
  interface ComposerRichTextSpec {
19421
19229
  /** Content-derived paint: match ranges receive `className`; text is never mutated. */
@@ -19428,18 +19236,80 @@ interface ComposerRichTextSpec {
19428
19236
  }[];
19429
19237
  className: string;
19430
19238
  }[];
19431
- /** Debounced, read-only observation of the structured draft. */
19432
- onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;
19433
19239
  }
19434
- interface ComposerStructuredDraft {
19240
+ /** The composer's text and the @-mention pills in it. */
19241
+ interface ComposerDraft {
19435
19242
  text: string;
19436
- mentions: readonly {
19437
- from: number;
19438
- to: number;
19439
- provider: string;
19440
- id: string;
19441
- label: string;
19442
- }[];
19243
+ mentions: readonly ComposerMention[];
19244
+ }
19245
+ /** An already uploaded attachment; paths retain their original project or thread ownership. */
19246
+ type ComposerAttachment = UploadedPromptAttachment;
19247
+ /** The complete current draft. Snapshots and their entries are immutable. */
19248
+ interface ComposerDraftSnapshot extends ComposerDraft {
19249
+ readonly attachments: readonly ComposerAttachment[];
19250
+ }
19251
+ /** Atomic text and mention replacement, optionally replacing uploaded attachments too. */
19252
+ interface ComposerDraftReplacement extends ComposerDraft {
19253
+ /** Omit to preserve attachments; supply an empty array to remove them all. Does not upload or copy files. */
19254
+ attachments?: readonly ComposerAttachment[];
19255
+ }
19256
+ /**
19257
+ * One @-mention pill: its range in `ComposerDraft.text` plus everything the
19258
+ * host needs to recreate it, so a mention read from `draft` can be passed
19259
+ * back to `insert` unchanged.
19260
+ */
19261
+ type ComposerMention = {
19262
+ from: number;
19263
+ to: number;
19264
+ label: string;
19265
+ } & ({
19266
+ kind: "thread";
19267
+ threadId: string;
19268
+ projectId?: string;
19269
+ } | {
19270
+ kind: "project";
19271
+ projectId: string;
19272
+ } | {
19273
+ kind: "section";
19274
+ sectionId: string;
19275
+ } | {
19276
+ kind: "path";
19277
+ path: string;
19278
+ source: "thread-storage" | "workspace";
19279
+ entryKind: "directory" | "file";
19280
+ } | {
19281
+ kind: "command";
19282
+ trigger: "$" | "/";
19283
+ name: string;
19284
+ source: "command" | "skill";
19285
+ origin: "builtin" | "project" | "user";
19286
+ argumentHint: string | null;
19287
+ } | {
19288
+ kind: "plugin";
19289
+ /** The plugin that owns the pill. */
19290
+ pluginId: string;
19291
+ /** The mention provider id that plugin registered. */
19292
+ provider: string;
19293
+ /** The item id the provider's `resolve` receives at send time. */
19294
+ id: string;
19295
+ icon?: string | null;
19296
+ });
19297
+ /**
19298
+ * What `insert` accepts: text, a mention read from `draft` (any kind), or one
19299
+ * of the calling plugin's own mentions (`{ provider, id, label }`, no `kind`).
19300
+ */
19301
+ type ComposerInsertPart = string | ComposerMention | PluginComposerMention;
19302
+ /** Where `insert` puts its content. */
19303
+ interface ComposerInsertOptions {
19304
+ /**
19305
+ * `"cursor"` (default) inserts at the editor's selection, replacing any
19306
+ * selected text; the selection is kept while focus is elsewhere, and the
19307
+ * composer must be on screen. `"end"` inserts after the last character and
19308
+ * also works for a composer that is not on screen.
19309
+ */
19310
+ at?: "cursor" | "end";
19311
+ /** Put the content on its own paragraph, adding a paragraph break before and after only where text is adjacent. */
19312
+ block?: boolean;
19443
19313
  }
19444
19314
  /** Host-rendered paint applied to the editable composer text. */
19445
19315
  interface PluginComposerTextEffect {
@@ -19471,31 +19341,77 @@ interface PluginComposerMention {
19471
19341
  label: string;
19472
19342
  }
19473
19343
  /**
19474
- * Programmatic access to the chat composer draft — the same shared draft the
19475
- * built-in "Add to chat" affordances (file preview, diff, terminal selections)
19476
- * write to. While a queued message is being edited, writes land in that
19477
- * message's inline editor. In a side chat, writes land in the visible side-chat
19478
- * draft. Otherwise, inside a thread context writes land in that thread's draft;
19479
- * anywhere else (nav panel, homepage section) they seed the new-thread composer
19480
- * draft, which persists until the user sends or clears it.
19344
+ * One composer: its state and the writes a plugin can make. `useComposer()`
19345
+ * returns the composer the calling surface belongs to — inside a composer
19346
+ * slot, that composer; in a thread's panels, that thread's composer;
19347
+ * elsewhere, the current route's draft (the thread in view, or the new-thread
19348
+ * draft).
19349
+ *
19350
+ * The handle is stable: the same composer returns the same object across
19351
+ * renders, and its methods always act on the current draft, so it is safe to
19352
+ * keep in effects, callbacks and async work. Its reactive fields (`text`,
19353
+ * `draft`, `selection`, `isEmpty`, …) re-render the calling component when they change;
19354
+ * depend on those fields, not on the handle, in memo dependency lists.
19355
+ *
19356
+ * A handle always writes to its own composer's draft. Thread and new-thread
19357
+ * drafts persist, so a write after the composer left the screen still lands
19358
+ * in that draft. When the draft no longer exists (a queued-message or
19359
+ * sent-message editor that closed), `insert`, `replace`, `removeMention`, `submit` and
19360
+ * `setSelection` throw "This composer is no longer available"; the older
19361
+ * text methods log a warning and do nothing.
19481
19362
  */
19482
19363
  interface PluginComposerApi {
19483
19364
  scope: PluginComposerScope;
19365
+ /**
19366
+ * Stable identity for this composer's draft: the same across remounts and
19367
+ * reloads for thread and new-thread composers (including a `ThreadChat`),
19368
+ * and per editing session for queued-message and sent-message editors.
19369
+ */
19370
+ readonly key: string;
19371
+ /** `"compact"` in the collapsed single-line layout, otherwise `"expanded"`. */
19372
+ readonly layout: "compact" | "expanded";
19373
+ /** The thread's agent is running or stopping. Always false in a new-thread composer. */
19374
+ readonly isRunning: boolean;
19375
+ /** The composer is submitting right now. */
19376
+ readonly isSubmitting: boolean;
19377
+ /**
19378
+ * Pressing Enter would not submit right now: the same decision as the
19379
+ * host's send button (empty draft, uploads in progress, loading, a
19380
+ * selection or setup missing, a pending interaction, voice input, …).
19381
+ */
19382
+ readonly isSubmittingBlocked: boolean;
19383
+ /** The host's message for why submitting is blocked, or null when it is not. */
19384
+ readonly submittingBlockedReason: string | null;
19385
+ /** No text (ignoring whitespace), no mentions and no attachments. */
19386
+ readonly isEmpty: boolean;
19387
+ /** Attachments that have finished uploading. */
19388
+ readonly attachmentCount: number;
19484
19389
  /** Current plain text for this composer scope. */
19485
19390
  readonly text: string;
19486
- /**
19487
- * Replace the draft's plain text. Attachments are preserved. Inline mentions
19488
- * outside the changed range are preserved and rebased; mentions overlapped
19489
- * by the replacement are removed because their text representation changed.
19490
- */
19491
- setText(next: string): void;
19492
- /**
19493
- * Replace the draft's plain text from the latest committed value. Uses the
19494
- * same structured-state reconciliation as `setText`.
19495
- */
19496
- updateText(updater: (current: string) => string): void;
19497
- /** Clear plain text without clearing independently attached files. */
19498
- clear(): void;
19391
+ /** The complete current draft, including uploaded attachments. Stable until the draft changes. */
19392
+ readonly draft: ComposerDraftSnapshot;
19393
+ /** Current picker values, or null when this composer has no pickers. Stable until a picker value changes. */
19394
+ readonly selection: ComposerSelection | null;
19395
+ /**
19396
+ * Replace text and mentions together in one committed change. An updater
19397
+ * receives the latest immutable snapshot, including attachments, and must
19398
+ * return its result synchronously. Returning that same snapshot is a no-op.
19399
+ * Omitted attachments are preserved; an explicit list replaces them, and
19400
+ * an empty list clears them. Does not infer or rebase mention ranges.
19401
+ * Ranges are non-overlapping UTF-16 offsets into the supplied text.
19402
+ * Invalid results, throwing updaters, and unavailable editors leave the
19403
+ * draft unchanged. Does not focus, submit, upload, or copy files between
19404
+ * projects. Use `insert` for insertion at the editor's cursor.
19405
+ */
19406
+ replace(next: ComposerDraftReplacement | ((current: ComposerDraftSnapshot) => ComposerDraftReplacement)): void;
19407
+ /**
19408
+ * Insert text and mentions. See {@link ComposerInsertOptions} for placement.
19409
+ * Mentions read from `draft` are recreated exactly; the calling plugin's
19410
+ * own `{ provider, id, label }` resolves through its mention provider.
19411
+ * Throws for another plugin's mention without `kind`, and for
19412
+ * `at: "cursor"` when the composer is not on screen.
19413
+ */
19414
+ insert(parts: ComposerInsertPart | readonly ComposerInsertPart[], options?: ComposerInsertOptions): void;
19499
19415
  /**
19500
19416
  * Apply a host-rendered effect to this composer's editable text, or clear it.
19501
19417
  * Effects are scoped to the calling plugin and automatically clear when the
@@ -19508,38 +19424,22 @@ interface PluginComposerApi {
19508
19424
  * scope changes.
19509
19425
  */
19510
19426
  setInputLock(locked: boolean): void;
19511
- /**
19512
- * Append text to the draft as a `> ` blockquote block and focus the
19513
- * composer. Blank text is a no-op. This is the "reference this selection
19514
- * in chat" primitive.
19515
- */
19516
- addQuote(text: string): void;
19517
- /**
19518
- * Insert an @-mention pill that resolves through this plugin's mention
19519
- * provider at send time — the durable way to reference an entity whose
19520
- * content should be fetched fresh when the message is sent.
19521
- */
19522
- insertMention(mention: PluginComposerMention): void;
19523
- /** Remove this plugin's matching mention pills and their text from the current draft. */
19524
- experimental_removeMention(mention: {
19525
- provider: string;
19526
- id: string;
19527
- }): void;
19528
19427
  /** Subscribe to successful local submissions in this composer scope, including accepted queued messages. Failed sends and draft clearing do not notify. Dispose on unmount. */
19529
- experimental_onSubmitted(listener: () => void): () => void;
19428
+ onSubmitted(listener: () => void): () => void;
19530
19429
  /** Focus the composer caret at the end of the draft. */
19531
19430
  focus(): void;
19532
19431
  /**
19533
- * Submit this composer's draft through the composer's OWN submit pipeline,
19534
- * optionally scheduling it or attaching plugin-owned dispatch data.
19535
- *
19536
- * This is a real submission, not a plugin-issued send: the host builds the
19537
- * request exactly as pressing Enter would, so the draft's attachments and
19432
+ * Submit this composer's draft exactly as pressing Enter would: the same
19433
+ * checks and the same action (send, or queue while the thread is busy; a
19434
+ * provider handoff creates a new thread). The draft's attachments and
19538
19435
  * @-mentions, and — in the new-thread composer — the provider, model,
19539
19436
  * reasoning level, service tier, permission mode and environment the user
19540
- * has selected on screen, all travel with it. A plugin cannot assemble that
19541
- * tuple itself, which is why sending from the backend instead would silently
19542
- * run the message with different settings than the ones in front of the user.
19437
+ * has selected on screen, all travel with it.
19438
+ *
19439
+ * While attachments are uploading it waits for them, then checks again; it
19440
+ * rejects if an upload fails. Otherwise, when submitting is blocked it
19441
+ * rejects with `submittingBlockedReason`, a message safe to show to the
19442
+ * user. The queued-message and sent-message editors save edits and reject.
19543
19443
  *
19544
19444
  * `sendAt` queues the submission until that time. `experimental_data` is
19545
19445
  * opaque JSON delivered to dispatch hooks together with the calling plugin's
@@ -19548,16 +19448,10 @@ interface PluginComposerApi {
19548
19448
  * later attempts; core does not persist or interpret the opaque data.
19549
19449
  *
19550
19450
  * Resolves once the host has accepted the submission and cleared the draft.
19551
- * Rejects when the composer refused to submit — a scope with no submit
19552
- * pipeline (a queued-message editor, a side chat), an empty draft, or a
19553
- * composer that is not ready (still loading its execution defaults, missing
19554
- * an environment). The rejection's message is safe to show to the user.
19555
19451
  * Failures of the underlying request are reported by bb's own submit error
19556
19452
  * handling and restore the draft, exactly as an interactive failure does.
19557
- *
19558
- * Experimental: see docs/api_to_audit.md.
19559
19453
  */
19560
- experimental_submit(options: ExperimentalComposerSubmitOptions): Promise<void>;
19454
+ submit(options: ComposerSubmitOptions): Promise<void>;
19561
19455
  /**
19562
19456
  * Set this composer's pickers as if each value had been picked by hand.
19563
19457
  *
@@ -19604,18 +19498,15 @@ interface PluginComposerApi {
19604
19498
  * mounted outside any composer), when the calling surface is no longer
19605
19499
  * active, and when a value is not a known reasoning level, service tier or
19606
19500
  * permission mode.
19607
- *
19608
- * Experimental: see docs/api_to_audit.md.
19609
19501
  */
19610
- experimental_setSelection(selection: ExperimentalComposerSelection): Promise<ExperimentalComposerSelection>;
19502
+ setSelection(selection: ComposerSelection): Promise<ComposerSelection>;
19611
19503
  }
19612
19504
  /**
19613
- * Picker values for `experimental_setSelection`, and the shape it resolves
19614
- * with. Field names match `NewThreadRequest` and the `default*` props of
19505
+ * Current picker values in `selection`, input for `setSelection`, and the shape it resolves with. Field names match `NewThreadRequest` and the `default*` props of
19615
19506
  * `experimental_NewThreadComposer`, so one routed decision can feed the
19616
19507
  * composer, the embedded composer and `bb.sdk.threads.spawn` alike.
19617
19508
  */
19618
- interface ExperimentalComposerSelection {
19509
+ interface ComposerSelection {
19619
19510
  /** New-thread composers only. BB's personal-project id means "Don't work in a project". */
19620
19511
  projectId?: string;
19621
19512
  /**
@@ -19636,13 +19527,13 @@ interface ExperimentalComposerSelection {
19636
19527
  permissionMode?: PermissionMode;
19637
19528
  }
19638
19529
  /**
19639
- * What `experimental_submit` does differently from pressing Enter.
19530
+ * What `submit` does differently from pressing Enter.
19640
19531
  *
19641
19532
  * `experimental_data` is opaque JSON delivered to dispatch hooks. The runtime
19642
19533
  * associates it with the calling plugin automatically for the initial
19643
19534
  * dispatch attempt.
19644
19535
  */
19645
- type ExperimentalComposerSubmitOptions = {
19536
+ type ComposerSubmitOptions = {
19646
19537
  sendAt: number;
19647
19538
  experimental_data?: JsonValue;
19648
19539
  } | {
@@ -19867,7 +19758,7 @@ interface NewThreadRequest {
19867
19758
  input: PromptInput[];
19868
19759
  /**
19869
19760
  * Epoch ms the first turn should dispatch at. Present only when the
19870
- * submission came from `useComposer().experimental_submit` — a scheduled
19761
+ * submission came from `useComposer().submit` — a scheduled
19871
19762
  * create — and absent otherwise, which is what makes an ordinary submission
19872
19763
  * start work at once. Forward it to `threads.spawn` unchanged: the thread is
19873
19764
  * created `pending` and its first message is queued as a row until then.
@@ -20171,6 +20062,20 @@ interface PluginSdkApp {
20171
20062
  /** Read or clear the owning tab's validated, session-scoped target. */
20172
20063
  experimental_useFixedTabTarget<Target extends JsonValue>(tab: ExperimentalPluginFixedTabReference<Target>): ExperimentalFixedTabTargetState<Target> | null;
20173
20064
  useComposer(): PluginComposerApi;
20065
+ /**
20066
+ * Every composer on screen that plugin composer customizations mount in,
20067
+ * oldest first: the thread page's composer, a `ThreadChat`'s composer, the
20068
+ * new-thread composer and open queued-message editors. Use it from a panel
20069
+ * or page that writes into a composer the user picks — label each by its
20070
+ * `scope`, then call `insert`, `focus` or `submit` on the chosen handle.
20071
+ *
20072
+ * Each handle is stable while its composer stays on screen and follows the
20073
+ * same lifetime rule as `useComposer()`. `setTextEffect` and `setInputLock`
20074
+ * have no effect here; call them from a composer slot's `useComposer()`.
20075
+ * The calling component re-renders when the list or any listed draft
20076
+ * changes.
20077
+ */
20078
+ useComposers(): readonly PluginComposerApi[];
20174
20079
  /**
20175
20080
  * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).
20176
20081
  * Reads the host's own cache and realtime subscriptions, so it costs no
@@ -20231,7 +20136,7 @@ interface PluginSdkApp {
20231
20136
  experimental_useSidebarNavigationSplit(itemId: string, options?: ExperimentalSidebarNavigationSplitOptions): ExperimentalSidebarNavigationSplit;
20232
20137
  /**
20233
20138
  * bb's artwork for a navigation item's icon: bb's glyphs for its own items,
20234
- * and the contributing plugin's branding for plugin panels. Experimental:
20139
+ * and the panel's explicit icon, falling back to plugin branding, for plugin panels. Experimental:
20235
20140
  * see docs/api_to_audit.md.
20236
20141
  */
20237
20142
  experimental_SidebarNavigationIcon: ComponentType<ExperimentalSidebarNavigationIconProps>;
@@ -20391,7 +20296,6 @@ interface PluginSdkApp {
20391
20296
  * docs/api_to_audit.md.
20392
20297
  */
20393
20298
  experimental_Diff: ComponentType<DiffProps>;
20394
- useComposerView(): ComposerView;
20395
20299
  }
20396
20300
 
20397
20301
  type PluginMachineProviderResource = Exclude<JsonValue$2, null>;
@@ -21291,7 +21195,7 @@ interface MessageDispatchHookContext {
21291
21195
  queuedMessages: ThreadQueuedMessage[];
21292
21196
  /**
21293
21197
  * Opaque JSON supplied by a plugin through the composer's
21294
- * `experimental_submit`, paired with that plugin's id. Null for ordinary
21198
+ * `submit`, paired with that plugin's id. Null for ordinary
21295
21199
  * submissions and queued re-attempts. Core does not persist or interpret
21296
21200
  * the data.
21297
21201
  */
@@ -21446,9 +21350,11 @@ interface PluginRpc {
21446
21350
  * `/api/v1/plugins/<id>/rpc/<method>` with "local" auth semantics. The
21447
21351
  * host validates input before invocation and output before strict JSON
21448
21352
  * serialization. The response is `{ ok: true, result }` or
21449
- * `{ ok: false, error: { code, message, issues? } }`.
21353
+ * `{ ok: false, error: { code, message, issues? } }`. Each handler gets
21354
+ * the call's context as its second argument; `experimental_caller` names
21355
+ * the plugin that called through `bb.sdk.plugins.callRpc`, or `client`.
21450
21356
  */
21451
- register<Contract extends PluginRpcContract>(contract: Contract, handlers: PluginRpcHandlers<Contract>, options?: {
21357
+ register<Contract extends PluginRpcContract>(contract: Contract, handlers: ExperimentalPluginRpcHandlersWithContext<Contract>, options?: {
21452
21358
  experimental_discoverable?: boolean;
21453
21359
  experimental_description?: string;
21454
21360
  }): void;
@@ -22242,8 +22148,9 @@ interface PluginMentionItem {
22242
22148
  subtitle?: string;
22243
22149
  /**
22244
22150
  * BB icon name: a built-in name, or a name the plugin's app bundle
22245
- * registered with `app.experimental_icons.register()`. The row prefers the
22246
- * plugin's own branding icon when it ships one; unknown names fall back to
22151
+ * registered with `app.experimental_icons.register()`. Resolved names take
22152
+ * precedence over plugin branding in menu rows, composer pills, and sent
22153
+ * messages. Omitted or unknown names fall back to plugin branding, then
22247
22154
  * the generic plugin icon.
22248
22155
  */
22249
22156
  icon?: string;
@@ -22803,4 +22710,4 @@ declare function cliCommand<const TOptions extends CliOptions = Record<string, n
22803
22710
  declare function defineCli(spec: PluginCliSpec): PluginCliRegistration;
22804
22711
 
22805
22712
  export { PLUGIN_CLI_OUTPUT_MAX_BYTES, PluginCliError, cliCommand, defineCli, defineRpcContract, experimental_defineHostEntry };
22806
- export type { BbContext, BbNavigate, BbPluginApi, BranchPickerProps, BranchesState, CheckoutState, CodeOverflowMode, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, DiffProps, DiffViewMode, ExperimentalAppIcons, ExperimentalAppOverlayProps, ExperimentalAppOverlayRegistration, ExperimentalAppPanel, ExperimentalAppPanelSurface, ExperimentalComposerSelection, ExperimentalComposerSubmitOptions, ExperimentalDesktopBrowserAcquireInput, ExperimentalDesktopBrowserCreateInput, ExperimentalDesktopBrowserLease, ExperimentalDesktopBrowserScope, ExperimentalDesktopBrowsersArea, ExperimentalDiffFileContent, ExperimentalDiffFullFileContents, ExperimentalFileLinkProps, ExperimentalFileLocation, ExperimentalFileOpenOptions, ExperimentalFixedTabTargetContract, ExperimentalFixedTabTargetState, ExperimentalHostCallOptions, ExperimentalHostClient, ExperimentalHostEntry, ExperimentalHostPaths, ExperimentalHostRpcContext, ExperimentalHostRpcHandlers, ExperimentalHostSignalContract, ExperimentalHostSignalEvent, ExperimentalHostSignals, ExperimentalHostWatchChange, ExperimentalHostWatchChangeType, ExperimentalHostWatchEvent, ExperimentalHostWatchListener, ExperimentalHostWatchOptions, ExperimentalHostWatchSubscription, ExperimentalHostWorkerLease, ExperimentalIconProps, ExperimentalIconRegistration, ExperimentalLiveFileTarget, ExperimentalOpenFixedTabOptions, ExperimentalPermissionModePickerProps, ExperimentalPluginBrowserPage, ExperimentalPluginBrowserPageEvaluateOptions, ExperimentalPluginBrowserPageWorld, ExperimentalPluginBrowserToolbarActionProps, ExperimentalPluginBrowserToolbarActionRegistration, ExperimentalPluginFixedTabReference, ExperimentalPluginMentionImage, ExperimentalPluginProviderEnvContext, ExperimentalPluginProviderEnvEntry, ExperimentalPluginProviderEnvHealth, ExperimentalPluginProviderEnvHealthContext, ExperimentalPluginWebSocket, ExperimentalPluginWebSocketContext, ExperimentalPluginWebSocketHandler, ExperimentalPluginWebSocketHandlers, 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, MachineBootstrapApi, MachineBootstrapRequest, MachineExecutor, MachineExecutorRequest, MarkdownProps, MessageDispatchHookContext, MessageDispatchHookDecision, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAiCompleteOptions, PluginAiServiceDeclaration, PluginAiServiceStatus, PluginAiServices, PluginAiTranscribeOptions, PluginAppBuilder, PluginAppCommands, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginBbSdk, PluginBoundThreadsArea, PluginBrowserBbSdk, PluginCli, PluginCliBooleanOption, PluginCliCommand, PluginCliCommandInfo, PluginCliConstraint, PluginCliContext, PluginCliDurationOption, PluginCliDurationUnit, PluginCliEnumOption, PluginCliErrorCode, PluginCliExecutionResult, PluginCliIntegerOption, PluginCliOption, PluginCliOptionValues, PluginCliOutputLimitError, PluginCliPositional, PluginCliPositionalValues, PluginCliRegistration, PluginCliResult, PluginCliRunInput, PluginCliSpec, PluginCliStringOption, PluginCodeThemeData, PluginCodeThemeState, PluginCodeThemeTokenRule, PluginCommandContext, PluginCommandRegistration, PluginCommandShortcut, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginDiffRendererProps, PluginDiffRendererRegistration, PluginDispatchAttemptKind, PluginDispatchEnvironmentIntent, PluginDispatchExecution, PluginDispatchExecutionSources, PluginDispatchInput, PluginEnvironmentProvider, PluginEnvironmentProviderDeclaration, PluginEnvironmentProviderInputsChange, PluginEnvironmentProviderInputsProps, PluginEnvironmentProviderInputsRegistration, PluginEnvironmentProviderRequirements, PluginEnvironmentProvidersState, PluginEnvironmentValidateDecision, PluginEnvironments, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginFixedTabDeclaration, PluginFixedTabRegistration, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHookHandler, PluginHookName, PluginHookSignatures, PluginHooks, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionDescription, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMachineProviderDeclaration, PluginMachineProviderInputsChange, PluginMachineProviderInputsProps, PluginMachineProviderInputsRegistration, PluginMachineValidateDecision, PluginMachines, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginNewThreadPanelActionContext, PluginNewThreadPanelActionRegistration, PluginNewThreadPanelProps, PluginPanelActionOpenOptions, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginProviderCapabilities, PluginProviderCompletedTurnDisplay, PluginProviderComposerAction, PluginProviderDeclaration, PluginProviderExtensionKindDeclaration, PluginProviderFallbackModel, PluginProviderIconRegistration, PluginProviderMaintenance, PluginProviderModelCatalogScope, PluginProviderNativeRootEntry, PluginProviderNativeRoots, PluginProviderOptionDescriptor, PluginProviderOptionsContext, PluginProviderPermissionMode, PluginProviderReasoningLevel, PluginProviderStrings, PluginProviders, PluginProvidersState, PluginRealtime, PluginRealtimeConnectionState, PluginRowLabels, PluginRowPresentation, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerAccess, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSection, PluginSidebarSplitLayout, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadDraftState, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadRowStatus, PluginSidebarThreadShortcut, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSourceCodeRendererProps, PluginSourceCodeRendererRegistration, PluginStatusApi, PluginStorage, PluginTargetedPanelActionOpenOptions, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginThreadTitleProps, PluginTimelineRendererProps, PluginTimelineRendererRegistration, PluginTimelineRendererRow, PluginTimelineRowPresentation, PluginTimelineRowStatus, PluginTurnFailedEvent, PluginUi, ReadonlyJsonValue, ServerAccessGrant, ServerAccessProviderDeclaration, SourceCodeLineRange, SourceCodeProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps, UrlLinkProps, UseBranchesArgs, UseCheckoutStateArgs };
22713
+ export type { BbContext, BbNavigate, BbPluginApi, BranchPickerProps, BranchesState, CheckoutState, CodeOverflowMode, ComposerAttachment, ComposerCustomization, ComposerDraft, ComposerDraftReplacement, ComposerDraftSnapshot, ComposerInsertOptions, ComposerInsertPart, ComposerMention, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerSelection, ComposerSendMenuItem, ComposerSubmitOptions, DiffProps, DiffViewMode, ExperimentalAppIcons, ExperimentalAppOverlayProps, ExperimentalAppOverlayRegistration, ExperimentalAppPanel, ExperimentalAppPanelSurface, ExperimentalDesktopBrowserAcquireInput, ExperimentalDesktopBrowserCreateInput, ExperimentalDesktopBrowserLease, ExperimentalDesktopBrowserScope, ExperimentalDesktopBrowsersArea, ExperimentalDiffFileContent, ExperimentalDiffFullFileContents, ExperimentalFileLinkProps, ExperimentalFileLocation, ExperimentalFileOpenOptions, ExperimentalFixedTabTargetContract, ExperimentalFixedTabTargetState, ExperimentalHostCallOptions, ExperimentalHostClient, ExperimentalHostEntry, ExperimentalHostPaths, ExperimentalHostRpcContext, ExperimentalHostRpcHandlers, ExperimentalHostSignalContract, ExperimentalHostSignalEvent, ExperimentalHostSignals, ExperimentalHostWatchChange, ExperimentalHostWatchChangeType, ExperimentalHostWatchEvent, ExperimentalHostWatchListener, ExperimentalHostWatchOptions, ExperimentalHostWatchSubscription, ExperimentalHostWorkerLease, ExperimentalIconProps, ExperimentalIconRegistration, ExperimentalLiveFileTarget, ExperimentalOpenFixedTabOptions, ExperimentalPermissionModePickerProps, ExperimentalPluginBrowserPage, ExperimentalPluginBrowserPageEvaluateOptions, ExperimentalPluginBrowserPageWorld, ExperimentalPluginBrowserToolbarActionProps, ExperimentalPluginBrowserToolbarActionRegistration, ExperimentalPluginFixedTabReference, ExperimentalPluginMentionImage, ExperimentalPluginProviderEnvContext, ExperimentalPluginProviderEnvEntry, ExperimentalPluginProviderEnvHealth, ExperimentalPluginProviderEnvHealthContext, ExperimentalPluginRpcCaller, ExperimentalPluginRpcHandlerContext, ExperimentalPluginRpcHandlersWithContext, ExperimentalPluginWebSocket, ExperimentalPluginWebSocketContext, ExperimentalPluginWebSocketHandler, ExperimentalPluginWebSocketHandlers, 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, MachineBootstrapApi, MachineBootstrapRequest, MachineExecutor, MachineExecutorRequest, MarkdownProps, MessageDispatchHookContext, MessageDispatchHookDecision, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAiCompleteOptions, PluginAiServiceDeclaration, PluginAiServiceStatus, PluginAiServices, PluginAiTranscribeOptions, PluginAppBuilder, PluginAppCommands, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginBbSdk, PluginBoundThreadsArea, PluginBrowserBbSdk, PluginCli, PluginCliBooleanOption, PluginCliCommand, PluginCliCommandInfo, PluginCliConstraint, PluginCliContext, PluginCliDurationOption, PluginCliDurationUnit, PluginCliEnumOption, PluginCliErrorCode, PluginCliExecutionResult, PluginCliIntegerOption, PluginCliOption, PluginCliOptionValues, PluginCliOutputLimitError, PluginCliPositional, PluginCliPositionalValues, PluginCliRegistration, PluginCliResult, PluginCliRunInput, PluginCliSpec, PluginCliStringOption, PluginCodeThemeData, PluginCodeThemeState, PluginCodeThemeTokenRule, PluginCommandContext, PluginCommandRegistration, PluginCommandShortcut, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginDiffRendererProps, PluginDiffRendererRegistration, PluginDispatchAttemptKind, PluginDispatchEnvironmentIntent, PluginDispatchExecution, PluginDispatchExecutionSources, PluginDispatchInput, PluginEnvironmentProvider, PluginEnvironmentProviderDeclaration, PluginEnvironmentProviderInputsChange, PluginEnvironmentProviderInputsProps, PluginEnvironmentProviderInputsRegistration, PluginEnvironmentProviderRequirements, PluginEnvironmentProvidersState, PluginEnvironmentValidateDecision, PluginEnvironments, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginFixedTabDeclaration, PluginFixedTabRegistration, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHookHandler, PluginHookName, PluginHookSignatures, PluginHooks, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionDescription, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMachineProviderDeclaration, PluginMachineProviderInputsChange, PluginMachineProviderInputsProps, PluginMachineProviderInputsRegistration, PluginMachineValidateDecision, PluginMachines, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginNewThreadPanelActionContext, PluginNewThreadPanelActionRegistration, PluginNewThreadPanelProps, PluginPanelActionOpenOptions, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginProviderCapabilities, PluginProviderCompletedTurnDisplay, PluginProviderComposerAction, PluginProviderDeclaration, PluginProviderExtensionKindDeclaration, PluginProviderFallbackModel, PluginProviderIconRegistration, PluginProviderMaintenance, PluginProviderModelCatalogScope, PluginProviderNativeRootEntry, PluginProviderNativeRoots, PluginProviderOptionDescriptor, PluginProviderOptionsContext, PluginProviderPermissionMode, PluginProviderReasoningLevel, PluginProviderStrings, PluginProviders, PluginProvidersState, PluginRealtime, PluginRealtimeConnectionState, PluginRowLabels, PluginRowPresentation, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerAccess, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSection, PluginSidebarSplitLayout, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadDraftState, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadRowStatus, PluginSidebarThreadShortcut, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSourceCodeRendererProps, PluginSourceCodeRendererRegistration, PluginStatusApi, PluginStorage, PluginTargetedPanelActionOpenOptions, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginThreadTitleProps, PluginTimelineRendererProps, PluginTimelineRendererRegistration, PluginTimelineRendererRow, PluginTimelineRowPresentation, PluginTimelineRowStatus, PluginTurnFailedEvent, PluginUi, ReadonlyJsonValue, ServerAccessGrant, ServerAccessProviderDeclaration, SourceCodeLineRange, SourceCodeProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps, UrlLinkProps, UseBranchesArgs, UseCheckoutStateArgs };