@get-bb/plugin-sdk 0.5.16 → 0.5.24

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.
@@ -211,6 +211,7 @@ declare const appKeybindingOverridesSchema: z$1.ZodArray<z$1.ZodObject<{
211
211
  "browser.focusLocation": "browser.focusLocation";
212
212
  "browser.reload": "browser.reload";
213
213
  "composer.focus": "composer.focus";
214
+ "dataDirectory.open": "dataDirectory.open";
214
215
  "diff.toggle": "diff.toggle";
215
216
  "file.quickOpen": "file.quickOpen";
216
217
  "logs.openServerDaemon": "logs.openServerDaemon";
@@ -429,6 +430,7 @@ declare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
429
430
  type: z$1.ZodLiteral<"changed">;
430
431
  }, z$1.core.$strict>, z$1.ZodObject<{
431
432
  changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{
433
+ "app-update-changed": "app-update-changed";
432
434
  "config-changed": "config-changed";
433
435
  "environment-availability-changed": "environment-availability-changed";
434
436
  "plugins-changed": "plugins-changed";
@@ -519,10 +521,8 @@ type Environment = z$1.infer<typeof environmentSchema>;
519
521
  declare const experimentsSchema: z$1.ZodRecord<z$1.ZodEnum<{
520
522
  changelogPreview: "changelogPreview";
521
523
  mobileApp: "mobileApp";
522
- multiMachinePicker: "multiMachinePicker";
523
524
  serverMove: "serverMove";
524
525
  sidebarProgressiveDisclosure: "sidebarProgressiveDisclosure";
525
- timelineWindowing: "timelineWindowing";
526
526
  }>, z$1.ZodBoolean>;
527
527
  type Experiments = z$1.infer<typeof experimentsSchema>;
528
528
 
@@ -8964,6 +8964,12 @@ declare const hostEnrollmentCommandResponseSchema: z$1.ZodNullable<z$1.ZodObject
8964
8964
  expiresAt: z$1.ZodNumber;
8965
8965
  }, z$1.core.$strip>>;
8966
8966
  type HostEnrollmentCommandResponse = z$1.infer<typeof hostEnrollmentCommandResponseSchema>;
8967
+ declare const hostReconnectResponseSchema: z$1.ZodObject<{
8968
+ command: z$1.ZodString;
8969
+ expiresAt: z$1.ZodNumber;
8970
+ hostId: z$1.ZodString;
8971
+ }, z$1.core.$strict>;
8972
+ type HostReconnectResponse = z$1.infer<typeof hostReconnectResponseSchema>;
8967
8973
  declare const createHostJoinCodeResponseSchema: z$1.ZodObject<{
8968
8974
  expiresAt: z$1.ZodNumber;
8969
8975
  hostId: z$1.ZodString;
@@ -9651,6 +9657,7 @@ declare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{
9651
9657
  provider_unavailable: "provider_unavailable";
9652
9658
  timeout: "timeout";
9653
9659
  }>;
9660
+ detail: z$1.ZodNullable<z$1.ZodString>;
9654
9661
  providerId: z$1.ZodString;
9655
9662
  }, z$1.core.$strip>>;
9656
9663
  models: z$1.ZodArray<z$1.ZodObject<{
@@ -9857,21 +9864,93 @@ declare const systemProviderStatesResponseSchema: z$1.ZodObject<{
9857
9864
  }, z$1.core.$loose>>;
9858
9865
  }, z$1.core.$strip>;
9859
9866
  type SystemProviderStatesResponse = z$1.infer<typeof systemProviderStatesResponseSchema>;
9860
- declare const systemConfigResponseSchema: z$1.ZodObject<{
9861
- aiServices: z$1.ZodObject<{
9862
- inference: z$1.ZodString;
9863
- inferenceFallback: z$1.ZodString;
9864
- services: z$1.ZodArray<z$1.ZodObject<{
9865
- displayName: z$1.ZodString;
9866
- id: z$1.ZodString;
9867
- kinds: z$1.ZodArray<z$1.ZodEnum<{
9868
- inference: "inference";
9869
- voice: "voice";
9870
- }>>;
9867
+ declare const systemAiServicesResponseSchema: z$1.ZodObject<{
9868
+ selections: z$1.ZodObject<{
9869
+ "commit-message": z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
9870
+ mode: z$1.ZodLiteral<"automatic">;
9871
+ }, z$1.core.$strict>, z$1.ZodObject<{
9872
+ mode: z$1.ZodLiteral<"off">;
9873
+ }, z$1.core.$strict>, z$1.ZodObject<{
9874
+ mode: z$1.ZodLiteral<"service">;
9871
9875
  pluginId: z$1.ZodString;
9872
- }, z$1.core.$strip>>;
9873
- transcription: z$1.ZodString;
9874
- }, z$1.core.$strip>;
9876
+ serviceId: z$1.ZodString;
9877
+ }, z$1.core.$strict>], "mode">;
9878
+ "thread-title": z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
9879
+ mode: z$1.ZodLiteral<"automatic">;
9880
+ }, z$1.core.$strict>, z$1.ZodObject<{
9881
+ mode: z$1.ZodLiteral<"off">;
9882
+ }, z$1.core.$strict>, z$1.ZodObject<{
9883
+ mode: z$1.ZodLiteral<"service">;
9884
+ pluginId: z$1.ZodString;
9885
+ serviceId: z$1.ZodString;
9886
+ }, z$1.core.$strict>], "mode">;
9887
+ voice: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
9888
+ mode: z$1.ZodLiteral<"automatic">;
9889
+ }, z$1.core.$strict>, z$1.ZodObject<{
9890
+ mode: z$1.ZodLiteral<"off">;
9891
+ }, z$1.core.$strict>, z$1.ZodObject<{
9892
+ mode: z$1.ZodLiteral<"service">;
9893
+ pluginId: z$1.ZodString;
9894
+ serviceId: z$1.ZodString;
9895
+ }, z$1.core.$strict>], "mode">;
9896
+ }, z$1.core.$strict>;
9897
+ services: z$1.ZodArray<z$1.ZodObject<{
9898
+ automaticRank: z$1.ZodNullable<z$1.ZodNumber>;
9899
+ displayName: z$1.ZodString;
9900
+ id: z$1.ZodString;
9901
+ pluginId: z$1.ZodString;
9902
+ status: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
9903
+ ready: z$1.ZodLiteral<true>;
9904
+ }, z$1.core.$strict>, z$1.ZodObject<{
9905
+ message: z$1.ZodString;
9906
+ ready: z$1.ZodLiteral<false>;
9907
+ }, z$1.core.$strict>], "ready">;
9908
+ tasks: z$1.ZodArray<z$1.ZodEnum<{
9909
+ "commit-message": "commit-message";
9910
+ "thread-title": "thread-title";
9911
+ voice: "voice";
9912
+ }>>;
9913
+ }, z$1.core.$strip>>;
9914
+ }, z$1.core.$strip>;
9915
+ type SystemAiServicesResponse = z$1.infer<typeof systemAiServicesResponseSchema>;
9916
+ declare const setAiServiceSelectionRequestSchema: z$1.ZodObject<{
9917
+ selection: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
9918
+ mode: z$1.ZodLiteral<"automatic">;
9919
+ }, z$1.core.$strict>, z$1.ZodObject<{
9920
+ mode: z$1.ZodLiteral<"off">;
9921
+ }, z$1.core.$strict>, z$1.ZodObject<{
9922
+ mode: z$1.ZodLiteral<"service">;
9923
+ pluginId: z$1.ZodString;
9924
+ serviceId: z$1.ZodString;
9925
+ }, z$1.core.$strict>], "mode">;
9926
+ task: z$1.ZodEnum<{
9927
+ "commit-message": "commit-message";
9928
+ "thread-title": "thread-title";
9929
+ voice: "voice";
9930
+ }>;
9931
+ }, z$1.core.$strict>;
9932
+ type SetAiServiceSelectionRequest = z$1.infer<typeof setAiServiceSelectionRequestSchema>;
9933
+ declare const testAiServiceRequestSchema: z$1.ZodObject<{
9934
+ task: z$1.ZodEnum<{
9935
+ "commit-message": "commit-message";
9936
+ "thread-title": "thread-title";
9937
+ }>;
9938
+ }, z$1.core.$strict>;
9939
+ type TestAiServiceRequest = z$1.infer<typeof testAiServiceRequestSchema>;
9940
+ declare const testAiServiceResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
9941
+ displayName: z$1.ZodString;
9942
+ durationMs: z$1.ZodNumber;
9943
+ ok: z$1.ZodLiteral<true>;
9944
+ pluginId: z$1.ZodString;
9945
+ serviceId: z$1.ZodString;
9946
+ text: z$1.ZodString;
9947
+ }, z$1.core.$strip>, z$1.ZodObject<{
9948
+ durationMs: z$1.ZodNumber;
9949
+ message: z$1.ZodString;
9950
+ ok: z$1.ZodLiteral<false>;
9951
+ }, z$1.core.$strip>], "ok">;
9952
+ type TestAiServiceResponse = z$1.infer<typeof testAiServiceResponseSchema>;
9953
+ declare const systemConfigResponseSchema: z$1.ZodObject<{
9875
9954
  appearance: z$1.ZodObject<{
9876
9955
  customCss: z$1.ZodNullable<z$1.ZodString>;
9877
9956
  faviconColor: z$1.ZodEnum<{
@@ -9901,6 +9980,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
9901
9980
  "browser.focusLocation": "browser.focusLocation";
9902
9981
  "browser.reload": "browser.reload";
9903
9982
  "composer.focus": "composer.focus";
9983
+ "dataDirectory.open": "dataDirectory.open";
9904
9984
  "diff.toggle": "diff.toggle";
9905
9985
  "file.quickOpen": "file.quickOpen";
9906
9986
  "logs.openServerDaemon": "logs.openServerDaemon";
@@ -10010,10 +10090,8 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10010
10090
  experiments: z$1.ZodRecord<z$1.ZodEnum<{
10011
10091
  changelogPreview: "changelogPreview";
10012
10092
  mobileApp: "mobileApp";
10013
- multiMachinePicker: "multiMachinePicker";
10014
10093
  serverMove: "serverMove";
10015
10094
  sidebarProgressiveDisclosure: "sidebarProgressiveDisclosure";
10016
- timelineWindowing: "timelineWindowing";
10017
10095
  }>, z$1.ZodBoolean>;
10018
10096
  featureFlags: z$1.ZodObject<{
10019
10097
  placeholder: z$1.ZodBoolean;
@@ -10045,6 +10123,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10045
10123
  "browser.focusLocation": "browser.focusLocation";
10046
10124
  "browser.reload": "browser.reload";
10047
10125
  "composer.focus": "composer.focus";
10126
+ "dataDirectory.open": "dataDirectory.open";
10048
10127
  "diff.toggle": "diff.toggle";
10049
10128
  "file.quickOpen": "file.quickOpen";
10050
10129
  "logs.openServerDaemon": "logs.openServerDaemon";
@@ -10129,6 +10208,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10129
10208
  "browser.focusLocation": "browser.focusLocation";
10130
10209
  "browser.reload": "browser.reload";
10131
10210
  "composer.focus": "composer.focus";
10211
+ "dataDirectory.open": "dataDirectory.open";
10132
10212
  "diff.toggle": "diff.toggle";
10133
10213
  "file.quickOpen": "file.quickOpen";
10134
10214
  "logs.openServerDaemon": "logs.openServerDaemon";
@@ -10321,6 +10401,94 @@ declare const systemVersionResponseSchema: z$1.ZodObject<{
10321
10401
  upgradeCommand: z$1.ZodString;
10322
10402
  }, z$1.core.$strip>;
10323
10403
  type SystemVersionResponse = z$1.infer<typeof systemVersionResponseSchema>;
10404
+ declare const systemAppUpdateStatusSchema: z$1.ZodObject<{
10405
+ activity: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
10406
+ phase: z$1.ZodLiteral<"idle">;
10407
+ }, z$1.core.$strip>, z$1.ZodObject<{
10408
+ output: z$1.ZodArray<z$1.ZodString>;
10409
+ phase: z$1.ZodLiteral<"preparing">;
10410
+ startedAt: z$1.ZodString;
10411
+ step: z$1.ZodString;
10412
+ targetVersion: z$1.ZodString;
10413
+ }, z$1.core.$strip>, z$1.ZodObject<{
10414
+ phase: z$1.ZodLiteral<"restarting">;
10415
+ startedAt: z$1.ZodString;
10416
+ targetVersion: z$1.ZodString;
10417
+ }, z$1.core.$strip>], "phase">;
10418
+ available: z$1.ZodNullable<z$1.ZodObject<{
10419
+ channel: z$1.ZodEnum<{
10420
+ latest: "latest";
10421
+ main: "main";
10422
+ nightly: "nightly";
10423
+ }>;
10424
+ commit: z$1.ZodNullable<z$1.ZodString>;
10425
+ commitCount: z$1.ZodNullable<z$1.ZodNumber>;
10426
+ subjects: z$1.ZodArray<z$1.ZodString>;
10427
+ version: z$1.ZodString;
10428
+ }, z$1.core.$strip>>;
10429
+ blocked: z$1.ZodNullable<z$1.ZodObject<{
10430
+ message: z$1.ZodString;
10431
+ reason: z$1.ZodEnum<{
10432
+ "detached-head": "detached-head";
10433
+ "fetch-failed": "fetch-failed";
10434
+ "not-on-main": "not-on-main";
10435
+ "uncommitted-changes": "uncommitted-changes";
10436
+ diverged: "diverged";
10437
+ }>;
10438
+ }, z$1.core.$strip>>;
10439
+ current: z$1.ZodObject<{
10440
+ commit: z$1.ZodNullable<z$1.ZodString>;
10441
+ version: z$1.ZodString;
10442
+ }, z$1.core.$strip>;
10443
+ lastResult: z$1.ZodNullable<z$1.ZodObject<{
10444
+ acknowledged: z$1.ZodBoolean;
10445
+ finishedAt: z$1.ZodString;
10446
+ from: z$1.ZodObject<{
10447
+ commit: z$1.ZodNullable<z$1.ZodString>;
10448
+ version: z$1.ZodString;
10449
+ }, z$1.core.$strip>;
10450
+ id: z$1.ZodString;
10451
+ logTail: z$1.ZodArray<z$1.ZodString>;
10452
+ message: z$1.ZodNullable<z$1.ZodString>;
10453
+ outcome: z$1.ZodEnum<{
10454
+ failed: "failed";
10455
+ updated: "updated";
10456
+ }>;
10457
+ phase: z$1.ZodNullable<z$1.ZodEnum<{
10458
+ install: "install";
10459
+ prepare: "prepare";
10460
+ startup: "startup";
10461
+ }>>;
10462
+ to: z$1.ZodObject<{
10463
+ commit: z$1.ZodNullable<z$1.ZodString>;
10464
+ version: z$1.ZodString;
10465
+ }, z$1.core.$strip>;
10466
+ }, z$1.core.$strip>>;
10467
+ runningThreadCount: z$1.ZodNumber;
10468
+ support: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
10469
+ kind: z$1.ZodLiteral<"supported">;
10470
+ mode: z$1.ZodEnum<{
10471
+ npm: "npm";
10472
+ source: "source";
10473
+ }>;
10474
+ }, z$1.core.$strip>, z$1.ZodObject<{
10475
+ kind: z$1.ZodLiteral<"unsupported">;
10476
+ reason: z$1.ZodEnum<{
10477
+ desktop: "desktop";
10478
+ development: "development";
10479
+ unmanaged: "unmanaged";
10480
+ }>;
10481
+ }, z$1.core.$strip>], "kind">;
10482
+ }, z$1.core.$strip>;
10483
+ type SystemAppUpdateStatus = z$1.infer<typeof systemAppUpdateStatusSchema>;
10484
+ declare const systemAppUpdateApplyRequestSchema: z$1.ZodObject<{
10485
+ confirmInterruptingThreads: z$1.ZodBoolean;
10486
+ }, z$1.core.$strip>;
10487
+ type SystemAppUpdateApplyRequest = z$1.infer<typeof systemAppUpdateApplyRequestSchema>;
10488
+ declare const systemAppUpdateAcknowledgeRequestSchema: z$1.ZodObject<{
10489
+ id: z$1.ZodString;
10490
+ }, z$1.core.$strip>;
10491
+ type SystemAppUpdateAcknowledgeRequest = z$1.infer<typeof systemAppUpdateAcknowledgeRequestSchema>;
10324
10492
  declare const systemConfigReloadResponseSchema: z$1.ZodObject<{
10325
10493
  ok: z$1.ZodLiteral<true>;
10326
10494
  }, z$1.core.$strip>;
