@get-bb/plugin-sdk 0.5.8 → 0.5.15

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.
@@ -149,7 +149,7 @@ declare const appSettingsUpdateSchema: z$1.ZodUnion<readonly [z$1.ZodObject<{
149
149
  }, z$1.core.$strict>]>;
150
150
  type AppSettingsUpdate = z$1.infer<typeof appSettingsUpdateSchema>;
151
151
 
152
- 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"];
152
+ 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"];
153
153
  type UiPreferenceKey = (typeof UI_PREFERENCE_KEYS)[number];
154
154
  interface UiPreferenceDefinition<Schema extends z$1.ZodTypeAny = z$1.ZodTypeAny> {
155
155
  schema: Schema;
@@ -191,7 +191,8 @@ declare const uiPreferenceDefinitions: {
191
191
  readonly "sidebar.hiddenFooterItems": UiPreferenceDefinition<z$1.ZodArray<z$1.ZodString>>;
192
192
  readonly "sidebar.pluginPanelOrder": UiPreferenceDefinition<z$1.ZodArray<z$1.ZodString>>;
193
193
  readonly "sidebar.visiblePluginPanels": UiPreferenceDefinition<z$1.ZodNullable<z$1.ZodArray<z$1.ZodString>>>;
194
- readonly "sidebar.navigationProvider": UiPreferenceDefinition<z$1.ZodString>;
194
+ readonly "sidebar.navigationProvider": UiPreferenceDefinition<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;
195
+ readonly "sidebar.headerProvider": UiPreferenceDefinition<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;
195
196
  readonly "sidebar.threadListProvider": UiPreferenceDefinition<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;
196
197
  };
197
198
  type UiPreferenceValue<Key extends UiPreferenceKey> = z$1.infer<(typeof uiPreferenceDefinitions)[Key]["schema"]>;
@@ -5867,18 +5868,20 @@ declare const hostDaemonCommandRegistry: {
5867
5868
  }, z$1.core.$strict>, z$1.ZodObject<{
5868
5869
  sources: z$1.ZodArray<z$1.ZodObject<{
5869
5870
  icon: z$1.ZodOptional<z$1.ZodString>;
5870
- id: z$1.ZodEnum<{
5871
+ id: z$1.ZodUnion<readonly [z$1.ZodEnum<{
5871
5872
  arc: "arc";
5872
5873
  brave: "brave";
5873
5874
  chrome: "chrome";
5874
5875
  chromium: "chromium";
5876
+ dia: "dia";
5875
5877
  edge: "edge";
5876
5878
  firefox: "firefox";
5877
5879
  helium: "helium";
5878
5880
  opera: "opera";
5879
5881
  safari: "safari";
5880
5882
  vivaldi: "vivaldi";
5881
- }>;
5883
+ zen: "zen";
5884
+ }>, z$1.ZodString]>;
5882
5885
  name: z$1.ZodString;
5883
5886
  profiles: z$1.ZodArray<z$1.ZodObject<{
5884
5887
  cookieCount: z$1.ZodOptional<z$1.ZodNumber>;
@@ -5904,18 +5907,20 @@ declare const hostDaemonCommandRegistry: {
5904
5907
  }, z$1.core.$strip>, z$1.ZodObject<{
5905
5908
  kind: z$1.ZodLiteral<"personal">;
5906
5909
  }, z$1.core.$strip>], "kind">;
5907
- sourceId: z$1.ZodEnum<{
5910
+ sourceId: z$1.ZodUnion<readonly [z$1.ZodEnum<{
5908
5911
  arc: "arc";
5909
5912
  brave: "brave";
5910
5913
  chrome: "chrome";
5911
5914
  chromium: "chromium";
5915
+ dia: "dia";
5912
5916
  edge: "edge";
5913
5917
  firefox: "firefox";
5914
5918
  helium: "helium";
5915
5919
  opera: "opera";
5916
5920
  safari: "safari";
5917
5921
  vivaldi: "vivaldi";
5918
- }>;
5922
+ zen: "zen";
5923
+ }>, z$1.ZodString]>;
5919
5924
  sourceProfileDirectory: z$1.ZodString;
5920
5925
  type: z$1.ZodLiteral<"desktop.browser.import_cookies">;
5921
5926
  }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
@@ -8752,18 +8757,20 @@ declare const desktopBrowserCommandSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObj
8752
8757
  }, z$1.core.$strip>, z$1.ZodObject<{
8753
8758
  kind: z$1.ZodLiteral<"personal">;
8754
8759
  }, z$1.core.$strip>], "kind">;
