@get-bb/plugin-sdk 0.5.9 → 0.5.16

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.
@@ -7,7 +7,7 @@
7
7
 
8
8
  import { ReactNode, ComponentType } from 'react';
9
9
  import { RenderResult } from '@testing-library/react';
10
- import { ExperimentalSidebarFooterItemRegistration, PluginProviderIconRegistration, PluginHomepageSectionRegistration, PluginSettingsSectionRegistration, ExperimentalAppOverlayRegistration, PluginNavPanelRegistration, PluginThreadPanelActionRegistration, PluginNewThreadPanelActionRegistration, ComposerCustomization, PluginPendingInteractionRegistration, PluginSidebarFooterActionRegistration, ExperimentalSidebarNavigationRegistration, PluginThreadListRegistration, PluginThreadHeaderActionRegistration, ExperimentalPluginBrowserToolbarActionRegistration, PluginFileOpenerRegistration, PluginSourceCodeRendererRegistration, PluginDiffRendererRegistration, PluginMessageDirectiveRegistration, PluginMessageActionRegistration, ExperimentalIconRegistration, PluginTimelineRendererRegistration, PluginEnvironmentProviderInputsRegistration, PluginMachineProviderInputsRegistration, PluginContentScriptRegistration, PluginComposerScope, PluginComposerTextEffect, PluginComposerMention, ExperimentalComposerSubmitOptions, ExperimentalComposerSelection, PluginComposerThreadRowStatus, ExperimentalOpenFixedTabOptions, JsonValue, BbNavigate, ExperimentalFileOpenOptions, PluginAppDefinition, PluginRpcContract, StandardSchemaV1InferInput, PluginRpcResult, PluginBrowserBbSdk, PluginRealtimeConnectionState, PluginSidebarThreadsState, PluginProvidersState, PluginCodeThemeState, BranchesState, CheckoutState, PluginSidebarPullRequest, PluginSidebarThreadRowStatus, PluginSidebarThreadShortcut, PluginSidebarSplitLayout, PluginEnvironmentProvidersState, PluginSidebarThreadActions } from '@get-bb/plugin-sdk';
10
+ import { ExperimentalSidebarFooterItemRegistration, PluginProviderIconRegistration, PluginHomepageSectionRegistration, PluginSettingsSectionRegistration, ExperimentalAppOverlayRegistration, PluginNavPanelRegistration, PluginThreadPanelActionRegistration, PluginNewThreadPanelActionRegistration, ComposerCustomization, PluginPendingInteractionRegistration, PluginSidebarFooterActionRegistration, ExperimentalSidebarNavigationRegistration, ExperimentalSidebarHeaderRegistration, PluginThreadListRegistration, PluginThreadHeaderActionRegistration, ExperimentalPluginBrowserToolbarActionRegistration, PluginFileOpenerRegistration, PluginSourceCodeRendererRegistration, PluginDiffRendererRegistration, PluginMessageDirectiveRegistration, PluginMessageActionRegistration, ExperimentalIconRegistration, PluginTimelineRendererRegistration, PluginEnvironmentProviderInputsRegistration, PluginMachineProviderInputsRegistration, PluginContentScriptRegistration, PluginComposerScope, PluginComposerTextEffect, PluginComposerMention, ExperimentalComposerSubmitOptions, ExperimentalComposerSelection, PluginComposerThreadRowStatus, ExperimentalOpenFixedTabOptions, JsonValue, BbNavigate, ExperimentalFileOpenOptions, PluginAppDefinition, PluginRpcContract, StandardSchemaV1InferInput, PluginRpcResult, PluginBrowserBbSdk, PluginRealtimeConnectionState, PluginSidebarThreadsState, PluginProvidersState, PluginCodeThemeState, BranchesState, CheckoutState, PluginSidebarPullRequest, PluginSidebarThreadRowStatus, PluginSidebarThreadShortcut, PluginSidebarSplitLayout, ExperimentalSidebarNavigationItem, PluginEnvironmentProvidersState, PluginSidebarThreadActions, ExperimentalSidebarNavigationActions } from '@get-bb/plugin-sdk';
11
11
 
12
12
  type ExperimentalSidebarFooterCommandKind = "close" | "open" | "toggle";