@@ -15289,6 +15457,9 @@ interface HostRetryUpdateArgs {
15289
15457
  interface HostActionArgs {
15290
15458
  hostId: string;
15291
15459
  }
15460
+ interface HostReconnectArgs extends HostActionArgs {
15461
+ signal?: AbortSignal;
15462
+ }
15292
15463
  interface HostDirectoryArgs extends HostDirectoryQuery {
15293
15464
  hostId: string;
15294
15465
  signal?: AbortSignal;
@@ -15328,6 +15499,7 @@ type HostGetResult = Host & {
15328
15499
  connectMachineId: string | null;
15329
15500
  };
15330
15501
  type HostEnrollmentCommandResult = HostEnrollmentCommandResponse;
15502
+ type HostReconnectResult = HostReconnectResponse;
15331
15503
  type HostCloneDefaultPathResult = HostCloneDefaultPathResponse;
15332
15504
  type HostProviderCliInstallResult = HostProviderCliInstallEvent[];
15333
15505
  type HostListResult = Host[];
@@ -15341,6 +15513,7 @@ type MachineProviderListResult = SystemMachineProvider[];
15341
15513
  interface HostsArea {
15342
15514
  experimental_create(args: MachineCreateArgs): Promise<Host>;
15343
15515
  experimental_getEnrollmentCommand(args: HostGetArgs): Promise<HostEnrollmentCommandResult>;
15516
+ experimental_reconnect(args: HostReconnectArgs): Promise<HostReconnectResult>;
15344
15517
  /** @deprecated Use experimental_create() and experimental_getEnrollmentCommand() for bootstrap enrollment. */
15345
15518
  createJoinCode(): Promise<HostCreateJoinCodeResult>;
15346
15519
  delete(args: HostDeleteArgs): Promise<HostDeleteResult>;
@@ -15906,6 +16079,13 @@ interface SystemVersionArgs {
15906
16079
  force?: boolean;
15907
16080
  signal?: AbortSignal;
15908
16081
  }
16082
+ interface SystemAppUpdateArgs {
16083
+ force?: boolean;
16084
+ signal?: AbortSignal;
16085
+ }
16086
+ type SystemApplyAppUpdateArgs = SystemAppUpdateApplyRequest;
16087
+ type SystemAcknowledgeAppUpdateArgs = SystemAppUpdateAcknowledgeRequest;
16088
+ type SystemAppUpdateStatusResult = SystemAppUpdateStatus;
15909
16089
  interface SystemVoiceTranscriptionArgs {
15910
16090
  file: Blob;
15911
16091
  prompt?: string;
@@ -15913,6 +16093,13 @@ interface SystemVoiceTranscriptionArgs {
15913
16093
  }
15914
16094
  type SystemAttentionResult = SystemAttentionResponse;
15915
16095
  type SystemConfigResult = SystemConfigResponse;
16096
+ type SystemAiServicesResult = SystemAiServicesResponse;
16097
+ type SystemSetAiServiceSelectionArgs = SetAiServiceSelectionRequest;
16098
+ type SystemTestAiServiceArgs = TestAiServiceRequest;
16099
+ type SystemTestAiServiceResult = TestAiServiceResponse;
16100
+ interface SystemAiServicesArgs {
16101
+ signal?: AbortSignal;
16102
+ }
15916
16103
  type SystemExecutionOptionsResult = SystemExecutionOptionsResponse;
15917
16104
  type SystemReloadConfigResult = SystemConfigReloadResponse;
15918
16105
  type SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest;
@@ -15959,12 +16146,15 @@ interface SystemArea {
15959
16146
  }): Promise<MachineEnvironmentList>;
15960
16147
  machineEnvironment(): Promise<MachineEnvironmentList>;
15961
16148
  replaceMachineEnvironment(input: MachineEnvironmentReplace): Promise<MachineEnvironmentList>;
16149
+ aiServices(args?: SystemAiServicesArgs): Promise<SystemAiServicesResult>;
15962
16150
  attention(args?: SystemAttentionArgs): Promise<SystemAttentionResult>;
15963
16151
  config(args?: SystemConfigArgs): Promise<SystemConfigResult>;
15964
16152
  executionOptions(args?: SystemExecutionOptionsArgs): Promise<SystemExecutionOptionsResult>;
15965
16153
  cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise<SystemCliSkillsStatusResult>;
15966
16154
  installCliSkills(args: SystemInstallCliSkillsArgs): Promise<SystemInstallCliSkillsResult>;
15967
16155
  reloadConfig(): Promise<SystemReloadConfigResult>;
16156
+ setAiServiceSelection(args: SystemSetAiServiceSelectionArgs): Promise<SystemAiServicesResult>;
16157
+ testAiService(args: SystemTestAiServiceArgs): Promise<SystemTestAiServiceResult>;
15968
16158
  transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise<SystemVoiceTranscriptionResult>;
15969
16159
  uiPreferences: SystemUiPreferencesArea;
15970
16160
  updateExperiments(args: Experiments): Promise<SystemUpdateExperimentsResult>;
@@ -15973,6 +16163,9 @@ interface SystemArea {
15973
16163
  providerStates(args?: SystemProviderStatesArgs): Promise<SystemProviderStatesResult>;
15974
16164
  usageLimits(args?: SystemUsageLimitsArgs): Promise<SystemUsageLimitsResult>;
15975
16165
  version(args?: SystemVersionArgs): Promise<SystemVersionResult>;
16166
+ appUpdate(args?: SystemAppUpdateArgs): Promise<SystemAppUpdateStatusResult>;
16167
+ applyAppUpdate(args: SystemApplyAppUpdateArgs): Promise<SystemAppUpdateStatusResult>;
16168
+ acknowledgeAppUpdate(args: SystemAcknowledgeAppUpdateArgs): Promise<SystemAppUpdateStatusResult>;
15976
16169
  }
15977
16170
 
15978
16171
  interface TerminalThreadScope {
@@ -16606,6 +16799,30 @@ interface PluginPendingInteractionProps {
16606
16799
  submit(value: JsonValue$1): Promise<void>;
16607
16800
  cancel(): Promise<void>;
16608
16801
  }
16802
+ /** Display and accessibility metadata for a host-owned answer shortcut. */
16803
+ interface ExperimentalQuestionShortcut {
16804
+ label: string;
16805
+ ariaKeyshortcuts: string;
16806
+ }
16807
+ /**
16808
+ * The keyboard shortcuts bb binds while a pending interaction is open. The
16809
+ * host owns the bindings (users can remap them); a form shows them and decides
16810
+ * what choosing an option means.
16811
+ */
16812
+ interface ExperimentalQuestionFormHost {
16813
+ /**
16814
+ * Shortcut per zero-based option index, as a string (`"0"` is the first
16815
+ * option). Missing entries have no binding.
16816
+ */
16817
+ shortcuts: ReadonlyMap<string, ExperimentalQuestionShortcut>;
16818
+ /**
16819
+ * Receive the index of the option the person chose with a shortcut while
16820
+ * the thread's pane is focused. Return true when the index names an option
16821
+ * the form handled. The last registered handler wins; call the returned
16822
+ * function to unregister.
16823
+ */
16824
+ registerChoiceHandler(handler: (index: number) => boolean): () => void;
16825
+ }
16609
16826
  /**
16610
16827
  * Props for a `sidebarFooterAction` — host-rendered (no plugin component).
16611
16828
  * Deliberately empty; the registration's `run` carries the behavior.
@@ -17776,7 +17993,7 @@ interface PluginSidebarThreadActions {
17776
17993
  setRead(threadId: string, read: boolean): Promise<void>;
17777
17994
  /** Silent rename — no dialog. For inline editing in your own row. */
17778
17995
  rename(threadId: string, title: string): Promise<void>;
17779
- /** Opens bb's confirmation before archiving the thread and its children. */
17996
+ /** Archives immediately, or confirms first if child threads will also be archived. */
17780
17997
  archive(threadId: string): void;
17781
17998
  /**
17782
17999
  * Opens bb's delete confirmation, which counts child threads first. Deletion
@@ -19368,6 +19585,13 @@ interface PluginSdkApp {
19368
19585
  * docs/api_to_audit.md.
19369
19586
  */
19370
19587
  experimental_usePluginId(): string;
19588
+ /**
19589
+ * The answer shortcuts bb binds while a pending interaction is open. Inside
19590
+ * a `pendingInteraction` component the form shows each option's shortcut and
19591
+ * registers a handler that chooses the option; outside one, the map is empty
19592
+ * and handlers never run. Experimental: see docs/api_to_audit.md.
19593
+ */
19594
+ experimental_useQuestionFormHost(): ExperimentalQuestionFormHost;
19371
19595
  useBbNavigate(): BbNavigate;
19372
19596
  /** Select one of this plugin's eligible fixed tabs on the current surface. */
19373
19597
  experimental_useAppPanel(): ExperimentalAppPanel;
@@ -19499,9 +19723,10 @@ interface PluginSdkApp {
19499
19723
  * surfaces without further work. Reserve `useRpc` for work that needs your
19500
19724
  * server: secrets, host files, or your plugin's own storage.
19501
19725
  *
19502
- * Writes made here are not optimistic in bb's surfaces; they land when the
19503
- * realtime update does. `experimental_useSidebarThreadActions()` stays the
19504
- * optimistic path for pin, read state, rename, and archive.
19726
+ * Thread title, section, and parent updates are optimistic in bb's surfaces
19727
+ * and synchronous calls are applied as one cache transaction. Other writes
19728
+ * land when their realtime update does. `experimental_useSidebarThreadActions()`
19729
+ * stays the optimistic path for pin, read state, rename, and archive.
19505
19730
  *
19506
19731
  * The client is stable for the plugin's lifetime, so it is safe in effect
19507
19732
  * and callback dependency lists.
@@ -19617,6 +19842,7 @@ declare const useRealtimeConnectionState: () => PluginRealtimeConnectionState;
19617
19842
  declare const useSettings: () => PluginSettingsState;
19618
19843
  declare const useBbContext: () => BbContext;
19619
19844
  declare const experimental_usePluginId: () => string;
19845
+ declare const experimental_useQuestionFormHost: () => ExperimentalQuestionFormHost;
19620
19846
  declare const useBbNavigate: () => BbNavigate;
19621
19847
  declare const experimental_useAppPanel: () => ExperimentalAppPanel;
19622
19848
  declare const experimental_useFixedTabTarget: <Target extends JsonValue$1>(tab: ExperimentalPluginFixedTabReference<Target>) => ExperimentalFixedTabTargetState<Target> | null;
@@ -19643,5 +19869,5 @@ declare const useSdk: () => PluginBrowserBbSdk;
19643
19869
  declare const experimental_useProviders: () => PluginProvidersState;
19644
19870
  declare const experimental_useCodeTheme: () => PluginCodeThemeState;
19645
19871
 
19646
- 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_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 };
19647
- 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, 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 };
19872
+ 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 };
19873
+ 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 };
@@ -1677,26 +1677,71 @@ interface PluginMentionProviderRegistration {
1677
1677
  experimental_images?: readonly ExperimentalPluginMentionImage[];
1678
1678
  }>;
1679
1679
  }