8755
- sourceId: z$1.ZodEnum<{
8760
+ sourceId: z$1.ZodUnion<readonly [z$1.ZodEnum<{
8756
8761
  arc: "arc";
8757
8762
  brave: "brave";
8758
8763
  chrome: "chrome";
8759
8764
  chromium: "chromium";
8765
+ dia: "dia";
8760
8766
  edge: "edge";
8761
8767
  firefox: "firefox";
8762
8768
  helium: "helium";
8763
8769
  opera: "opera";
8764
8770
  safari: "safari";
8765
8771
  vivaldi: "vivaldi";
8766
- }>;
8772
+ zen: "zen";
8773
+ }>, z$1.ZodString]>;
8767
8774
  sourceProfileDirectory: z$1.ZodString;
8768
8775
  type: z$1.ZodLiteral<"desktop.browser.import_cookies">;
8769
8776
  }, z$1.core.$strict>], "type">;
@@ -8850,18 +8857,20 @@ declare const desktopBrowserResultSchemas: {
8850
8857
  "desktop.browser.list_import_sources": z$1.ZodObject<{
8851
8858
  sources: z$1.ZodArray<z$1.ZodObject<{
8852
8859
  icon: z$1.ZodOptional<z$1.ZodString>;
8853
- id: z$1.ZodEnum<{
8860
+ id: z$1.ZodUnion<readonly [z$1.ZodEnum<{
8854
8861
  arc: "arc";
8855
8862
  brave: "brave";
8856
8863
  chrome: "chrome";
8857
8864
  chromium: "chromium";
8865
+ dia: "dia";
8858
8866
  edge: "edge";
8859
8867
  firefox: "firefox";
8860
8868
  helium: "helium";
8861
8869
  opera: "opera";
8862
8870
  safari: "safari";
8863
8871
  vivaldi: "vivaldi";
8864
- }>;
8872
+ zen: "zen";
8873
+ }>, z$1.ZodString]>;
8865
8874
  name: z$1.ZodString;
8866
8875
  profiles: z$1.ZodArray<z$1.ZodObject<{
8867
8876
  cookieCount: z$1.ZodOptional<z$1.ZodNumber>;
@@ -14512,18 +14521,20 @@ declare const desktopBrowserImportCookiesRequestSchema: z$1.ZodObject<{
14512
14521
  }, z$1.core.$strip>, z$1.ZodObject<{
14513
14522
  kind: z$1.ZodLiteral<"personal">;
14514
14523
  }, z$1.core.$strip>], "kind">>;
14515
- sourceId: z$1.ZodEnum<{
14524
+ sourceId: z$1.ZodUnion<readonly [z$1.ZodEnum<{
14516
14525
  arc: "arc";
14517
14526
  brave: "brave";
14518
14527
  chrome: "chrome";
14519
14528
  chromium: "chromium";
14529
+ dia: "dia";
14520
14530
  edge: "edge";
14521
14531
  firefox: "firefox";
14522
14532
  helium: "helium";
14523
14533
  opera: "opera";
14524
14534
  safari: "safari";
14525
14535
  vivaldi: "vivaldi";
14526
- }>;
14536
+ zen: "zen";
14537
+ }>, z$1.ZodString]>;
14527
14538
  sourceProfileDirectory: z$1.ZodString;
14528
14539
  }, z$1.core.$strict>;
14529
14540
  type ExperimentalDesktopBrowserHostRequest = z$1.infer<typeof desktopBrowserHostRequestSchema>;
@@ -16614,15 +16625,21 @@ type ExperimentalSidebarNavigationAction = {
16614
16625
  kind: "search-threads";
16615
16626
  } | {
16616
16627
  kind: "open-extensions";
16628
+ } | {
16629
+ kind: "open-skills";
16617
16630
  } | {
16618
16631
  kind: "open-plugin-panel";
16619
16632
  pluginId: string;
16620
16633
  panelId: string;
16621
16634
  };
16622
- /** Semantic icon identity for one sidebar navigation item. */
16635
+ /**
16636
+ * Semantic icon identity for one sidebar navigation item. Render it with
16637
+ * {@link PluginSdkApp.experimental_SidebarNavigationIcon} to match bb's
16638
+ * artwork, including plugin branding.
16639
+ */
16623
16640
  type ExperimentalSidebarNavigationIcon = {
16624
16641
  kind: "host";
16625
- name: "extensions" | "new-thread" | "search";
16642
+ name: "extensions" | "new-thread" | "search" | "skills";
16626
16643
  } | {
16627
16644
  kind: "plugin";
16628
16645
  pluginId: string;
@@ -16630,28 +16647,164 @@ type ExperimentalSidebarNavigationIcon = {
16630
16647
  };
16631
16648
  /** One host-owned destination or action a plugin may arrange. */
16632
16649
  interface ExperimentalSidebarNavigationItem {
16650
+ /**
16651
+ * Arrangement key, stable across reloads: `__bb__/new-thread`,
16652
+ * `__bb__/search-threads`, `__bb__/extensions`, `__bb__/skills`,
16653
+ * `__bb__/automations`, or `<pluginId>/<panelId>`. The same keys appear in
16654
+ * the `sidebar.pluginPanelOrder` and `sidebar.visiblePluginPanels`
16655
+ * settings.
16656
+ */
16633
16657
  id: string;
16634
16658
  label: string;
16635
16659
  icon: ExperimentalSidebarNavigationIcon;
16636
16660
  action: ExperimentalSidebarNavigationAction;
16637
16661
  isDisabled: boolean;
16662
+ /**
16663
+ * False when the user hid the item from the sidebar. Draw hidden items in an
16664
+ * overflow menu rather than dropping them, so they stay reachable.
16665
+ */
16666
+ isVisible: boolean;
16667
+ /**
16668
+ * A plugin panel remembered from the last session whose bundle has not
16669
+ * registered yet. Activating it does nothing until it loads.
16670
+ */
16671
+ isLoading: boolean;
16672
+ /**
16673
+ * The plugin that contributed this panel; null for bb's own items. Gates
16674
+ * `openDetails` and `disablePlugin`.
16675
+ */
16676
+ pluginId: string | null;
16638
16677
  shortcut: ExperimentalSidebarNavigationShortcut | null;
16639
- experimental_splitProps: {
16640
- onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;
16641
- };
16678
+ /**
16679
+ * The panel's `experimental_sidebarAccessory`, already wrapped in the host's
16680
+ * crash boundary. Null for bb's items, panels without an accessory, and on
16681
+ * compact viewports. Keep it within one line, about 4rem by 1.25rem.
16682
+ */
16683
+ experimental_Accessory: ComponentType | null;
16642
16684
  }
16643
16685
  /** How the host should activate a sidebar navigation item. */
16644
16686
  interface ExperimentalSidebarNavigationActivationOptions {
16645
16687
  openInSplit: boolean;
16646
16688
  }
16647
- /** Props passed to an `experimental_sidebarNavigation` component. */
16648
- interface ExperimentalSidebarNavigationProps {
16689
+ /**
16690
+ * Host behavior for sidebar navigation items (see
16691
+ * {@link ExperimentalSidebarNavigationState}). Unknown item ids are ignored.
16692
+ * Calls made after the calling component unmounts do nothing.
16693
+ */
16694
+ interface ExperimentalSidebarNavigationActions {
16695
+ /**
16696
+ * Run the item's host behavior and close the mobile sidebar drawer.
16697
+ * `openInSplit` is ignored where splits are unavailable, and disabled or
16698
+ * loading items do nothing.
16699
+ */
16700
+ activate(itemId: string, options: ExperimentalSidebarNavigationActivationOptions): void;
16701
+ /** Hide or show one item. Persists to `sidebar.visiblePluginPanels`. */
16702
+ setVisible(itemId: string, isVisible: boolean): void;
16703
+ /**
16704
+ * Save a new order. Pass item ids in the order you want; unknown ids are
16705
+ * dropped and ids you leave out keep their relative order after the ones
16706
+ * you pass. Persists to `sidebar.pluginPanelOrder`.
16707
+ */
16708
+ setOrder(itemIds: readonly string[]): void;
16709
+ /** Open bb's customize editor, which reorders and hides items. */
16710
+ openCustomize(): void;
16711
+ /** Open the owning plugin's details. Does nothing when `pluginId` is null. */
16712
+ openDetails(itemId: string): void;
16713
+ /**
16714
+ * Disable the owning plugin, leave its panel if it is open, and show a
16715
+ * toast. Rejects after the host's error toast when disabling fails. Does
16716
+ * nothing when `pluginId` is null.
16717
+ */
16718
+ disablePlugin(itemId: string): Promise<void>;
16719
+ }
16720
+ /** What {@link PluginSdkApp.experimental_useSidebarNavigation} returns. */
16721
+ interface ExperimentalSidebarNavigationState {
16722
+ /** Every item in the user's saved order, visible and hidden. */
16649
16723
  items: readonly ExperimentalSidebarNavigationItem[];
16724
+ /** The item whose destination the route currently shows, or null. */
16650
16725
  activeItemId: string | null;
16726
+ /**
16727
+ * True while the user holds the app command modifier, when bb's own rows
16728
+ * reveal their `shortcut` labels. Show yours at the same time.
16729
+ */
16730
+ isShortcutModifierHeld: boolean;
16731
+ actions: ExperimentalSidebarNavigationActions;
16732
+ }
16733
+ /**
16734
+ * Per-item drag-to-split support (see
16735
+ * {@link PluginSdkApp.experimental_useSidebarNavigationSplit}). Same contract
16736
+ * as {@link PluginSidebarThreadSplit}.
16737
+ */
16738
+ interface ExperimentalSidebarNavigationSplit {
16739
+ /**
16740
+ * Spread onto the item's interactive element. Empty when the item cannot
16741
+ * open in a pane, so spreading it is always safe.
16742
+ */
16743
+ splitProps: {
16744
+ onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;
16745
+ };
16746
+ /**
16747
+ * False for items that cannot open in a pane (Search, Plugins, Skills), on
16748
+ * compact viewports, and when splits are unavailable.
16749
+ */
16750
+ isAvailable: boolean;
16751
+ /** Where this item's destination sits in the split layout, or null. */
16752
+ layout: {
16753
+ panes: readonly PluginSidebarSplitPane[];
16754
+ } | null;
16755
+ }
16756
+ /** Options for {@link PluginSdkApp.experimental_useSidebarNavigationSplit}. */
16757
+ interface ExperimentalSidebarNavigationSplitOptions {
16758
+ /**
16759
+ * `sidebar` (the default) engages the drag once the pointer leaves the
16760
+ * sidebar, so a row list with its own drag-to-reorder keeps working.
16761
+ * `distance` engages after a short movement in any direction; use it for
16762
+ * rows inside a menu or popover that covers the main area.
16763
+ */
16764
+ activation?: "distance" | "sidebar";
16765
+ /** Called when the drag engages, for example to close the menu the row is in. */
16766
+ onDragStart?: () => void;
16767
+ }
16768
+ /** Props for {@link PluginSdkApp.experimental_SidebarNavigationIcon}. */
16769
+ interface ExperimentalSidebarNavigationIconProps {
16770
+ icon: ExperimentalSidebarNavigationIcon;
16771
+ className?: string;
16772
+ }
16773
+ /**
16774
+ * Props passed to an `experimental_sidebarNavigation` component. Read the
16775
+ * items and their actions with
16776
+ * {@link PluginSdkApp.experimental_useSidebarNavigation}.
16777
+ */
16778
+ interface ExperimentalSidebarNavigationProps {
16651
16779
  isCompactViewport: boolean;
16652
- experimental_activate(itemId: string, options: ExperimentalSidebarNavigationActivationOptions): void;
16780
+ /**
16781
+ * Renders bb's bundled Navigation plugin, or nothing while it is disabled.
16782
+ * Kept for plugins written before `experimental_useSidebarNavigation`;
16783
+ * render items from that hook instead. Scheduled for removal.
16784
+ *
16785
+ * @deprecated
16786
+ */
16653
16787
  experimental_Original: ComponentType;
16654
16788
  }
16789
+ /**
16790
+ * Props passed to an `experimental_sidebarHeader` component, rendered in the
16791
+ * sidebar's header row between the sidebar toggle (and the macOS window
16792
+ * controls) and bb's back and forward buttons.
16793
+ */
16794
+ interface ExperimentalSidebarHeaderProps {
16795
+ /**
16796
+ * Width in px of the space the component may use, updated when the sidebar
16797
+ * resizes or the window chrome changes. It can be smaller than
16798
+ * `controlSize` in a narrow sidebar.
16799
+ */
16800
+ width: number;
16801
+ /**
16802
+ * Width and height in px of the header's own buttons, equal to the
16803
+ * `--bb-sidebar-control-size` CSS variable. Size your controls to match.
16804
+ */
16805
+ controlSize: number;
16806
+ isCompactViewport: boolean;
16807
+ }
16655
16808
  /**
16656
16809
  * Props passed to an `experimental_threadList` component — the sidebar's
16657
16810
  * scrolling thread area, replaced wholesale by one plugin.
@@ -17752,7 +17905,14 @@ interface PluginThreadListRegistration {
17752
17905
  description?: string;
17753
17906
  component: ComponentType<PluginThreadListProps>;
17754
17907
  }
17755
- /** Replace the bounded navigation controls above the sidebar thread list. */
17908
+ /**
17909
+ * Replace the navigation controls above the sidebar thread list. Exclusive:
17910
+ * the user picks one provider under Settings → Appearance → Navigation, and
17911
+ * bb ships its own rows as the bundled Navigation plugin
17912
+ * (`navigation/navigation`, the default). A picked provider that is disabled
17913
+ * or removed falls back to Navigation; a crashing provider is replaced by a
17914
+ * placeholder with a Reload button.
17915
+ */
17756
17916
  interface ExperimentalSidebarNavigationRegistration {
17757
17917
  /** Unique within the plugin; letters, digits, `-`, `_`. */
17758
17918
  id: string;
@@ -17762,6 +17922,23 @@ interface ExperimentalSidebarNavigationRegistration {
17762
17922
  description?: string;
17763
17923
  component: ComponentType<ExperimentalSidebarNavigationProps>;
17764
17924
  }
17925
+ /**
17926
+ * Render a component in the sidebar's header row, between the sidebar toggle
17927
+ * and bb's back and forward buttons. Exclusive: the user picks at most one
17928
+ * header under Settings → Appearance, and by default the header shows only
17929
+ * bb's own controls. Content is clipped to the row, so it cannot move the
17930
+ * thread list or bb's controls. On macOS the empty space keeps dragging the
17931
+ * window; buttons, links, and inputs do not.
17932
+ */
17933
+ interface ExperimentalSidebarHeaderRegistration {
17934
+ /** Unique within the plugin; letters, digits, `-`, `_`. */
17935
+ id: string;
17936
+ /** Label shown in Settings → Appearance and capability details. */
17937
+ title: string;
17938
+ /** Optional one-line description shown with the provider choice. */
17939
+ description?: string;
17940
+ component: ComponentType<ExperimentalSidebarHeaderProps>;
17941
+ }
17765
17942
  /**
17766
17943
  * Register this plugin as a viewer/editor for file extensions. By default,
17767
17944
  * matching files render the first applicable opener in deterministic slot
@@ -18166,6 +18343,12 @@ interface PluginAppSlots {
18166
18343
  sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;
18167
18344
  /** Replace the bounded sidebar navigation controls. */
18168
18345
  experimental_sidebarNavigation(registration: ExperimentalSidebarNavigationRegistration): void;
18346
+ /**
18347
+ * Render a component in the sidebar header row (see
18348
+ * {@link ExperimentalSidebarHeaderRegistration}). Experimental: see
18349
+ * docs/api_to_audit.md.
18350
+ */
18351
+ experimental_sidebarHeader(registration: ExperimentalSidebarHeaderRegistration): void;
18169
18352
  /**
18170
18353
  * Replace the sidebar's thread list (see
18171
18354
  * {@link PluginThreadListRegistration}). Experimental: see
@@ -19221,6 +19404,27 @@ interface PluginSdkApp {
19221
19404
  * Experimental: see docs/api_to_audit.md.
19222
19405
  */
19223
19406
  experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;
19407
+ /**
19408
+ * The sidebar navigation items in the user's saved order, the active item,
19409
+ * and the host actions that activate, hide, reorder, and customize them
19410
+ * (see {@link ExperimentalSidebarNavigationState}). One model shared by
19411
+ * every caller in the sidebar. Items keep their identity while unchanged.
19412
+ * Outside the sidebar it returns no items and actions that do nothing.
19413
+ * Experimental: see docs/api_to_audit.md.
19414
+ */
19415
+ experimental_useSidebarNavigation(): ExperimentalSidebarNavigationState;
19416
+ /**
19417
+ * Per-item drag-to-split support for navigation items (see
19418
+ * {@link ExperimentalSidebarNavigationSplit}). Call it once per rendered
19419
+ * item. Experimental: see docs/api_to_audit.md.
19420
+ */
19421
+ experimental_useSidebarNavigationSplit(itemId: string, options?: ExperimentalSidebarNavigationSplitOptions): ExperimentalSidebarNavigationSplit;
19422
+ /**
19423
+ * bb's artwork for a navigation item's icon: bb's glyphs for its own items,
19424
+ * and the contributing plugin's branding for plugin panels. Experimental:
19425
+ * see docs/api_to_audit.md.
19426
+ */
19427
+ experimental_SidebarNavigationIcon: ComponentType<ExperimentalSidebarNavigationIconProps>;
19224
19428
  /**
19225
19429
  * Whether the composer holds an unsent draft for one thread (see
19226
19430
  * {@link PluginSidebarThreadDraftState}). Per row, because a draft is
@@ -19349,8 +19553,10 @@ interface PluginSdkApp {
19349
19553
  */
19350
19554
  experimental_BranchPicker: ComponentType<BranchPickerProps>;
19351
19555
  /**
19352
- * Search and refresh the branch list for one project source. Experimental:
19353
- * see docs/api_to_audit.md.
19556
+ * Search and refresh the branch list for one project source. `query` is
19557
+ * debounced before it reaches the host, so a control can pass it on every
19558
+ * keystroke; filtering the returned lists stays the caller's job.
19559
+ * Experimental: see docs/api_to_audit.md.
19354
19560
  */
19355
19561
  experimental_useBranches(args: UseBranchesArgs): BranchesState;
19356
19562
  /**
@@ -19408,6 +19614,9 @@ declare const experimental_useSidebarThreads: (options?: {
19408
19614
  declare const experimental_useSidebarThreadActions: () => PluginSidebarThreadActions;
19409
19615
  declare const experimental_useSidebarThreadPullRequest: (threadId: string) => PluginSidebarThreadPullRequestState;
19410
19616
  declare const experimental_useSidebarThreadSplit: (threadId: string) => PluginSidebarThreadSplit;
19617
+ declare const experimental_useSidebarNavigation: () => ExperimentalSidebarNavigationState;
19618
+ declare const experimental_useSidebarNavigationSplit: (itemId: string, options?: ExperimentalSidebarNavigationSplitOptions) => ExperimentalSidebarNavigationSplit;
19619
+ declare const experimental_SidebarNavigationIcon: react.ComponentType<ExperimentalSidebarNavigationIconProps>;
19411
19620
  declare const useSidebarThreadDraft: (threadId: string) => PluginSidebarThreadDraftState;
19412
19621
  declare const useSidebarThreadDraftIds: () => ReadonlySet<string>;
19413
19622
  declare const useSidebarThreadRowStatus: (threadId: string) => PluginSidebarThreadRowStatus | null;
@@ -19420,5 +19629,5 @@ declare const useSdk: () => PluginBrowserBbSdk;
19420
19629
  declare const experimental_useProviders: () => PluginProvidersState;
19421
19630
  declare const experimental_useCodeTheme: () => PluginCodeThemeState;
19422
19631
 
19423
- export { Markdown, ThreadChat, ThreadTitle, UrlLink, definePluginApp, experimental_BranchPicker, experimental_Diff, experimental_FileLink, experimental_Icon, experimental_NewThreadComposer, experimental_PermissionModePicker, experimental_ProviderIcon, experimental_ProviderModelPicker, experimental_SourceCode, experimental_useAppPanel, experimental_useBranches, experimental_useCheckoutState, experimental_useCodeTheme, experimental_useFixedTabTarget, experimental_useProviders, experimental_useSidebarThreadActions, experimental_useSidebarThreadPullRequest, experimental_useSidebarThreadSplit, experimental_useSidebarThreads, useBbContext, useBbNavigate, useComposer, useComposerView, useEnvironmentProviders, useRealtime, useRealtimeConnectionState, useRpc, useSdk, useSettings, useSidebarSplitLayout, useSidebarThreadDraft, useSidebarThreadDraftIds, useSidebarThreadRowStatus, useSidebarThreadRowStatuses, useSidebarThreadShortcut };
19424
- 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, ExperimentalSidebarNavigationAction, ExperimentalSidebarNavigationActivationOptions, ExperimentalSidebarNavigationIcon, ExperimentalSidebarNavigationItem, ExperimentalSidebarNavigationProps, ExperimentalSidebarNavigationRegistration, ExperimentalSidebarNavigationShortcut, 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 };
19632
+ 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_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 };
19633
+ 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 };
@@ -6,7 +6,7 @@
6
6
  // and read the real source: https://github.com/get-bb/bb
7
7
 
8
8
  import { z } from 'zod';
9
- import { ExperimentalSidebarFooterActionContext, ExperimentalSidebarFooterItemRegistration, PluginHomepageSectionRegistration, PluginSettingsSectionRegistration, ExperimentalAppOverlayRegistration, PluginNavPanelRegistration, PluginThreadPanelActionRegistration, PluginNewThreadPanelActionRegistration, ComposerCustomization, PluginPendingInteractionRegistration, PluginSidebarFooterActionRegistration, ExperimentalSidebarNavigationRegistration, PluginThreadListRegistration, PluginThreadHeaderActionRegistration, ExperimentalPluginBrowserToolbarActionRegistration, PluginFileOpenerRegistration, PluginSourceCodeRendererRegistration, PluginDiffRendererRegistration, PluginMessageDirectiveRegistration, PluginMessageActionRegistration, PluginCommandRegistration, PluginProviderIconRegistration, ExperimentalIconRegistration, PluginTimelineRendererRegistration, PluginEnvironmentProviderInputsRegistration, PluginMachineProviderInputsRegistration, PluginContentScriptRegistration, PluginAppDefinition } from '@get-bb/plugin-sdk';
9
+ import { ExperimentalSidebarFooterActionContext, ExperimentalSidebarFooterItemRegistration, PluginHomepageSectionRegistration, PluginSettingsSectionRegistration, ExperimentalAppOverlayRegistration, PluginNavPanelRegistration, PluginThreadPanelActionRegistration, PluginNewThreadPanelActionRegistration, ComposerCustomization, PluginPendingInteractionRegistration, PluginSidebarFooterActionRegistration, ExperimentalSidebarNavigationRegistration, ExperimentalSidebarHeaderRegistration, PluginThreadListRegistration, PluginThreadHeaderActionRegistration, ExperimentalPluginBrowserToolbarActionRegistration, PluginFileOpenerRegistration, PluginSourceCodeRendererRegistration, PluginDiffRendererRegistration, PluginMessageDirectiveRegistration, PluginMessageActionRegistration, PluginCommandRegistration, PluginProviderIconRegistration, ExperimentalIconRegistration, PluginTimelineRendererRegistration, PluginEnvironmentProviderInputsRegistration, PluginMachineProviderInputsRegistration, PluginContentScriptRegistration, PluginAppDefinition } from '@get-bb/plugin-sdk';
10
10
 
11
11
  type ExperimentalSidebarFooterCommandKind = "close" | "open" | "toggle";
12
12
  interface ExperimentalSidebarFooterRuntimeSnapshot {
@@ -64,6 +64,7 @@ interface CollectedPluginAppRegistrations {
64
64
  sidebarFooterActions: PluginSidebarFooterActionRegistration[];
65
65
  experimentalSidebarFooterItems: CollectedExperimentalSidebarFooterItem[];
66
66
  experimentalSidebarNavigations: ExperimentalSidebarNavigationRegistration[];
67
+ experimentalSidebarHeaders: ExperimentalSidebarHeaderRegistration[];
67
68
  threadLists: PluginThreadListRegistration[];
68
69
  threadHeaderActions: PluginThreadHeaderActionRegistration[];
69
70
  browserToolbarActions: ExperimentalPluginBrowserToolbarActionRegistration[];
@@ -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 {
@@ -149,6 +149,17 @@ interface SidebarActionCall {
149
149
  pinned?: boolean;
150
150
  read?: boolean;
151
151
  }
152
+ /**
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
+ }
152
163
  /**
153
164
  * Install the test runtime at `globalThis.__bbPluginRuntime.pluginSdkApp`.
154
165
  * Idempotent per module instance; must run before the plugin's `app.tsx`
@@ -167,6 +178,7 @@ interface CapturedPluginApp {
167
178
  sidebarFooterActions: PluginSidebarFooterActionRegistration[];
168
179
  experimentalSidebarFooterItems: CollectedExperimentalSidebarFooterItem[];
169
180
  experimentalSidebarNavigations: ExperimentalSidebarNavigationRegistration[];
181
+ experimentalSidebarHeaders: ExperimentalSidebarHeaderRegistration[];
170
182
  threadLists: PluginThreadListRegistration[];
171
183
  threadHeaderActions: PluginThreadHeaderActionRegistration[];
172
184
  browserToolbarActions: ExperimentalPluginBrowserToolbarActionRegistration[];
@@ -293,6 +305,16 @@ interface RenderSlotOptions<Contract extends PluginRpcContract = PluginRpcContra
293
305
  sidebarShortcuts?: Record<string, PluginSidebarThreadShortcut>;
294
306
  /** The split layout `useSidebarSplitLayout()` reports. Omitted → null. */
295
307
  sidebarSplitLayout?: PluginSidebarSplitLayout;
308
+ /**
309
+ * Items and the active item `experimental_useSidebarNavigation()` reports.
310
+ * Omitted → no items. Actions are recorded in
311
+ * `inspection.sidebarNavigationCalls` and do not change the items.
312
+ */
313
+ sidebarNavigation?: {
314
+ items?: readonly ExperimentalSidebarNavigationItem[];
315
+ activeItemId?: string | null;
316
+ isShortcutModifierHeld?: boolean;
317
+ };
296
318
  /**
297
319
  * The environment provider catalog `useEnvironmentProviders()` reports.
298
320
  * Omitted → a ready, empty list. Pass `{ status: "loading" }` to test that
@@ -345,6 +367,11 @@ interface RenderedSlotInspectionState {
345
367
  readonly experimental_fixedTabOpenCalls: ExperimentalFixedTabOpenCall[];
346
368
  /** Every `experimental_useSidebarThreadActions()` call, in order. */
347
369
  readonly sidebarActionCalls: SidebarActionCall[];
370
+ /**
371
+ * Every `experimental_useSidebarNavigation()` action and navigation split
372
+ * drag, in order.
373
+ */
374
+ readonly sidebarNavigationCalls: SidebarNavigationCall[];
348
375
  /** Every `useSdk()` call, in order, as `"<area>.<method>"`. */
349
376
  readonly sdkCalls: SdkCall[];
350
377
  /** Everything written through `useComposer()`. */
@@ -369,4 +396,4 @@ declare function renderSlot<Props extends object, Contract extends PluginRpcCont
369
396
  }, props: Props, options?: RenderSlotOptions<Contract>): RenderedSlot;
370
397
 
371
398
  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 };
399
+ 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;