@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.
@@ -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"]>;
@@ -5918,18 +5919,20 @@ declare const hostDaemonCommandRegistry: {
5918
5919
  }, z$1.core.$strict>, z$1.ZodObject<{
5919
5920
  sources: z$1.ZodArray<z$1.ZodObject<{
5920
5921
  icon: z$1.ZodOptional<z$1.ZodString>;
5921
- id: z$1.ZodEnum<{
5922
+ id: z$1.ZodUnion<readonly [z$1.ZodEnum<{
5922
5923
  arc: "arc";
5923
5924
  brave: "brave";
5924
5925
  chrome: "chrome";
5925
5926
  chromium: "chromium";
5927
+ dia: "dia";
5926
5928
  edge: "edge";
5927
5929
  firefox: "firefox";
5928
5930
  helium: "helium";
5929
5931
  opera: "opera";
5930
5932
  safari: "safari";
5931
5933
  vivaldi: "vivaldi";
5932
- }>;
5934
+ zen: "zen";
5935
+ }>, z$1.ZodString]>;
5933
5936
  name: z$1.ZodString;
5934
5937
  profiles: z$1.ZodArray<z$1.ZodObject<{
5935
5938
  cookieCount: z$1.ZodOptional<z$1.ZodNumber>;
@@ -5955,18 +5958,20 @@ declare const hostDaemonCommandRegistry: {
5955
5958
  }, z$1.core.$strip>, z$1.ZodObject<{
5956
5959
  kind: z$1.ZodLiteral<"personal">;
5957
5960
  }, z$1.core.$strip>], "kind">;
5958
- sourceId: z$1.ZodEnum<{
5961
+ sourceId: z$1.ZodUnion<readonly [z$1.ZodEnum<{
5959
5962
  arc: "arc";
5960
5963
  brave: "brave";
5961
5964
  chrome: "chrome";
5962
5965
  chromium: "chromium";
5966
+ dia: "dia";
5963
5967
  edge: "edge";
5964
5968
  firefox: "firefox";
5965
5969
  helium: "helium";
5966
5970
  opera: "opera";
5967
5971
  safari: "safari";
5968
5972
  vivaldi: "vivaldi";
5969
- }>;
5973
+ zen: "zen";
5974
+ }>, z$1.ZodString]>;
5970
5975
  sourceProfileDirectory: z$1.ZodString;
5971
5976
  type: z$1.ZodLiteral<"desktop.browser.import_cookies">;
5972
5977
  }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
@@ -8803,18 +8808,20 @@ declare const desktopBrowserCommandSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObj
8803
8808
  }, z$1.core.$strip>, z$1.ZodObject<{
8804
8809
  kind: z$1.ZodLiteral<"personal">;
8805
8810
  }, z$1.core.$strip>], "kind">;
8806
- sourceId: z$1.ZodEnum<{
8811
+ sourceId: z$1.ZodUnion<readonly [z$1.ZodEnum<{
8807
8812
  arc: "arc";
8808
8813
  brave: "brave";
8809
8814
  chrome: "chrome";
8810
8815
  chromium: "chromium";
8816
+ dia: "dia";
8811
8817
  edge: "edge";
8812
8818
  firefox: "firefox";
8813
8819
  helium: "helium";
8814
8820
  opera: "opera";
8815
8821
  safari: "safari";
8816
8822
  vivaldi: "vivaldi";
8817
- }>;
8823
+ zen: "zen";
8824
+ }>, z$1.ZodString]>;
8818
8825
  sourceProfileDirectory: z$1.ZodString;
8819
8826
  type: z$1.ZodLiteral<"desktop.browser.import_cookies">;
8820
8827
  }, z$1.core.$strict>], "type">;