1680
+ /** Options for one `complete` call. */
1681
+ interface PluginAiCompleteOptions {
1682
+ /**
1683
+ * Aborted when bb stops waiting: the task timed out (5 seconds for titles
1684
+ * and commit messages) or the request was cancelled. Pass it to `fetch`.
1685
+ */
1686
+ readonly signal: AbortSignal;
1687
+ }
1688
+ /** Options for one `transcribe` call. */
1689
+ interface PluginAiTranscribeOptions {
1690
+ /** Aborted when bb stops waiting (10 seconds) or the request was cancelled. */
1691
+ readonly signal: AbortSignal;
1692
+ /**
1693
+ * Vocabulary the speaker is likely to use (names, identifiers), for
1694
+ * services that accept a transcription prompt; `null` when there is none.
1695
+ */
1696
+ readonly hint: string | null;
1697
+ }
1680
1698
  /**
1681
- * What a plugin's AI service does. `inference` answers bb's server-side helper
1682
- * completions (thread titles, commit messages: a prompt and a JSON Schema in,
1683
- * a structured value out); `voice` transcribes recorded speech.
1699
+ * Whether a service can answer right now. `message` is shown to the user
1700
+ * beside the service ("Sign in to your bb account") and should say how to
1701
+ * make it ready.
1684
1702
  */