13
13
  interface ExperimentalSidebarFooterRuntimeSnapshot {
@@ -35,11 +35,11 @@ type CollectedPluginProviderIconRegistration = Omit<PluginProviderIconRegistrati
35
35
  *
36
36
  * - {@link installTestPluginRuntime} fills `globalThis.__bbPluginRuntime.
37
37
  * pluginSdkApp` with a test implementation of the `@get-bb/plugin-sdk/app`
38
- * surface (the same seam `bb plugin build` shims to the real app). It must
39
- * run BEFORE the plugin's `app.tsx` module evaluates, because that module
40
- * binds the runtime at import time — so import `app.tsx` through
41
- * {@link loadPluginApp}'s thunk form, or call the installer from a vitest
42
- * setup file when you prefer static imports.
38
+ * surface (the same seam `bb plugin build` shims to the real app). The
39
+ * `@get-bb/plugin-sdk/app` exports look the runtime up when they are called
40
+ * or rendered, so import order does not matter: install the runtime any time
41
+ * before the first hook runs ({@link loadPluginApp} and {@link renderSlot}
42
+ * install it for you).
43
43
  * - {@link loadPluginApp} runs the definition's setup against a validating
44
44
  * collector (ported from the BB app's interpreter, same error messages)
45
45
  * and returns the typed slot registrations.
@@ -150,9 +150,22 @@ interface SidebarActionCall {
150
150
  read?: boolean;
151
151
  }
152
152
  /**
153
- * Install the test runtime at `globalThis.__bbPluginRuntime.pluginSdkApp`.
154
- * Idempotent per module instance; must run before the plugin's `app.tsx`
155
- * (and therefore `@get-bb/plugin-sdk/app`) is imported.
153
+ * One recorded `experimental_useSidebarNavigation()` action, or a split drag
154
+ * started from `experimental_useSidebarNavigationSplit()` (`beginSplitDrag`).
155
+ */
156
+ interface SidebarNavigationCall {
157
+ method: keyof ExperimentalSidebarNavigationActions | "beginSplitDrag";
158
+ itemId?: string;
159
+ itemIds?: string[];
160
+ isVisible?: boolean;
161
+ openInSplit?: boolean;
162
+ }
163
+ /**
164
+ * Install the test runtime at `globalThis.__bbPluginRuntime.pluginSdkApp`,
165
+ * plus the React the `@get-bb/plugin-sdk/app` components render through.
166
+ * Idempotent per module instance. Call it before the first SDK hook runs or
167
+ * SDK component renders; when the plugin's modules are imported does not
168
+ * matter.
156
169
  */
157
170
  declare function installTestPluginRuntime(): void;
158
171
  interface CapturedPluginApp {
@@ -167,6 +180,7 @@ interface CapturedPluginApp {
167
180
  sidebarFooterActions: PluginSidebarFooterActionRegistration[];
168
181
  experimentalSidebarFooterItems: CollectedExperimentalSidebarFooterItem[];
169
182
  experimentalSidebarNavigations: ExperimentalSidebarNavigationRegistration[];
183
+ experimentalSidebarHeaders: ExperimentalSidebarHeaderRegistration[];
170
184
  threadLists: PluginThreadListRegistration[];
171
185
  threadHeaderActions: PluginThreadHeaderActionRegistration[];
172
186
  browserToolbarActions: ExperimentalPluginBrowserToolbarActionRegistration[];
@@ -188,9 +202,8 @@ type PluginAppModule = {
188
202
  type PluginAppSource = PluginAppDefinition | PluginAppModule | (() => Promise<PluginAppDefinition | PluginAppModule>);
189
203
  /**
190
204
  * Install the test runtime, resolve the plugin app definition, and capture
191
- * its slot registrations. Pass a thunk (`() => import("../app.tsx")`) so the
192
- * plugin module evaluates after the runtime is installed — a static import
193
- * would bind `definePluginApp` before the installer runs.
205
+ * its slot registrations. Pass the imported module, its default export, or a
206
+ * thunk (`() => import("../app.tsx")`).
194
207
  */
195
208
  declare function loadPluginApp(source: PluginAppSource): Promise<CapturedPluginApp>;
196
209
  interface ContentScriptTestMountOptions {
@@ -244,6 +257,8 @@ interface RenderSlotOptions<Contract extends PluginRpcContract = PluginRpcContra
244
257
  projectId?: string | null;
245
258
  threadId?: string | null;
246
259
  };
260
+ /** `experimental_usePluginId()` value; defaults to `test-plugin`. */
261
+ pluginId?: string;
247
262
  /** Initial `useRealtimeConnectionState()` value; defaults to `connected`. */
248
263
  realtimeConnectionState?: PluginRealtimeConnectionState;
249
264
  /** Initial state for this render's isolated composer scope and view. */
@@ -293,6 +308,16 @@ interface RenderSlotOptions<Contract extends PluginRpcContract = PluginRpcContra
293
308
  sidebarShortcuts?: Record<string, PluginSidebarThreadShortcut>;
294
309
  /** The split layout `useSidebarSplitLayout()` reports. Omitted → null. */
295
310
  sidebarSplitLayout?: PluginSidebarSplitLayout;
311
+ /**
312
+ * Items and the active item `experimental_useSidebarNavigation()` reports.
313
+ * Omitted → no items. Actions are recorded in
314
+ * `inspection.sidebarNavigationCalls` and do not change the items.
315
+ */
316
+ sidebarNavigation?: {
317
+ items?: readonly ExperimentalSidebarNavigationItem[];
318
+ activeItemId?: string | null;
319
+ isShortcutModifierHeld?: boolean;
320
+ };
296
321
  /**
297
322
  * The environment provider catalog `useEnvironmentProviders()` reports.
298
323
  * Omitted → a ready, empty list. Pass `{ status: "loading" }` to test that
@@ -345,6 +370,11 @@ interface RenderedSlotInspectionState {
345
370
  readonly experimental_fixedTabOpenCalls: ExperimentalFixedTabOpenCall[];
346
371
  /** Every `experimental_useSidebarThreadActions()` call, in order. */
347
372
  readonly sidebarActionCalls: SidebarActionCall[];
373
+ /**
374
+ * Every `experimental_useSidebarNavigation()` action and navigation split
375
+ * drag, in order.
376
+ */
377
+ readonly sidebarNavigationCalls: SidebarNavigationCall[];
348
378
  /** Every `useSdk()` call, in order, as `"<area>.<method>"`. */
349
379
  readonly sdkCalls: SdkCall[];
350
380
  /** Everything written through `useComposer()`. */
@@ -369,4 +399,4 @@ declare function renderSlot<Props extends object, Contract extends PluginRpcCont
369
399
  }, props: Props, options?: RenderSlotOptions<Contract>): RenderedSlot;
370
400
 
371
401
  export { installTestPluginRuntime, loadPluginApp, mountPluginContentScripts, renderSlot };
372
- export type { CapturedPluginApp, ComposerLog, ContentScriptTestMountOptions, ContentScriptThreadRowStatusCall, ExperimentalFixedTabOpenCall, MountedPluginContentScripts, NavigateCall, PluginAppSource, PluginRpcTestHandlers, PluginSdkTestFakes, RenderSlotOptions, RenderedSlot, RenderedSlotBehaviorDrivers, RenderedSlotInspectionState, RenderedSlotLifecycleControls, RpcCall, SdkCall, SidebarActionCall };
402
+ export type { CapturedPluginApp, ComposerLog, ContentScriptTestMountOptions, ContentScriptThreadRowStatusCall, ExperimentalFixedTabOpenCall, MountedPluginContentScripts, NavigateCall, PluginAppSource, PluginRpcTestHandlers, PluginSdkTestFakes, RenderSlotOptions, RenderedSlot, RenderedSlotBehaviorDrivers, RenderedSlotInspectionState, RenderedSlotLifecycleControls, RpcCall, SdkCall, SidebarActionCall, SidebarNavigationCall };
@@ -1321,6 +1321,12 @@ interface FakePluginLifecycleControls {
1321
1321
  * PluginContextStaleError). Idempotent.
1322
1322
  */
1323
1323
  dispose(): Promise<void>;
1324
+ /**
1325
+ * Run every handler registered with `bb.onInstall`, in
1326
+ * registration order, as bb does right after a fresh install. A handler
1327
+ * that throws is logged at warn level and the rest still run.
1328
+ */
1329
+ install(): Promise<void>;
1324
1330
  }
1325
1331
  /**
1326
1332
  * Complete fake-host harness. Direct members are retained for compatibility;
@@ -98,7 +98,7 @@ declare const appSettingsUpdateSchema: z$1.ZodUnion<readonly [z$1.ZodObject<{
98
98
  }, z$1.core.$strict>]>;
99
99
  type AppSettingsUpdate = z$1.infer<typeof appSettingsUpdateSchema>;
100
100
 
101
- declare const UI_PREFERENCE_KEYS: readonly ["sidebar.organizationMode", "sidebar.threadGrouping.environment", "sidebar.chronologicalSort", "sidebar.sortDirection", "sidebar.sectionOrder", "sidebar.manualSectionOrder", "sidebar.machineSectionOrder", "sidebar.hiddenGroups", "sidebar.collapsedSections", "sidebar.collapsedProjects", "sidebar.collapsedThreads", "sidebar.collapsedEnvironments", "sidebar.collapsedThreadSections", "sidebar.collapsedMachines", "sidebar.footerOrder", "sidebar.hiddenFooterItems", "sidebar.pluginPanelOrder", "sidebar.visiblePluginPanels", "sidebar.navigationProvider", "sidebar.threadListProvider"];
101
+ declare const UI_PREFERENCE_KEYS: readonly ["sidebar.organizationMode", "sidebar.threadGrouping.environment", "sidebar.chronologicalSort", "sidebar.sortDirection", "sidebar.sectionOrder", "sidebar.manualSectionOrder", "sidebar.machineSectionOrder", "sidebar.hiddenGroups", "sidebar.collapsedSections", "sidebar.collapsedProjects", "sidebar.collapsedThreads", "sidebar.collapsedEnvironments", "sidebar.collapsedThreadSections", "sidebar.collapsedMachines", "sidebar.footerOrder", "sidebar.hiddenFooterItems", "sidebar.pluginPanelOrder", "sidebar.visiblePluginPanels", "sidebar.navigationProvider", "sidebar.headerProvider", "sidebar.threadListProvider"];
102
102
  type UiPreferenceKey = (typeof UI_PREFERENCE_KEYS)[number];
103
103
  interface UiPreferenceDefinition<Schema extends z$1.ZodTypeAny = z$1.ZodTypeAny> {
104
104
  schema: Schema;
@@ -140,7 +140,8 @@ declare const uiPreferenceDefinitions: {
140
140
  readonly "sidebar.hiddenFooterItems": UiPreferenceDefinition<z$1.ZodArray<z$1.ZodString>>;
141
141
  readonly "sidebar.pluginPanelOrder": UiPreferenceDefinition<z$1.ZodArray<z$1.ZodString>>;
142
142
  readonly "sidebar.visiblePluginPanels": UiPreferenceDefinition<z$1.ZodNullable<z$1.ZodArray<z$1.ZodString>>>;
143
- readonly "sidebar.navigationProvider": UiPreferenceDefinition<z$1.ZodString>;
143
+ readonly "sidebar.navigationProvider": UiPreferenceDefinition<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;
144
+ readonly "sidebar.headerProvider": UiPreferenceDefinition<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;
144
145
  readonly "sidebar.threadListProvider": UiPreferenceDefinition<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;
145
146
  };
146
147
  type UiPreferenceValue<Key extends UiPreferenceKey> = z$1.infer<(typeof uiPreferenceDefinitions)[Key]["schema"]>;
@@ -223,6 +224,7 @@ declare const appKeybindingOverridesSchema: z$1.ZodArray<z$1.ZodObject<{
223
224
  "thread.previous": "thread.previous";
224
225
  "thread.rename": "thread.rename";
225
226
  "thread.search": "thread.search";
227
+ "window.find": "window.find";
226
228
  "window.new": "window.new";
227
229
  "workspace.openPreferred": "workspace.openPreferred";
228
230
  }>, z$1.ZodTemplateLiteral<`plugin:${string}/${string}`>]>;
@@ -5918,18 +5920,20 @@ declare const hostDaemonCommandRegistry: {
5918
5920
  }, z$1.core.$strict>, z$1.ZodObject<{
5919
5921
  sources: z$1.ZodArray<z$1.ZodObject<{
5920
5922
  icon: z$1.ZodOptional<z$1.ZodString>;
5921
- id: z$1.ZodEnum<{
5923
+ id: z$1.ZodUnion<readonly [z$1.ZodEnum<{
5922
5924
  arc: "arc";
5923
5925
  brave: "brave";
5924
5926
  chrome: "chrome";
5925
5927
  chromium: "chromium";
5928
+ dia: "dia";
5926
5929
  edge: "edge";
5927
5930
  firefox: "firefox";
5928
5931
  helium: "helium";
5929
5932
  opera: "opera";
5930
5933
  safari: "safari";
5931
5934
  vivaldi: "vivaldi";
5932
- }>;
5935
+ zen: "zen";
5936
+ }>, z$1.ZodString]>;
5933
5937
  name: z$1.ZodString;
5934
5938
  profiles: z$1.ZodArray<z$1.ZodObject<{
5935
5939
  cookieCount: z$1.ZodOptional<z$1.ZodNumber>;
@@ -5955,18 +5959,20 @@ declare const hostDaemonCommandRegistry: {
5955
5959
  }, z$1.core.$strip>, z$1.ZodObject<{
5956
5960
  kind: z$1.ZodLiteral<"personal">;
5957
5961
  }, z$1.core.$strip>], "kind">;
5958
- sourceId: z$1.ZodEnum<{
5962
+ sourceId: z$1.ZodUnion<readonly [z$1.ZodEnum<{
5959
5963
  arc: "arc";
5960
5964
  brave: "brave";
5961
5965
  chrome: "chrome";
5962
5966
  chromium: "chromium";
5967
+ dia: "dia";
5963
5968
  edge: "edge";
5964
5969
  firefox: "firefox";
5965
5970
  helium: "helium";
5966
5971
  opera: "opera";
5967
5972
  safari: "safari";
5968
5973
  vivaldi: "vivaldi";
5969
- }>;
5974
+ zen: "zen";
5975
+ }>, z$1.ZodString]>;
5970
5976
  sourceProfileDirectory: z$1.ZodString;
5971
5977
  type: z$1.ZodLiteral<"desktop.browser.import_cookies">;
5972
5978
  }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
@@ -8803,18 +8809,20 @@ declare const desktopBrowserCommandSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObj
8803
8809
  }, z$1.core.$strip>, z$1.ZodObject<{
8804
8810
  kind: z$1.ZodLiteral<"personal">;
8805
8811
  }, z$1.core.$strip>], "kind">;
8806
- sourceId: z$1.ZodEnum<{
8812
+ sourceId: z$1.ZodUnion<readonly [z$1.ZodEnum<{
8807
8813
  arc: "arc";
8808
8814
  brave: "brave";
8809
8815
  chrome: "chrome";
8810
8816
  chromium: "chromium";
8817
+ dia: "dia";
8811
8818
  edge: "edge";
8812
8819
  firefox: "firefox";
8813
8820
  helium: "helium";
8814
8821
  opera: "opera";
8815
8822
  safari: "safari";
8816
8823
  vivaldi: "vivaldi";
8817
- }>;
8824
+ zen: "zen";
8825
+ }>, z$1.ZodString]>;
8818
8826
  sourceProfileDirectory: z$1.ZodString;
8819
8827
  type: z$1.ZodLiteral<"desktop.browser.import_cookies">;
8820
8828
  }, z$1.core.$strict>], "type">;
@@ -8901,18 +8909,20 @@ declare const desktopBrowserResultSchemas: {
8901
8909
  "desktop.browser.list_import_sources": z$1.ZodObject<{
8902
8910
  sources: z$1.ZodArray<z$1.ZodObject<{
8903
8911
  icon: z$1.ZodOptional<z$1.ZodString>;
8904
- id: z$1.ZodEnum<{
8912
+ id: z$1.ZodUnion<readonly [z$1.ZodEnum<{
8905
8913
  arc: "arc";
8906
8914
  brave: "brave";
8907
8915
  chrome: "chrome";
8908
8916
  chromium: "chromium";
8917
+ dia: "dia";
8909
8918
  edge: "edge";
8910
8919
  firefox: "firefox";
8911
8920
  helium: "helium";
8912
8921
  opera: "opera";
8913
8922
  safari: "safari";
8914
8923
  vivaldi: "vivaldi";
8915
- }>;
8924
+ zen: "zen";
8925
+ }>, z$1.ZodString]>;
8916
8926
  name: z$1.ZodString;
8917
8927
  profiles: z$1.ZodArray<z$1.ZodObject<{
8918
8928
  cookieCount: z$1.ZodOptional<z$1.ZodNumber>;
@@ -10006,6 +10016,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10006
10016
  "thread.previous": "thread.previous";
10007
10017
  "thread.rename": "thread.rename";
10008
10018
  "thread.search": "thread.search";
10019
+ "window.find": "window.find";
10009
10020
  "window.new": "window.new";
10010
10021
  "workspace.openPreferred": "workspace.openPreferred";
10011
10022
  }>, z$1.ZodTemplateLiteral<`plugin:${string}/${string}`>]>;
@@ -10149,6 +10160,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10149
10160
  "thread.previous": "thread.previous";
10150
10161
  "thread.rename": "thread.rename";
10151
10162
  "thread.search": "thread.search";
10163
+ "window.find": "window.find";
10152
10164
  "window.new": "window.new";
10153
10165
  "workspace.openPreferred": "workspace.openPreferred";
10154
10166
  }>, z$1.ZodTemplateLiteral<`plugin:${string}/${string}`>]>;
@@ -10232,6 +10244,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10232
10244
  "thread.previous": "thread.previous";
10233
10245
  "thread.rename": "thread.rename";
10234
10246
  "thread.search": "thread.search";
10247
+ "window.find": "window.find";
10235
10248
  "window.new": "window.new";
10236
10249
  "workspace.openPreferred": "workspace.openPreferred";
10237
10250
  }>, z$1.ZodTemplateLiteral<`plugin:${string}/${string}`>]>;
@@ -14564,18 +14577,20 @@ declare const desktopBrowserImportCookiesRequestSchema: z$1.ZodObject<{
14564
14577
  }, z$1.core.$strip>, z$1.ZodObject<{
14565
14578
  kind: z$1.ZodLiteral<"personal">;
14566
14579
  }, z$1.core.$strip>], "kind">>;
14567
- sourceId: z$1.ZodEnum<{
14580
+ sourceId: z$1.ZodUnion<readonly [z$1.ZodEnum<{
14568
14581
  arc: "arc";
14569
14582
  brave: "brave";
14570
14583
  chrome: "chrome";
14571
14584
  chromium: "chromium";
14585
+ dia: "dia";
14572
14586
  edge: "edge";
14573
14587
  firefox: "firefox";
14574
14588
  helium: "helium";
14575
14589
  opera: "opera";
14576
14590
  safari: "safari";
14577
14591
  vivaldi: "vivaldi";
14578
- }>;
14592
+ zen: "zen";
14593
+ }>, z$1.ZodString]>;
14579
14594
  sourceProfileDirectory: z$1.ZodString;
14580
14595
  }, z$1.core.$strict>;
14581
14596
  type ExperimentalDesktopBrowserHostRequest = z$1.infer<typeof desktopBrowserHostRequestSchema>;
@@ -16766,15 +16781,21 @@ type ExperimentalSidebarNavigationAction = {
16766
16781
  kind: "search-threads";
16767
16782
  } | {
16768
16783
  kind: "open-extensions";
16784
+ } | {
16785
+ kind: "open-skills";
16769
16786
  } | {
16770
16787
  kind: "open-plugin-panel";
16771
16788
  pluginId: string;
16772
16789
  panelId: string;
16773
16790
  };
16774
- /** Semantic icon identity for one sidebar navigation item. */
16791
+ /**
16792
+ * Semantic icon identity for one sidebar navigation item. Render it with
16793
+ * {@link PluginSdkApp.experimental_SidebarNavigationIcon} to match bb's
16794
+ * artwork, including plugin branding.
16795
+ */
16775
16796
  type ExperimentalSidebarNavigationIcon = {
16776
16797
  kind: "host";
16777
- name: "extensions" | "new-thread" | "search";
16798
+ name: "extensions" | "new-thread" | "search" | "skills";
16778
16799
  } | {
16779
16800
  kind: "plugin";
16780
16801
  pluginId: string;
@@ -16782,28 +16803,164 @@ type ExperimentalSidebarNavigationIcon = {
16782
16803
  };
16783
16804
  /** One host-owned destination or action a plugin may arrange. */
16784
16805
  interface ExperimentalSidebarNavigationItem {
16806
+ /**
16807
+ * Arrangement key, stable across reloads: `__bb__/new-thread`,
16808
+ * `__bb__/search-threads`, `__bb__/extensions`, `__bb__/skills`,
16809
+ * `__bb__/automations`, or `<pluginId>/<panelId>`. The same keys appear in
16810
+ * the `sidebar.pluginPanelOrder` and `sidebar.visiblePluginPanels`
16811
+ * settings.
16812
+ */
16785
16813
  id: string;
16786
16814
  label: string;
16787
16815
  icon: ExperimentalSidebarNavigationIcon;
16788
16816
  action: ExperimentalSidebarNavigationAction;
16789
16817
  isDisabled: boolean;
16818
+ /**
16819
+ * False when the user hid the item from the sidebar. Draw hidden items in an
16820
+ * overflow menu rather than dropping them, so they stay reachable.
16821
+ */
16822
+ isVisible: boolean;
16823
+ /**
16824
+ * A plugin panel remembered from the last session whose bundle has not
16825
+ * registered yet. Activating it does nothing until it loads.
16826
+ */
16827
+ isLoading: boolean;
16828
+ /**
16829
+ * The plugin that contributed this panel; null for bb's own items. Gates
16830
+ * `openDetails` and `disablePlugin`.
16831
+ */
16832
+ pluginId: string | null;
16790
16833
  shortcut: ExperimentalSidebarNavigationShortcut | null;
16791
- experimental_splitProps: {
16792
- onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;
16793
- };
16834
+ /**
16835
+ * The panel's `experimental_sidebarAccessory`, already wrapped in the host's
16836
+ * crash boundary. Null for bb's items, panels without an accessory, and on
16837
+ * compact viewports. Keep it within one line, about 4rem by 1.25rem.
16838
+ */
16839
+ experimental_Accessory: ComponentType | null;
16794
16840
  }
16795
16841
  /** How the host should activate a sidebar navigation item. */
16796
16842
  interface ExperimentalSidebarNavigationActivationOptions {
16797
16843
  openInSplit: boolean;
16798
16844
  }
16799
- /** Props passed to an `experimental_sidebarNavigation` component. */
16800
- interface ExperimentalSidebarNavigationProps {
16845
+ /**
16846
+ * Host behavior for sidebar navigation items (see
16847
+ * {@link ExperimentalSidebarNavigationState}). Unknown item ids are ignored.
16848
+ * Calls made after the calling component unmounts do nothing.
16849
+ */
16850
+ interface ExperimentalSidebarNavigationActions {
16851
+ /**
16852
+ * Run the item's host behavior and close the mobile sidebar drawer.
16853
+ * `openInSplit` is ignored where splits are unavailable, and disabled or
16854
+ * loading items do nothing.
16855
+ */
16856
+ activate(itemId: string, options: ExperimentalSidebarNavigationActivationOptions): void;
16857
+ /** Hide or show one item. Persists to `sidebar.visiblePluginPanels`. */
16858
+ setVisible(itemId: string, isVisible: boolean): void;
16859
+ /**
16860
+ * Save a new order. Pass item ids in the order you want; unknown ids are
16861
+ * dropped and ids you leave out keep their relative order after the ones
16862
+ * you pass. Persists to `sidebar.pluginPanelOrder`.
16863
+ */
16864
+ setOrder(itemIds: readonly string[]): void;
16865
+ /** Open bb's customize editor, which reorders and hides items. */
16866
+ openCustomize(): void;
16867
+ /** Open the owning plugin's details. Does nothing when `pluginId` is null. */
16868
+ openDetails(itemId: string): void;
16869
+ /**
16870
+ * Disable the owning plugin, leave its panel if it is open, and show a
16871
+ * toast. Rejects after the host's error toast when disabling fails. Does
16872
+ * nothing when `pluginId` is null.
16873
+ */
16874
+ disablePlugin(itemId: string): Promise<void>;
16875
+ }
16876
+ /** What {@link PluginSdkApp.experimental_useSidebarNavigation} returns. */
16877
+ interface ExperimentalSidebarNavigationState {
16878
+ /** Every item in the user's saved order, visible and hidden. */
16801
16879
  items: readonly ExperimentalSidebarNavigationItem[];
16880
+ /** The item whose destination the route currently shows, or null. */
16802
16881
  activeItemId: string | null;
16882
+ /**
16883
+ * True while the user holds the app command modifier, when bb's own rows
16884
+ * reveal their `shortcut` labels. Show yours at the same time.
16885
+ */
16886
+ isShortcutModifierHeld: boolean;
16887
+ actions: ExperimentalSidebarNavigationActions;
16888
+ }
16889
+ /**
16890
+ * Per-item drag-to-split support (see
16891
+ * {@link PluginSdkApp.experimental_useSidebarNavigationSplit}). Same contract
16892
+ * as {@link PluginSidebarThreadSplit}.
16893
+ */
16894
+ interface ExperimentalSidebarNavigationSplit {
16895
+ /**
16896
+ * Spread onto the item's interactive element. Empty when the item cannot
16897
+ * open in a pane, so spreading it is always safe.
16898
+ */
16899
+ splitProps: {
16900
+ onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;
16901
+ };
16902
+ /**
16903
+ * False for items that cannot open in a pane (Search, Plugins, Skills), on
16904
+ * compact viewports, and when splits are unavailable.
16905
+ */
16906
+ isAvailable: boolean;
16907
+ /** Where this item's destination sits in the split layout, or null. */
16908
+ layout: {
16909
+ panes: readonly PluginSidebarSplitPane[];
16910
+ } | null;
16911
+ }
16912
+ /** Options for {@link PluginSdkApp.experimental_useSidebarNavigationSplit}. */
16913
+ interface ExperimentalSidebarNavigationSplitOptions {
16914
+ /**
16915
+ * `sidebar` (the default) engages the drag once the pointer leaves the
16916
+ * sidebar, so a row list with its own drag-to-reorder keeps working.
16917
+ * `distance` engages after a short movement in any direction; use it for
16918
+ * rows inside a menu or popover that covers the main area.
16919
+ */
16920
+ activation?: "distance" | "sidebar";
16921
+ /** Called when the drag engages, for example to close the menu the row is in. */
16922
+ onDragStart?: () => void;
16923
+ }
16924
+ /** Props for {@link PluginSdkApp.experimental_SidebarNavigationIcon}. */
16925
+ interface ExperimentalSidebarNavigationIconProps {
16926
+ icon: ExperimentalSidebarNavigationIcon;
16927
+ className?: string;
16928
+ }
16929
+ /**
16930
+ * Props passed to an `experimental_sidebarNavigation` component. Read the
16931
+ * items and their actions with
16932
+ * {@link PluginSdkApp.experimental_useSidebarNavigation}.
16933
+ */
16934
+ interface ExperimentalSidebarNavigationProps {
16803
16935
  isCompactViewport: boolean;
16804
- experimental_activate(itemId: string, options: ExperimentalSidebarNavigationActivationOptions): void;
16936
+ /**
16937
+ * Renders bb's bundled Navigation plugin, or nothing while it is disabled.
16938
+ * Kept for plugins written before `experimental_useSidebarNavigation`;
16939
+ * render items from that hook instead. Scheduled for removal.
16940
+ *
16941
+ * @deprecated
16942
+ */
16805
16943
  experimental_Original: ComponentType;
16806
16944
  }
16945
+ /**
16946
+ * Props passed to an `experimental_sidebarHeader` component, rendered in the
16947
+ * sidebar's header row between the sidebar toggle (and the macOS window
16948
+ * controls) and bb's back and forward buttons.
16949
+ */
16950
+ interface ExperimentalSidebarHeaderProps {
16951
+ /**
16952
+ * Width in px of the space the component may use, updated when the sidebar
16953
+ * resizes or the window chrome changes. It can be smaller than
16954
+ * `controlSize` in a narrow sidebar.
16955
+ */
16956
+ width: number;
16957
+ /**
16958
+ * Width and height in px of the header's own buttons, equal to the
16959
+ * `--bb-sidebar-control-size` CSS variable. Size your controls to match.
16960
+ */
16961
+ controlSize: number;
16962
+ isCompactViewport: boolean;
16963
+ }
16807
16964
  /**
16808
16965
  * Props passed to an `experimental_threadList` component — the sidebar's
16809
16966
  * scrolling thread area, replaced wholesale by one plugin.
@@ -17771,7 +17928,7 @@ interface PluginSidebarThreadActions {
17771
17928
  setRead(threadId: string, read: boolean): Promise<void>;
17772
17929
  /** Silent rename — no dialog. For inline editing in your own row. */
17773
17930
  rename(threadId: string, title: string): Promise<void>;
17774
- /** Archives the thread AND its children, closing any panes showing them. */
17931
+ /** Opens bb's confirmation before archiving the thread and its children. */
17775
17932
  archive(threadId: string): void;
17776
17933
  /**
17777
17934
  * Opens bb's delete confirmation, which counts child threads first. Deletion
@@ -17904,7 +18061,14 @@ interface PluginThreadListRegistration {
17904
18061
  description?: string;
17905
18062
  component: ComponentType<PluginThreadListProps>;
17906
18063
  }
17907
- /** Replace the bounded navigation controls above the sidebar thread list. */
18064
+ /**
18065
+ * Replace the navigation controls above the sidebar thread list. Exclusive:
18066
+ * the user picks one provider under Settings → Appearance → Navigation, and
18067
+ * bb ships its own rows as the bundled Navigation plugin
18068
+ * (`navigation/navigation`, the default). A picked provider that is disabled
18069
+ * or removed falls back to Navigation; a crashing provider is replaced by a
18070
+ * placeholder with a Reload button.
18071
+ */
17908
18072
  interface ExperimentalSidebarNavigationRegistration {
17909
18073
  /** Unique within the plugin; letters, digits, `-`, `_`. */
17910
18074
  id: string;
@@ -17914,6 +18078,23 @@ interface ExperimentalSidebarNavigationRegistration {
17914
18078
  description?: string;
17915
18079
  component: ComponentType<ExperimentalSidebarNavigationProps>;
17916
18080
  }
18081
+ /**
18082
+ * Render a component in the sidebar's header row, between the sidebar toggle
18083
+ * and bb's back and forward buttons. Exclusive: the user picks at most one
18084
+ * header under Settings → Appearance, and by default the header shows only
18085
+ * bb's own controls. Content is clipped to the row, so it cannot move the
18086
+ * thread list or bb's controls. On macOS the empty space keeps dragging the
18087
+ * window; buttons, links, and inputs do not.
18088
+ */
18089
+ interface ExperimentalSidebarHeaderRegistration {
18090
+ /** Unique within the plugin; letters, digits, `-`, `_`. */
18091
+ id: string;
18092
+ /** Label shown in Settings → Appearance and capability details. */
18093
+ title: string;
18094
+ /** Optional one-line description shown with the provider choice. */
18095
+ description?: string;
18096
+ component: ComponentType<ExperimentalSidebarHeaderProps>;
18097
+ }
17917
18098
  /**
17918
18099
  * Register this plugin as a viewer/editor for file extensions. By default,
17919
18100
  * matching files render the first applicable opener in deterministic slot
@@ -18318,6 +18499,12 @@ interface PluginAppSlots {
18318
18499
  sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;
18319
18500
  /** Replace the bounded sidebar navigation controls. */
18320
18501
  experimental_sidebarNavigation(registration: ExperimentalSidebarNavigationRegistration): void;
18502
+ /**
18503
+ * Render a component in the sidebar header row (see
18504
+ * {@link ExperimentalSidebarHeaderRegistration}). Experimental: see
18505
+ * docs/api_to_audit.md.
18506
+ */
18507
+ experimental_sidebarHeader(registration: ExperimentalSidebarHeaderRegistration): void;
18321
18508
  /**
18322
18509
  * Replace the sidebar's thread list (see
18323
18510
  * {@link PluginThreadListRegistration}). Experimental: see
@@ -19324,6 +19511,15 @@ interface PluginSdkApp {
19324
19511
  useRealtimeConnectionState(): PluginRealtimeConnectionState;
19325
19512
  useSettings(): PluginSettingsState;
19326
19513
  useBbContext(): BbContext;
19514
+ /**
19515
+ * The id of the plugin that owns the calling component: the same id
19516
+ * `bb.pluginId` reports on the server, derived from the package name. Key
19517
+ * state the plugin keeps outside bb's per-plugin storage with it, such as
19518
+ * localStorage entries and log prefixes, so a copy of the plugin published
19519
+ * under another name does not collide with the original. Experimental: see
19520
+ * docs/api_to_audit.md.
19521
+ */
19522
+ experimental_usePluginId(): string;
19327
19523
  useBbNavigate(): BbNavigate;
19328
19524
  /** Select one of this plugin's eligible fixed tabs on the current surface. */
19329
19525
  experimental_useAppPanel(): ExperimentalAppPanel;
@@ -19373,6 +19569,27 @@ interface PluginSdkApp {
19373
19569
  * Experimental: see docs/api_to_audit.md.
19374
19570
  */
19375
19571
  experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;
19572
+ /**
19573
+ * The sidebar navigation items in the user's saved order, the active item,
19574
+ * and the host actions that activate, hide, reorder, and customize them
19575
+ * (see {@link ExperimentalSidebarNavigationState}). One model shared by
19576
+ * every caller in the sidebar. Items keep their identity while unchanged.
19577
+ * Outside the sidebar it returns no items and actions that do nothing.
19578
+ * Experimental: see docs/api_to_audit.md.
19579
+ */
19580
+ experimental_useSidebarNavigation(): ExperimentalSidebarNavigationState;
19581
+ /**
19582
+ * Per-item drag-to-split support for navigation items (see
19583
+ * {@link ExperimentalSidebarNavigationSplit}). Call it once per rendered
19584
+ * item. Experimental: see docs/api_to_audit.md.
19585
+ */
19586
+ experimental_useSidebarNavigationSplit(itemId: string, options?: ExperimentalSidebarNavigationSplitOptions): ExperimentalSidebarNavigationSplit;
19587
+ /**
19588
+ * bb's artwork for a navigation item's icon: bb's glyphs for its own items,
19589
+ * and the contributing plugin's branding for plugin panels. Experimental:
19590
+ * see docs/api_to_audit.md.
19591
+ */
19592
+ experimental_SidebarNavigationIcon: ComponentType<ExperimentalSidebarNavigationIconProps>;
19376
19593
  /**
19377
19594
  * Whether the composer holds an unsent draft for one thread (see
19378
19595
  * {@link PluginSidebarThreadDraftState}). Per row, because a draft is
@@ -21634,6 +21851,16 @@ interface BbPluginApi {
21634
21851
  * The sanctioned place to clear timers and close connections.
21635
21852
  */
21636
21853
  onDispose(hook: () => void | Promise<void>): void;
21854
+ /**
21855
+ * Run a handler once, right after this plugin is installed and its server
21856
+ * entry has loaded: for example to pick its own sidebar slots with
21857
+ * `bb.sdk.system.uiPreferences`. It does not run on update, reload,
21858
+ * enable, or server restart, nor for bb's bundled plugins; reinstalling
21859
+ * after removal runs it again. Register it while the entry loads. A
21860
+ * handler that throws is logged and the install still succeeds; the
21861
+ * install waits at most 30 seconds for handlers to finish.
21862
+ */
21863
+ onInstall(handler: () => void | Promise<void>): void;
21637
21864
  }
21638
21865
 
21639
21866
  /** Duration suffixes, shared with the core `bb` CLI grammar. */
@@ -21869,4 +22096,4 @@ declare function cliCommand<const TOptions extends CliOptions = Record<string, n
21869
22096
  declare function defineCli(spec: PluginCliSpec): PluginCliRegistration;
21870
22097
 
21871
22098
  export { PLUGIN_CLI_OUTPUT_MAX_BYTES, PluginCliError, cliCommand, defineCli, defineRpcContract, experimental_defineHostEntry };
21872
- 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, ExperimentalSidebarFooter, ExperimentalSidebarFooterActionContext, ExperimentalSidebarFooterActionRegistration, ExperimentalSidebarFooterDisclosureController, ExperimentalSidebarFooterDisclosureProps, ExperimentalSidebarFooterDisclosureRegistration, ExperimentalSidebarFooterItemBase, ExperimentalSidebarFooterItemRegistration, ExperimentalSidebarNavigationAction, ExperimentalSidebarNavigationActivationOptions, ExperimentalSidebarNavigationIcon, ExperimentalSidebarNavigationItem, ExperimentalSidebarNavigationProps, ExperimentalSidebarNavigationRegistration, ExperimentalSidebarNavigationShortcut, JsonValue, MachineBootstrapApi, MachineBootstrapRequest, MachineExecutor, MachineExecutorRequest, MarkdownProps, MessageDispatchHookContext, MessageDispatchHookDecision, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAiServiceDeclaration, PluginAiServiceKind, PluginAiServices, 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 };
22099
+ 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, 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, PluginAiServiceDeclaration, PluginAiServiceKind, PluginAiServices, 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 };