@@ -8901,18 +8908,20 @@ declare const desktopBrowserResultSchemas: {
8901
8908
  "desktop.browser.list_import_sources": z$1.ZodObject<{
8902
8909
  sources: z$1.ZodArray<z$1.ZodObject<{
8903
8910
  icon: z$1.ZodOptional<z$1.ZodString>;
8904
- id: z$1.ZodEnum<{
8911
+ id: z$1.ZodUnion<readonly [z$1.ZodEnum<{
8905
8912
  arc: "arc";
8906
8913
  brave: "brave";
8907
8914
  chrome: "chrome";
8908
8915
  chromium: "chromium";
8916
+ dia: "dia";
8909
8917
  edge: "edge";
8910
8918
  firefox: "firefox";
8911
8919
  helium: "helium";
8912
8920
  opera: "opera";
8913
8921
  safari: "safari";
8914
8922
  vivaldi: "vivaldi";
8915
- }>;
8923
+ zen: "zen";
8924
+ }>, z$1.ZodString]>;
8916
8925
  name: z$1.ZodString;
8917
8926
  profiles: z$1.ZodArray<z$1.ZodObject<{
8918
8927
  cookieCount: z$1.ZodOptional<z$1.ZodNumber>;
@@ -14564,18 +14573,20 @@ declare const desktopBrowserImportCookiesRequestSchema: z$1.ZodObject<{
14564
14573
  }, z$1.core.$strip>, z$1.ZodObject<{
14565
14574
  kind: z$1.ZodLiteral<"personal">;
14566
14575
  }, z$1.core.$strip>], "kind">>;
14567
- sourceId: z$1.ZodEnum<{
14576
+ sourceId: z$1.ZodUnion<readonly [z$1.ZodEnum<{
14568
14577
  arc: "arc";
14569
14578
  brave: "brave";
14570
14579
  chrome: "chrome";
14571
14580
  chromium: "chromium";
14581
+ dia: "dia";
14572
14582
  edge: "edge";
14573
14583
  firefox: "firefox";
14574
14584
  helium: "helium";
14575
14585
  opera: "opera";
14576
14586
  safari: "safari";
14577
14587
  vivaldi: "vivaldi";
14578
- }>;
14588
+ zen: "zen";
14589
+ }>, z$1.ZodString]>;
14579
14590
  sourceProfileDirectory: z$1.ZodString;
14580
14591
  }, z$1.core.$strict>;
14581
14592
  type ExperimentalDesktopBrowserHostRequest = z$1.infer<typeof desktopBrowserHostRequestSchema>;
@@ -16766,15 +16777,21 @@ type ExperimentalSidebarNavigationAction = {
16766
16777
  kind: "search-threads";
16767
16778
  } | {
16768
16779
  kind: "open-extensions";
16780
+ } | {
16781
+ kind: "open-skills";
16769
16782
  } | {
16770
16783
  kind: "open-plugin-panel";
16771
16784
  pluginId: string;
16772
16785
  panelId: string;
16773
16786
  };
16774
- /** Semantic icon identity for one sidebar navigation item. */
16787
+ /**
16788
+ * Semantic icon identity for one sidebar navigation item. Render it with
16789
+ * {@link PluginSdkApp.experimental_SidebarNavigationIcon} to match bb's
16790
+ * artwork, including plugin branding.
16791
+ */
16775
16792
  type ExperimentalSidebarNavigationIcon = {
16776
16793
  kind: "host";
16777
- name: "extensions" | "new-thread" | "search";
16794
+ name: "extensions" | "new-thread" | "search" | "skills";
16778
16795
  } | {
16779
16796
  kind: "plugin";
16780
16797
  pluginId: string;
@@ -16782,28 +16799,164 @@ type ExperimentalSidebarNavigationIcon = {
16782
16799
  };
16783
16800
  /** One host-owned destination or action a plugin may arrange. */
16784
16801
  interface ExperimentalSidebarNavigationItem {
16802
+ /**
16803
+ * Arrangement key, stable across reloads: `__bb__/new-thread`,
16804
+ * `__bb__/search-threads`, `__bb__/extensions`, `__bb__/skills`,
16805
+ * `__bb__/automations`, or `<pluginId>/<panelId>`. The same keys appear in
16806
+ * the `sidebar.pluginPanelOrder` and `sidebar.visiblePluginPanels`
16807
+ * settings.
16808
+ */
16785
16809
  id: string;
16786
16810
  label: string;
16787
16811
  icon: ExperimentalSidebarNavigationIcon;
16788
16812
  action: ExperimentalSidebarNavigationAction;
16789
16813
  isDisabled: boolean;
16814
+ /**
16815
+ * False when the user hid the item from the sidebar. Draw hidden items in an
16816
+ * overflow menu rather than dropping them, so they stay reachable.
16817
+ */
16818
+ isVisible: boolean;
16819
+ /**
16820
+ * A plugin panel remembered from the last session whose bundle has not
16821
+ * registered yet. Activating it does nothing until it loads.
16822
+ */
16823
+ isLoading: boolean;
16824
+ /**
16825
+ * The plugin that contributed this panel; null for bb's own items. Gates
16826
+ * `openDetails` and `disablePlugin`.
16827
+ */
16828
+ pluginId: string | null;
16790
16829
  shortcut: ExperimentalSidebarNavigationShortcut | null;
16791
- experimental_splitProps: {
16792
- onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;
16793
- };
16830
+ /**
16831
+ * The panel's `experimental_sidebarAccessory`, already wrapped in the host's
16832
+ * crash boundary. Null for bb's items, panels without an accessory, and on
16833
+ * compact viewports. Keep it within one line, about 4rem by 1.25rem.
16834
+ */
16835
+ experimental_Accessory: ComponentType | null;
16794
16836
  }
16795
16837
  /** How the host should activate a sidebar navigation item. */
16796
16838
  interface ExperimentalSidebarNavigationActivationOptions {
16797
16839
  openInSplit: boolean;
16798
16840
  }
16799
- /** Props passed to an `experimental_sidebarNavigation` component. */
16800
- interface ExperimentalSidebarNavigationProps {
16841
+ /**
16842
+ * Host behavior for sidebar navigation items (see
16843
+ * {@link ExperimentalSidebarNavigationState}). Unknown item ids are ignored.
16844
+ * Calls made after the calling component unmounts do nothing.
16845
+ */
16846
+ interface ExperimentalSidebarNavigationActions {
16847
+ /**
16848
+ * Run the item's host behavior and close the mobile sidebar drawer.
16849
+ * `openInSplit` is ignored where splits are unavailable, and disabled or
16850
+ * loading items do nothing.
16851
+ */
16852
+ activate(itemId: string, options: ExperimentalSidebarNavigationActivationOptions): void;
16853
+ /** Hide or show one item. Persists to `sidebar.visiblePluginPanels`. */
16854
+ setVisible(itemId: string, isVisible: boolean): void;
16855
+ /**
16856
+ * Save a new order. Pass item ids in the order you want; unknown ids are
16857
+ * dropped and ids you leave out keep their relative order after the ones
16858
+ * you pass. Persists to `sidebar.pluginPanelOrder`.
16859
+ */
16860
+ setOrder(itemIds: readonly string[]): void;
16861
+ /** Open bb's customize editor, which reorders and hides items. */
16862
+ openCustomize(): void;
16863
+ /** Open the owning plugin's details. Does nothing when `pluginId` is null. */
16864
+ openDetails(itemId: string): void;
16865
+ /**
16866
+ * Disable the owning plugin, leave its panel if it is open, and show a
16867
+ * toast. Rejects after the host's error toast when disabling fails. Does
16868
+ * nothing when `pluginId` is null.
16869
+ */
16870
+ disablePlugin(itemId: string): Promise<void>;
16871
+ }
16872
+ /** What {@link PluginSdkApp.experimental_useSidebarNavigation} returns. */
16873
+ interface ExperimentalSidebarNavigationState {
16874
+ /** Every item in the user's saved order, visible and hidden. */
16801
16875
  items: readonly ExperimentalSidebarNavigationItem[];
16876
+ /** The item whose destination the route currently shows, or null. */
16802
16877
  activeItemId: string | null;
16878
+ /**
16879
+ * True while the user holds the app command modifier, when bb's own rows
16880
+ * reveal their `shortcut` labels. Show yours at the same time.
16881
+ */
16882
+ isShortcutModifierHeld: boolean;
16883
+ actions: ExperimentalSidebarNavigationActions;
16884
+ }
16885
+ /**
16886
+ * Per-item drag-to-split support (see
16887
+ * {@link PluginSdkApp.experimental_useSidebarNavigationSplit}). Same contract
16888
+ * as {@link PluginSidebarThreadSplit}.
16889
+ */
16890
+ interface ExperimentalSidebarNavigationSplit {
16891
+ /**
16892
+ * Spread onto the item's interactive element. Empty when the item cannot
16893
+ * open in a pane, so spreading it is always safe.
16894
+ */
16895
+ splitProps: {
16896
+ onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;
16897
+ };
16898
+ /**
16899
+ * False for items that cannot open in a pane (Search, Plugins, Skills), on
16900
+ * compact viewports, and when splits are unavailable.
16901
+ */
16902
+ isAvailable: boolean;
16903
+ /** Where this item's destination sits in the split layout, or null. */
16904
+ layout: {
16905
+ panes: readonly PluginSidebarSplitPane[];
16906
+ } | null;
16907
+ }
16908
+ /** Options for {@link PluginSdkApp.experimental_useSidebarNavigationSplit}. */
16909
+ interface ExperimentalSidebarNavigationSplitOptions {
16910
+ /**
16911
+ * `sidebar` (the default) engages the drag once the pointer leaves the
16912
+ * sidebar, so a row list with its own drag-to-reorder keeps working.
16913
+ * `distance` engages after a short movement in any direction; use it for
16914
+ * rows inside a menu or popover that covers the main area.
16915
+ */
16916
+ activation?: "distance" | "sidebar";
16917
+ /** Called when the drag engages, for example to close the menu the row is in. */
16918
+ onDragStart?: () => void;
16919
+ }
16920
+ /** Props for {@link PluginSdkApp.experimental_SidebarNavigationIcon}. */
16921
+ interface ExperimentalSidebarNavigationIconProps {
16922
+ icon: ExperimentalSidebarNavigationIcon;
16923
+ className?: string;
16924
+ }
16925
+ /**
16926
+ * Props passed to an `experimental_sidebarNavigation` component. Read the
16927
+ * items and their actions with
16928
+ * {@link PluginSdkApp.experimental_useSidebarNavigation}.
16929
+ */
16930
+ interface ExperimentalSidebarNavigationProps {
16803
16931
  isCompactViewport: boolean;
16804
- experimental_activate(itemId: string, options: ExperimentalSidebarNavigationActivationOptions): void;
16932
+ /**
16933
+ * Renders bb's bundled Navigation plugin, or nothing while it is disabled.
16934
+ * Kept for plugins written before `experimental_useSidebarNavigation`;
16935
+ * render items from that hook instead. Scheduled for removal.
16936
+ *
16937
+ * @deprecated
16938
+ */
16805
16939
  experimental_Original: ComponentType;
16806
16940
  }
16941
+ /**
16942
+ * Props passed to an `experimental_sidebarHeader` component, rendered in the
16943
+ * sidebar's header row between the sidebar toggle (and the macOS window
16944
+ * controls) and bb's back and forward buttons.
16945
+ */
16946
+ interface ExperimentalSidebarHeaderProps {
16947
+ /**
16948
+ * Width in px of the space the component may use, updated when the sidebar
16949
+ * resizes or the window chrome changes. It can be smaller than
16950
+ * `controlSize` in a narrow sidebar.
16951
+ */
16952
+ width: number;
16953
+ /**
16954
+ * Width and height in px of the header's own buttons, equal to the
16955
+ * `--bb-sidebar-control-size` CSS variable. Size your controls to match.
16956
+ */
16957
+ controlSize: number;
16958
+ isCompactViewport: boolean;
16959
+ }
16807
16960
  /**
16808
16961
  * Props passed to an `experimental_threadList` component — the sidebar's
16809
16962
  * scrolling thread area, replaced wholesale by one plugin.
@@ -17904,7 +18057,14 @@ interface PluginThreadListRegistration {
17904
18057
  description?: string;
17905
18058
  component: ComponentType<PluginThreadListProps>;
17906
18059
  }
17907
- /** Replace the bounded navigation controls above the sidebar thread list. */
18060
+ /**
18061
+ * Replace the navigation controls above the sidebar thread list. Exclusive:
18062
+ * the user picks one provider under Settings → Appearance → Navigation, and
18063
+ * bb ships its own rows as the bundled Navigation plugin
18064
+ * (`navigation/navigation`, the default). A picked provider that is disabled
18065
+ * or removed falls back to Navigation; a crashing provider is replaced by a
18066
+ * placeholder with a Reload button.
18067
+ */
17908
18068
  interface ExperimentalSidebarNavigationRegistration {
17909
18069
  /** Unique within the plugin; letters, digits, `-`, `_`. */
17910
18070
  id: string;
@@ -17914,6 +18074,23 @@ interface ExperimentalSidebarNavigationRegistration {
17914
18074
  description?: string;
17915
18075
  component: ComponentType<ExperimentalSidebarNavigationProps>;
17916
18076
  }
18077
+ /**
18078
+ * Render a component in the sidebar's header row, between the sidebar toggle
18079
+ * and bb's back and forward buttons. Exclusive: the user picks at most one
18080
+ * header under Settings → Appearance, and by default the header shows only
18081
+ * bb's own controls. Content is clipped to the row, so it cannot move the
18082
+ * thread list or bb's controls. On macOS the empty space keeps dragging the
18083
+ * window; buttons, links, and inputs do not.
18084
+ */
18085
+ interface ExperimentalSidebarHeaderRegistration {
18086
+ /** Unique within the plugin; letters, digits, `-`, `_`. */
18087
+ id: string;
18088
+ /** Label shown in Settings → Appearance and capability details. */
18089
+ title: string;
18090
+ /** Optional one-line description shown with the provider choice. */
18091
+ description?: string;
18092
+ component: ComponentType<ExperimentalSidebarHeaderProps>;
18093
+ }
17917
18094
  /**
17918
18095
  * Register this plugin as a viewer/editor for file extensions. By default,
17919
18096
  * matching files render the first applicable opener in deterministic slot
@@ -18318,6 +18495,12 @@ interface PluginAppSlots {
18318
18495
  sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;
18319
18496
  /** Replace the bounded sidebar navigation controls. */
18320
18497
  experimental_sidebarNavigation(registration: ExperimentalSidebarNavigationRegistration): void;
18498
+ /**
18499
+ * Render a component in the sidebar header row (see
18500
+ * {@link ExperimentalSidebarHeaderRegistration}). Experimental: see
18501
+ * docs/api_to_audit.md.
18502
+ */
18503
+ experimental_sidebarHeader(registration: ExperimentalSidebarHeaderRegistration): void;
18321
18504
  /**
18322
18505
  * Replace the sidebar's thread list (see
18323
18506
  * {@link PluginThreadListRegistration}). Experimental: see
@@ -19373,6 +19556,27 @@ interface PluginSdkApp {
19373
19556
  * Experimental: see docs/api_to_audit.md.
19374
19557
  */
19375
19558
  experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;
19559
+ /**
19560
+ * The sidebar navigation items in the user's saved order, the active item,
19561
+ * and the host actions that activate, hide, reorder, and customize them
19562
+ * (see {@link ExperimentalSidebarNavigationState}). One model shared by
19563
+ * every caller in the sidebar. Items keep their identity while unchanged.
19564
+ * Outside the sidebar it returns no items and actions that do nothing.
19565
+ * Experimental: see docs/api_to_audit.md.
19566
+ */
19567
+ experimental_useSidebarNavigation(): ExperimentalSidebarNavigationState;
19568
+ /**
19569
+ * Per-item drag-to-split support for navigation items (see
19570
+ * {@link ExperimentalSidebarNavigationSplit}). Call it once per rendered
19571
+ * item. Experimental: see docs/api_to_audit.md.
19572
+ */
19573
+ experimental_useSidebarNavigationSplit(itemId: string, options?: ExperimentalSidebarNavigationSplitOptions): ExperimentalSidebarNavigationSplit;
19574
+ /**
19575
+ * bb's artwork for a navigation item's icon: bb's glyphs for its own items,
19576
+ * and the contributing plugin's branding for plugin panels. Experimental:
19577
+ * see docs/api_to_audit.md.
19578
+ */
19579
+ experimental_SidebarNavigationIcon: ComponentType<ExperimentalSidebarNavigationIconProps>;
19376
19580
  /**
19377
19581
  * Whether the composer holds an unsent draft for one thread (see
19378
19582
  * {@link PluginSidebarThreadDraftState}). Per row, because a draft is
@@ -19501,8 +19705,10 @@ interface PluginSdkApp {
19501
19705
  */
19502
19706
  experimental_BranchPicker: ComponentType<BranchPickerProps>;
19503
19707
  /**
19504
- * Search and refresh the branch list for one project source. Experimental:
19505
- * see docs/api_to_audit.md.
19708
+ * Search and refresh the branch list for one project source. `query` is
19709
+ * debounced before it reaches the host, so a control can pass it on every
19710
+ * keystroke; filtering the returned lists stays the caller's job.
19711
+ * Experimental: see docs/api_to_audit.md.
19506
19712
  */
19507
19713
  experimental_useBranches(args: UseBranchesArgs): BranchesState;
19508
19714
  /**
@@ -21632,6 +21838,16 @@ interface BbPluginApi {
21632
21838
  * The sanctioned place to clear timers and close connections.
21633
21839
  */
21634
21840
  onDispose(hook: () => void | Promise<void>): void;
21841
+ /**
21842
+ * Run a handler once, right after this plugin is installed and its server
21843
+ * entry has loaded: for example to pick its own sidebar slots with
21844
+ * `bb.sdk.system.uiPreferences`. It does not run on update, reload,
21845
+ * enable, or server restart, nor for bb's bundled plugins; reinstalling
21846
+ * after removal runs it again. Register it while the entry loads. A
21847
+ * handler that throws is logged and the install still succeeds; the
21848
+ * install waits at most 30 seconds for handlers to finish.
21849
+ */
21850
+ onInstall(handler: () => void | Promise<void>): void;
21635
21851
  }
21636
21852
 
21637
21853
  /** Duration suffixes, shared with the core `bb` CLI grammar. */
@@ -21867,4 +22083,4 @@ declare function cliCommand<const TOptions extends CliOptions = Record<string, n
21867
22083
  declare function defineCli(spec: PluginCliSpec): PluginCliRegistration;
21868
22084
 
21869
22085
  export { PLUGIN_CLI_OUTPUT_MAX_BYTES, PluginCliError, cliCommand, defineCli, defineRpcContract, experimental_defineHostEntry };
21870
- 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 };
22086
+ 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 };
package/dist/app.js CHANGED
@@ -29,6 +29,9 @@ var experimental_useSidebarThreads = runtime.experimental_useSidebarThreads;
29
29
  var experimental_useSidebarThreadActions = runtime.experimental_useSidebarThreadActions;
30
30
  var experimental_useSidebarThreadPullRequest = runtime.experimental_useSidebarThreadPullRequest;
31
31
  var experimental_useSidebarThreadSplit = runtime.experimental_useSidebarThreadSplit;
32
+ var experimental_useSidebarNavigation = runtime.experimental_useSidebarNavigation;
33
+ var experimental_useSidebarNavigationSplit = runtime.experimental_useSidebarNavigationSplit;
34
+ var experimental_SidebarNavigationIcon = runtime.experimental_SidebarNavigationIcon;
32
35
  var useSidebarThreadDraft = runtime.useSidebarThreadDraft;
33
36
  var useSidebarThreadDraftIds = runtime.useSidebarThreadDraftIds;
34
37
  var useSidebarThreadRowStatus = runtime.useSidebarThreadRowStatus;
@@ -54,6 +57,7 @@ export {
54
57
  experimental_PermissionModePicker,
55
58
  experimental_ProviderIcon,
56
59
  experimental_ProviderModelPicker,
60
+ experimental_SidebarNavigationIcon,
57
61
  experimental_SourceCode,
58
62
  experimental_useAppPanel,
59
63
  experimental_useBranches,
@@ -61,6 +65,8 @@ export {
61
65
  experimental_useCodeTheme,
62
66
  experimental_useFixedTabTarget,
63
67
  experimental_useProviders,
68
+ experimental_useSidebarNavigation,
69
+ experimental_useSidebarNavigationSplit,
64
70
  experimental_useSidebarThreadActions,
65
71
  experimental_useSidebarThreadPullRequest,
66
72
  experimental_useSidebarThreadSplit,
@@ -446,6 +446,7 @@ function collectPluginAppRegistrations(definition, onComposerCustomizationReject
446
446
  sidebarFooterActions: [],
447
447
  experimentalSidebarFooterItems: [],
448
448
  experimentalSidebarNavigations: [],
449
+ experimentalSidebarHeaders: [],
449
450
  threadLists: [],
450
451
  threadHeaderActions: [],
451
452
  browserToolbarActions: [],
@@ -474,6 +475,7 @@ function collectPluginAppRegistrations(definition, onComposerCustomizationReject
474
475
  pendingInteraction: /* @__PURE__ */ new Set(),
475
476
  sidebarFooterItem: /* @__PURE__ */ new Set(),
476
477
  sidebarNavigation: /* @__PURE__ */ new Set(),
478
+ sidebarHeader: /* @__PURE__ */ new Set(),
477
479
  threadList: /* @__PURE__ */ new Set(),
478
480
  threadHeaderAction: /* @__PURE__ */ new Set(),
479
481
  browserToolbarAction: /* @__PURE__ */ new Set(),
@@ -683,6 +685,15 @@ function collectPluginAppRegistrations(definition, onComposerCustomizationReject
683
685
  )
684
686
  );
685
687
  },
688
+ experimental_sidebarHeader(registration) {
689
+ collected.experimentalSidebarHeaders.push(
690
+ collectTitledComponent(
691
+ "slots.experimental_sidebarHeader",
692
+ seenIds.sidebarHeader,
693
+ registration
694
+ )
695
+ );
696
+ },
686
697
  experimental_threadList(registration) {
687
698
  collected.threadLists.push(
688
699
  collectTitledComponent(