1685
- type PluginAiServiceKind = "inference" | "voice";
1703
+ type PluginAiServiceStatus = {
1704
+ readonly ready: true;
1705
+ } | {
1706
+ readonly ready: false;
1707
+ readonly message: string;
1708
+ };
1686
1709
  /**
1687
- * An AI service a plugin offers from its `bb.host` entry, which implements
1688
- * `experimental_aiServicesHostContract` (`@get-bb/plugin-sdk/ai-services`).
1689
- * The user selects it with `BB_INFERENCE` / `BB_TRANSCRIPTION` set to
1690
- * `<id>/<model>`; core calls the plugin's host entry on the primary host with
1691
- * the `id` on every request, so one entry can serve several services.
1710
+ * An AI service bb can use for its helper tasks: thread titles and commit
1711
+ * messages (`complete`) and voice input (`transcribe`). The user picks a
1712
+ * service per task in Settings → AI services or with
1713
+ * `bb settings ai-services set`. The functions run in the plugin's server
1714
+ * process; a plugin that needs host-local state (a login file, a local model)
1715
+ * reaches its own `bb.host` entry through `bb.hosts.experimental_client`.
1716
+ *
1717
+ * bb owns the prompts and cleans up replies (think blocks, quotes, labels,
1718
+ * extra lines), so a service returns the model's text as-is. The plugin owns
1719
+ * everything behind the function: which model, which API, any retries.
1720
+ * Failure is a rejected promise.
1692
1721
  */
1693
1722
  interface PluginAiServiceDeclaration {
1694
- /** The `<serviceId>` segment of the user's setting; stable, lowercase. */
1723
+ /**
1724
+ * Stable, lowercase id, unique within this plugin. bb identifies a service
1725
+ * by plugin id and service id, so another plugin may use the same id.
1726
+ * `automatic` and `off` are reserved.
1727
+ */
1695
1728
  readonly id: string;
1696
- /** Shown beside the id wherever the setting's options are listed. */
1729
+ /** Shown in the picker; 1-64 characters. */
1697
1730
  readonly displayName: string;
1698
- /** Which kinds this service answers; a kind it lacks is not offered. */
1699
- readonly kinds: readonly PluginAiServiceKind[];
1731
+ /**
1732
+ * Answer one prompt with plain text. Offered for thread titles and commit
1733
+ * messages. Declare `complete`, `transcribe`, or both.
1734
+ */
1735
+ readonly complete?: (prompt: string, options: PluginAiCompleteOptions) => Promise<string>;
1736
+ /** Transcribe recorded speech to text. Offered for voice input. */
1737
+ readonly transcribe?: (audio: File, options: PluginAiTranscribeOptions) => Promise<string>;
1738
+ /**
1739
+ * Report whether the service can answer. bb calls it for the picker's
1740
+ * status line and to decide whether Automatic skips the service and
1741
+ * whether the microphone shows; results are cached for a few seconds.
1742
+ * Omit it when the service is always ready.
1743
+ */
1744
+ readonly status?: () => Promise<PluginAiServiceStatus>;
1700
1745
  }
1701
1746
 
1702
1747
  declare function pluginCliCollisionWarning(pluginId: string, commandName: string): string | null;
@@ -1733,57 +1778,24 @@ declare const PLUGIN_PROVIDER_PERMISSION_MODE_VALUES: readonly ["accept-edits",
1733
1778
  declare const PLUGIN_PROVIDER_REASONING_LEVEL_VALUES: readonly ["none", "low", "medium", "high", "xhigh", "ultracode", "max", "ultra"];
1734
1779
  declare const PLUGIN_PROVIDER_COMPOSER_ACTION_VALUES: readonly ["plan", "goal"];
1735
1780
  /**
1736
- * AI-service ids the server serves itself: `openai` transcription and the
1737
- * builtin inference providers (pi-ai 0.84). A plugin cannot register one —
1738
- * it would capture the user's prompts and audio. This list is the one source
1739
- * for both the fake host and production (`isServerDirectAiServiceId`);
1740
- * apps/server/test/services/plugins/plugin-ai-services.test.ts pins it to
1741
- * pi-ai's provider registry, so a pi-ai bump must move it in the same change.
1781
+ * A validated `bb.experimental_aiServices.register` declaration. Absent
1782
+ * functions are `null` so hosts never have to distinguish missing from
1783
+ * undefined.
1742
1784
  */
1743
- declare const SERVER_DIRECT_AI_SERVICE_IDS: readonly string[];
1785
+ interface NormalizedPluginAiService {
1786
+ readonly id: string;
1787
+ readonly displayName: string;
1788
+ readonly complete: NonNullable<PluginAiServiceDeclaration["complete"]> | null;
1789
+ readonly transcribe: NonNullable<PluginAiServiceDeclaration["transcribe"]> | null;
1790
+ readonly status: NonNullable<PluginAiServiceDeclaration["status"]> | null;
1791
+ }
1744
1792
  /**
1745
1793
  * Validate one `bb.experimental_aiServices.register` declaration the same
1746
1794
  * way in the production host and the fake host. Throws on the first problem;
1747
1795
  * returns a normalized, frozen copy carrying only contract fields.
1748
1796
  */
1749
- declare function validatePluginAiServiceDeclaration(declaration: PluginAiServiceDeclaration): PluginAiServiceDeclaration;
1750
- /**
1751
- * What an AI service binds to, decided at the
1752
- * `bb.experimental_aiServices.register` call: the plugin's built `bb.host`
1753
- * artifact, or — when the plugin declares an entry that failed to build —
1754
- * nothing yet, with the build problem. An unbound service is staged so the
1755
- * factory completes; the load then fails on that problem before the staged
1756
- * registrations flush, so the service never goes live, while a provider the
1757
- * same factory declared can still be retained as unavailable.
1758
- */
1759
- type AiServiceHostBinding<THostArtifact> = {
1760
- readonly artifact: THostArtifact;
1761
- readonly problem: null;
1762
- } | {
1763
- readonly artifact: null;
1764
- readonly problem: string;
1765
- };
1766
- /**
1767
- * The refusals a host makes at `bb.experimental_aiServices.register` before
1768
- * it stages the declaration: a reserved server-direct id, and a plugin with
1769
- * no `bb.host` entry for the service to run on. A plugin whose declared
1770
- * entry failed to build is not refused here: the service is staged unbound,
1771
- * carrying the build problem, so the load fails on that problem — the
1772
- * actionable one — after the factory instead of at this call, and a
1773
- * provider the same factory declares is listed as unavailable rather than
1774
- * lost. Returns what the service binds to. The production host and the fake
1775
- * host both call this, so they refuse identically;
1776
- * apps/server/test/services/plugins/plugin-ai-services.test.ts pins the
1777
- * messages.
1778
- */
1779
- declare function assertAiServiceRegistrable<THostArtifact>(args: {
1780
- id: string;
1781
- /** The plugin's built `bb.host` artifact, or null when it has none. */
1782
- hostArtifact: THostArtifact | null;
1783
- /** Why the artifact is missing when the plugin declared an entry that failed to build. */
1784
- hostArtifactProblem: string | null;
1785
- }): AiServiceHostBinding<THostArtifact>;
1786
- /** The collision a second registration of a live AI-service id raises. */
1797
+ declare function validatePluginAiServiceDeclaration(declaration: PluginAiServiceDeclaration): NormalizedPluginAiService;
1798
+ /** The collision a plugin's second registration of one AI-service id raises. */
1787
1799
  declare function aiServiceAlreadyRegisteredMessage(id: string): string;
1788
1800
  /** The collision a second registration of a live provider id raises. */
1789
1801
  declare function providerAlreadyRegisteredMessage(id: string): string;
@@ -2069,5 +2081,5 @@ declare function normalizePluginAgentConfiguration(args: {
2069
2081
  declare function validateRpcValue(schema: StandardSchemaV1, value: unknown, phase: "input" | "output", fail: (error: PluginRpcError) => never): Promise<unknown>;
2070
2082
  declare function normalizeRpcJsonResult(value: unknown, fail: (error: PluginRpcError) => never): JsonValue;
2071
2083
 
2072
- export { ENVIRONMENT_PROVIDER_DESCRIPTION_MAX_CHARS, ENVIRONMENT_PROVIDER_DISPLAY_NAME_MAX_CHARS, ENVIRONMENT_PROVIDER_ID_PATTERN, ENVIRONMENT_PROVIDER_REQUIREMENT_NAMES, KV_VALUE_MAX_BYTES, MACHINE_PROVIDER_DESCRIPTION_MAX_CHARS, PLUGIN_AGENT_STATUS_LABEL_MAX_CHARS, PLUGIN_MENTION_TRIGGER_VALUES, PLUGIN_PROVIDER_BRIDGE_OPTIONS_MAX_BYTES, PLUGIN_PROVIDER_COMPOSER_ACTION_VALUES, PLUGIN_PROVIDER_DISPLAY_NAME_MAX_CHARS, PLUGIN_PROVIDER_ENV_MAX_ENTRIES, PLUGIN_PROVIDER_ENV_NAME_PATTERN, PLUGIN_PROVIDER_PERMISSION_MODE_VALUES, PLUGIN_PROVIDER_REASONING_LEVEL_VALUES, PROVIDER_ID_PATTERN, RESERVED_AGENT_TOOL_NAMES, RESERVED_BB_CLI_COMMANDS, SERVER_DIRECT_AI_SERVICE_IDS, SETTING_KEY_PATTERN, adoptHttpRouteResponse, aiServiceAlreadyRegisteredMessage, assertAiServiceRegistrable, coerceStoredPluginSettingValue, deriveValidatedProviderOptions, enforcePluginCliOutputLimit, environmentCompositionSchema, isPluginMentionTrigger, isStandardSchema, normalizeAgentToolRegistration, normalizeCliRegistration, normalizeHttpRouteRegistration, normalizeInteractionRequest, normalizeMentionProviderRegistration, normalizePluginAgentConfiguration, normalizeRealtimePayload, normalizeRpcJsonResult, normalizeRpcRegistration, normalizeWebSocketRouteRegistration, parsePluginRowPresentation, pluginCliCollisionWarning, pluginHookAlreadyRegisteredMessage, providerAlreadyRegisteredMessage, providerIconRefusalMessage, providerWithoutBridgeMessage, publishRpcMethod, readRpcPublicationOptions, registerSettingDescriptors, runPluginStorageMigrations, storePluginHook, summarizeStandardIssues, undeclaredIconProblem, validateBackgroundServiceRegistration, validatePluginAiServiceDeclaration, validatePluginEnvironmentProviderDeclaration, validatePluginMachineProviderDeclaration, validatePluginProviderDeclaration, validatePluginProviderEnvEntries, validateProviderEnvContribution, validateRpcValue, validateScheduleRegistration, validateServerAccessProviderDeclaration, validateSettingsUpdate };
2073
- export type { AiServiceHostBinding, NormalizedPluginEnvironmentComposition, NormalizedPluginEnvironmentProvider, NormalizedPluginEnvironmentProviderRequirements, NormalizedPluginInteractionRequest, NormalizedPluginMachineProvider, NormalizedPluginProviderDeclaration };
2084
+ export { ENVIRONMENT_PROVIDER_DESCRIPTION_MAX_CHARS, ENVIRONMENT_PROVIDER_DISPLAY_NAME_MAX_CHARS, ENVIRONMENT_PROVIDER_ID_PATTERN, ENVIRONMENT_PROVIDER_REQUIREMENT_NAMES, KV_VALUE_MAX_BYTES, MACHINE_PROVIDER_DESCRIPTION_MAX_CHARS, PLUGIN_AGENT_STATUS_LABEL_MAX_CHARS, PLUGIN_MENTION_TRIGGER_VALUES, PLUGIN_PROVIDER_BRIDGE_OPTIONS_MAX_BYTES, PLUGIN_PROVIDER_COMPOSER_ACTION_VALUES, PLUGIN_PROVIDER_DISPLAY_NAME_MAX_CHARS, PLUGIN_PROVIDER_ENV_MAX_ENTRIES, PLUGIN_PROVIDER_ENV_NAME_PATTERN, PLUGIN_PROVIDER_PERMISSION_MODE_VALUES, PLUGIN_PROVIDER_REASONING_LEVEL_VALUES, PROVIDER_ID_PATTERN, RESERVED_AGENT_TOOL_NAMES, RESERVED_BB_CLI_COMMANDS, SETTING_KEY_PATTERN, adoptHttpRouteResponse, aiServiceAlreadyRegisteredMessage, coerceStoredPluginSettingValue, deriveValidatedProviderOptions, enforcePluginCliOutputLimit, environmentCompositionSchema, isPluginMentionTrigger, isStandardSchema, normalizeAgentToolRegistration, normalizeCliRegistration, normalizeHttpRouteRegistration, normalizeInteractionRequest, normalizeMentionProviderRegistration, normalizePluginAgentConfiguration, normalizeRealtimePayload, normalizeRpcJsonResult, normalizeRpcRegistration, normalizeWebSocketRouteRegistration, parsePluginRowPresentation, pluginCliCollisionWarning, pluginHookAlreadyRegisteredMessage, providerAlreadyRegisteredMessage, providerIconRefusalMessage, providerWithoutBridgeMessage, publishRpcMethod, readRpcPublicationOptions, registerSettingDescriptors, runPluginStorageMigrations, storePluginHook, summarizeStandardIssues, undeclaredIconProblem, validateBackgroundServiceRegistration, validatePluginAiServiceDeclaration, validatePluginEnvironmentProviderDeclaration, validatePluginMachineProviderDeclaration, validatePluginProviderDeclaration, validatePluginProviderEnvEntries, validateProviderEnvContribution, validateRpcValue, validateScheduleRegistration, validateServerAccessProviderDeclaration, validateSettingsUpdate };
2085
+ export type { NormalizedPluginAiService, NormalizedPluginEnvironmentComposition, NormalizedPluginEnvironmentProvider, NormalizedPluginEnvironmentProviderRequirements, NormalizedPluginInteractionRequest, NormalizedPluginMachineProvider, NormalizedPluginProviderDeclaration };
@@ -1657,6 +1657,7 @@ declare const BRIDGE_JSON_RPC_ERRORS: {
1657
1657
  readonly NO_ACTIVE_TURN: -32001;
1658
1658
  readonly SESSION_NOT_RESTORABLE: -32002;
1659
1659
  readonly FORK_CHECKPOINT_UNSUPPORTED: -32003;
1660
+ readonly MISSING_EXECUTABLE: -32004;
1660
1661
  };
1661
1662
  declare const providerRecoveryHintSchema: z.ZodObject<{
1662
1663
  kind: z.ZodEnum<{