@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.
package/README.md CHANGED
@@ -178,13 +178,15 @@ slot.lifecycle.unmount();
178
178
  await scripts.lifecycle.dispose();
179
179
  ```
180
180
 
181
- `loadPluginApp` installs the runtime before a thunk import and validates all
182
- registrations. `mountPluginContentScripts` mirrors the host's ordered mount,
181
+ `loadPluginApp` installs the runtime and validates all registrations; pass the
182
+ imported module or a thunk. `@get-bb/plugin-sdk/app` exports look the runtime
183
+ up when they are called or rendered, so a static import of `app.tsx` or of
184
+ components works too. `mountPluginContentScripts` mirrors the host's ordered mount,
183
185
  rollback, independent per-window signal, and exact-once disposal. `renderSlot` supplies
184
186
  RPC, realtime, settings, navigation, context, and scoped composer behavior,
185
187
  then returns Testing Library queries plus the same behavior/inspection/lifecycle
186
- split. Use a setup-file `installTestPluginRuntime()` only when a static app
187
- import is unavoidable.
188
+ split; it installs the runtime too. Call `installTestPluginRuntime()` yourself
189
+ only when a test renders plugin components without `renderSlot`.
188
190
 
189
191
  ## Fidelity boundaries
190
192
 
@@ -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"]>;
@@ -274,6 +275,7 @@ declare const appKeybindingOverridesSchema: z$1.ZodArray<z$1.ZodObject<{
274
275
  "thread.previous": "thread.previous";
275
276
  "thread.rename": "thread.rename";
276
277
  "thread.search": "thread.search";
278
+ "window.find": "window.find";
277
279
  "window.new": "window.new";
278
280
  "workspace.openPreferred": "workspace.openPreferred";
279
281
  }>, z$1.ZodTemplateLiteral<`plugin:${string}/${string}`>]>;
@@ -5867,18 +5869,20 @@ declare const hostDaemonCommandRegistry: {
5867
5869
  }, z$1.core.$strict>, z$1.ZodObject<{
5868
5870
  sources: z$1.ZodArray<z$1.ZodObject<{
5869
5871
  icon: z$1.ZodOptional<z$1.ZodString>;
5870
- id: z$1.ZodEnum<{
5872
+ id: z$1.ZodUnion<readonly [z$1.ZodEnum<{
5871
5873
  arc: "arc";
5872
5874
  brave: "brave";
5873
5875
  chrome: "chrome";
5874
5876
  chromium: "chromium";
5877
+ dia: "dia";
5875
5878
  edge: "edge";
5876
5879
  firefox: "firefox";
5877
5880
  helium: "helium";
5878
5881
  opera: "opera";
5879
5882
  safari: "safari";
5880
5883
  vivaldi: "vivaldi";
5881
- }>;
5884
+ zen: "zen";
5885
+ }>, z$1.ZodString]>;
5882
5886
  name: z$1.ZodString;
5883
5887
  profiles: z$1.ZodArray<z$1.ZodObject<{
5884
5888
  cookieCount: z$1.ZodOptional<z$1.ZodNumber>;
@@ -5904,18 +5908,20 @@ declare const hostDaemonCommandRegistry: {
5904
5908
  }, z$1.core.$strip>, z$1.ZodObject<{
5905
5909
  kind: z$1.ZodLiteral<"personal">;
5906
5910
  }, z$1.core.$strip>], "kind">;
5907
- sourceId: z$1.ZodEnum<{
5911
+ sourceId: z$1.ZodUnion<readonly [z$1.ZodEnum<{
5908
5912
  arc: "arc";
5909
5913
  brave: "brave";
5910
5914
  chrome: "chrome";
5911
5915
  chromium: "chromium";
5916
+ dia: "dia";
5912
5917
  edge: "edge";
5913
5918
  firefox: "firefox";
5914
5919
  helium: "helium";
5915
5920
  opera: "opera";
5916
5921
  safari: "safari";
5917
5922
  vivaldi: "vivaldi";
5918
- }>;
5923
+ zen: "zen";
5924
+ }>, z$1.ZodString]>;
5919
5925
  sourceProfileDirectory: z$1.ZodString;
5920
5926
  type: z$1.ZodLiteral<"desktop.browser.import_cookies">;
5921
5927
  }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
@@ -8752,18 +8758,20 @@ declare const desktopBrowserCommandSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObj
8752
8758
  }, z$1.core.$strip>, z$1.ZodObject<{
8753
8759
  kind: z$1.ZodLiteral<"personal">;
8754
8760
  }, z$1.core.$strip>], "kind">;
8755
- sourceId: z$1.ZodEnum<{
8761
+ sourceId: z$1.ZodUnion<readonly [z$1.ZodEnum<{
8756
8762
  arc: "arc";
8757
8763
  brave: "brave";
8758
8764
  chrome: "chrome";
8759
8765
  chromium: "chromium";
8766
+ dia: "dia";
8760
8767
  edge: "edge";
8761
8768
  firefox: "firefox";
8762
8769
  helium: "helium";
8763
8770
  opera: "opera";
8764
8771
  safari: "safari";
8765
8772
  vivaldi: "vivaldi";
8766
- }>;
8773
+ zen: "zen";
8774
+ }>, z$1.ZodString]>;
8767
8775
  sourceProfileDirectory: z$1.ZodString;
8768
8776
  type: z$1.ZodLiteral<"desktop.browser.import_cookies">;
8769
8777
  }, z$1.core.$strict>], "type">;
@@ -8850,18 +8858,20 @@ declare const desktopBrowserResultSchemas: {
8850
8858
  "desktop.browser.list_import_sources": z$1.ZodObject<{
8851
8859
  sources: z$1.ZodArray<z$1.ZodObject<{
8852
8860
  icon: z$1.ZodOptional<z$1.ZodString>;
8853
- id: z$1.ZodEnum<{
8861
+ id: z$1.ZodUnion<readonly [z$1.ZodEnum<{
8854
8862
  arc: "arc";
8855
8863
  brave: "brave";
8856
8864
  chrome: "chrome";
8857
8865
  chromium: "chromium";
8866
+ dia: "dia";
8858
8867
  edge: "edge";
8859
8868
  firefox: "firefox";
8860
8869
  helium: "helium";
8861
8870
  opera: "opera";
8862
8871
  safari: "safari";
8863
8872
  vivaldi: "vivaldi";
8864
- }>;
8873
+ zen: "zen";
8874
+ }>, z$1.ZodString]>;
8865
8875
  name: z$1.ZodString;
8866
8876
  profiles: z$1.ZodArray<z$1.ZodObject<{
8867
8877
  cookieCount: z$1.ZodOptional<z$1.ZodNumber>;
@@ -9955,6 +9965,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
9955
9965
  "thread.previous": "thread.previous";
9956
9966
  "thread.rename": "thread.rename";
9957
9967
  "thread.search": "thread.search";
9968
+ "window.find": "window.find";
9958
9969
  "window.new": "window.new";
9959
9970
  "workspace.openPreferred": "workspace.openPreferred";
9960
9971
  }>, z$1.ZodTemplateLiteral<`plugin:${string}/${string}`>]>;
@@ -10098,6 +10109,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10098
10109
  "thread.previous": "thread.previous";
10099
10110
  "thread.rename": "thread.rename";
10100
10111
  "thread.search": "thread.search";
10112
+ "window.find": "window.find";
10101
10113
  "window.new": "window.new";
10102
10114
  "workspace.openPreferred": "workspace.openPreferred";
10103
10115
  }>, z$1.ZodTemplateLiteral<`plugin:${string}/${string}`>]>;
@@ -10181,6 +10193,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
10181
10193
  "thread.previous": "thread.previous";
10182
10194
  "thread.rename": "thread.rename";
10183
10195
  "thread.search": "thread.search";
10196
+ "window.find": "window.find";
10184
10197
  "window.new": "window.new";
10185
10198
  "workspace.openPreferred": "workspace.openPreferred";
10186
10199
  }>, z$1.ZodTemplateLiteral<`plugin:${string}/${string}`>]>;
@@ -14512,18 +14525,20 @@ declare const desktopBrowserImportCookiesRequestSchema: z$1.ZodObject<{
14512
14525
  }, z$1.core.$strip>, z$1.ZodObject<{
14513
14526
  kind: z$1.ZodLiteral<"personal">;
14514
14527
  }, z$1.core.$strip>], "kind">>;
14515
- sourceId: z$1.ZodEnum<{
14528
+ sourceId: z$1.ZodUnion<readonly [z$1.ZodEnum<{
14516
14529
  arc: "arc";
14517
14530
  brave: "brave";
14518
14531
  chrome: "chrome";
14519
14532
  chromium: "chromium";
14533
+ dia: "dia";
14520
14534
  edge: "edge";
14521
14535
  firefox: "firefox";
14522
14536
  helium: "helium";
14523
14537
  opera: "opera";
14524
14538
  safari: "safari";
14525
14539
  vivaldi: "vivaldi";
14526
- }>;
14540
+ zen: "zen";
14541
+ }>, z$1.ZodString]>;
14527
14542
  sourceProfileDirectory: z$1.ZodString;
14528
14543
  }, z$1.core.$strict>;
14529
14544
  type ExperimentalDesktopBrowserHostRequest = z$1.infer<typeof desktopBrowserHostRequestSchema>;
@@ -16614,15 +16629,21 @@ type ExperimentalSidebarNavigationAction = {
16614
16629
  kind: "search-threads";
16615
16630
  } | {
16616
16631
  kind: "open-extensions";
16632
+ } | {
16633
+ kind: "open-skills";
16617
16634
  } | {
16618
16635
  kind: "open-plugin-panel";
16619
16636
  pluginId: string;
16620
16637
  panelId: string;
16621
16638
  };
16622
- /** Semantic icon identity for one sidebar navigation item. */
16639
+ /**
16640
+ * Semantic icon identity for one sidebar navigation item. Render it with
16641
+ * {@link PluginSdkApp.experimental_SidebarNavigationIcon} to match bb's
16642
+ * artwork, including plugin branding.
16643
+ */
16623
16644
  type ExperimentalSidebarNavigationIcon = {
16624
16645
  kind: "host";
16625
- name: "extensions" | "new-thread" | "search";
16646
+ name: "extensions" | "new-thread" | "search" | "skills";
16626
16647
  } | {
16627
16648
  kind: "plugin";
16628
16649
  pluginId: string;
@@ -16630,28 +16651,164 @@ type ExperimentalSidebarNavigationIcon = {
16630
16651
  };
16631
16652
  /** One host-owned destination or action a plugin may arrange. */
16632
16653
  interface ExperimentalSidebarNavigationItem {
16654
+ /**
16655
+ * Arrangement key, stable across reloads: `__bb__/new-thread`,
16656
+ * `__bb__/search-threads`, `__bb__/extensions`, `__bb__/skills`,
16657
+ * `__bb__/automations`, or `<pluginId>/<panelId>`. The same keys appear in
16658
+ * the `sidebar.pluginPanelOrder` and `sidebar.visiblePluginPanels`
16659
+ * settings.
16660
+ */
16633
16661
  id: string;
16634
16662
  label: string;
16635
16663
  icon: ExperimentalSidebarNavigationIcon;
16636
16664
  action: ExperimentalSidebarNavigationAction;
16637
16665
  isDisabled: boolean;
16666
+ /**
16667
+ * False when the user hid the item from the sidebar. Draw hidden items in an
16668
+ * overflow menu rather than dropping them, so they stay reachable.
16669
+ */
16670
+ isVisible: boolean;
16671
+ /**
16672
+ * A plugin panel remembered from the last session whose bundle has not
16673
+ * registered yet. Activating it does nothing until it loads.
16674
+ */
16675
+ isLoading: boolean;
16676
+ /**
16677
+ * The plugin that contributed this panel; null for bb's own items. Gates
16678
+ * `openDetails` and `disablePlugin`.
16679
+ */
16680
+ pluginId: string | null;
16638
16681
  shortcut: ExperimentalSidebarNavigationShortcut | null;
16639
- experimental_splitProps: {
16640
- onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;
16641
- };
16682
+ /**
16683
+ * The panel's `experimental_sidebarAccessory`, already wrapped in the host's
16684
+ * crash boundary. Null for bb's items, panels without an accessory, and on
16685
+ * compact viewports. Keep it within one line, about 4rem by 1.25rem.
16686
+ */
16687
+ experimental_Accessory: ComponentType | null;
16642
16688
  }
16643
16689
  /** How the host should activate a sidebar navigation item. */
16644
16690
  interface ExperimentalSidebarNavigationActivationOptions {
16645
16691
  openInSplit: boolean;
16646
16692
  }
16647
- /** Props passed to an `experimental_sidebarNavigation` component. */
16648
- interface ExperimentalSidebarNavigationProps {
16693
+ /**
16694
+ * Host behavior for sidebar navigation items (see
16695
+ * {@link ExperimentalSidebarNavigationState}). Unknown item ids are ignored.
16696
+ * Calls made after the calling component unmounts do nothing.
16697
+ */
16698
+ interface ExperimentalSidebarNavigationActions {
16699
+ /**
16700
+ * Run the item's host behavior and close the mobile sidebar drawer.
16701
+ * `openInSplit` is ignored where splits are unavailable, and disabled or
16702
+ * loading items do nothing.
16703
+ */
16704
+ activate(itemId: string, options: ExperimentalSidebarNavigationActivationOptions): void;
16705
+ /** Hide or show one item. Persists to `sidebar.visiblePluginPanels`. */
16706
+ setVisible(itemId: string, isVisible: boolean): void;
16707
+ /**
16708
+ * Save a new order. Pass item ids in the order you want; unknown ids are
16709
+ * dropped and ids you leave out keep their relative order after the ones
16710
+ * you pass. Persists to `sidebar.pluginPanelOrder`.
16711
+ */
16712
+ setOrder(itemIds: readonly string[]): void;
16713
+ /** Open bb's customize editor, which reorders and hides items. */
16714
+ openCustomize(): void;
16715
+ /** Open the owning plugin's details. Does nothing when `pluginId` is null. */
16716
+ openDetails(itemId: string): void;
16717
+ /**
16718
+ * Disable the owning plugin, leave its panel if it is open, and show a
16719
+ * toast. Rejects after the host's error toast when disabling fails. Does
16720
+ * nothing when `pluginId` is null.
16721
+ */
16722
+ disablePlugin(itemId: string): Promise<void>;
16723
+ }
16724
+ /** What {@link PluginSdkApp.experimental_useSidebarNavigation} returns. */
16725
+ interface ExperimentalSidebarNavigationState {
16726
+ /** Every item in the user's saved order, visible and hidden. */
16649
16727
  items: readonly ExperimentalSidebarNavigationItem[];
16728
+ /** The item whose destination the route currently shows, or null. */
16650
16729
  activeItemId: string | null;
16730
+ /**
16731
+ * True while the user holds the app command modifier, when bb's own rows
16732
+ * reveal their `shortcut` labels. Show yours at the same time.
16733
+ */
16734
+ isShortcutModifierHeld: boolean;
16735
+ actions: ExperimentalSidebarNavigationActions;
16736
+ }
16737
+ /**
16738
+ * Per-item drag-to-split support (see
16739
+ * {@link PluginSdkApp.experimental_useSidebarNavigationSplit}). Same contract
16740
+ * as {@link PluginSidebarThreadSplit}.
16741
+ */
16742
+ interface ExperimentalSidebarNavigationSplit {
16743
+ /**
16744
+ * Spread onto the item's interactive element. Empty when the item cannot
16745
+ * open in a pane, so spreading it is always safe.
16746
+ */
16747
+ splitProps: {
16748
+ onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;
16749
+ };
16750
+ /**
16751
+ * False for items that cannot open in a pane (Search, Plugins, Skills), on
16752
+ * compact viewports, and when splits are unavailable.
16753
+ */
16754
+ isAvailable: boolean;
16755
+ /** Where this item's destination sits in the split layout, or null. */
16756
+ layout: {
16757
+ panes: readonly PluginSidebarSplitPane[];
16758
+ } | null;
16759
+ }
16760
+ /** Options for {@link PluginSdkApp.experimental_useSidebarNavigationSplit}. */
16761
+ interface ExperimentalSidebarNavigationSplitOptions {
16762
+ /**
16763
+ * `sidebar` (the default) engages the drag once the pointer leaves the
16764
+ * sidebar, so a row list with its own drag-to-reorder keeps working.
16765
+ * `distance` engages after a short movement in any direction; use it for
16766
+ * rows inside a menu or popover that covers the main area.
16767
+ */
16768
+ activation?: "distance" | "sidebar";
16769
+ /** Called when the drag engages, for example to close the menu the row is in. */
16770
+ onDragStart?: () => void;
16771
+ }
16772
+ /** Props for {@link PluginSdkApp.experimental_SidebarNavigationIcon}. */
16773
+ interface ExperimentalSidebarNavigationIconProps {
16774
+ icon: ExperimentalSidebarNavigationIcon;
16775
+ className?: string;
16776
+ }
16777
+ /**
16778
+ * Props passed to an `experimental_sidebarNavigation` component. Read the
16779
+ * items and their actions with
16780
+ * {@link PluginSdkApp.experimental_useSidebarNavigation}.
16781
+ */
16782
+ interface ExperimentalSidebarNavigationProps {
16651
16783
  isCompactViewport: boolean;
16652
- experimental_activate(itemId: string, options: ExperimentalSidebarNavigationActivationOptions): void;
16784
+ /**
16785
+ * Renders bb's bundled Navigation plugin, or nothing while it is disabled.
16786
+ * Kept for plugins written before `experimental_useSidebarNavigation`;
16787
+ * render items from that hook instead. Scheduled for removal.
16788
+ *
16789
+ * @deprecated
16790
+ */
16653
16791
  experimental_Original: ComponentType;
16654
16792
  }
16793
+ /**
16794
+ * Props passed to an `experimental_sidebarHeader` component, rendered in the
16795
+ * sidebar's header row between the sidebar toggle (and the macOS window
16796
+ * controls) and bb's back and forward buttons.
16797
+ */
16798
+ interface ExperimentalSidebarHeaderProps {
16799
+ /**
16800
+ * Width in px of the space the component may use, updated when the sidebar
16801
+ * resizes or the window chrome changes. It can be smaller than
16802
+ * `controlSize` in a narrow sidebar.
16803
+ */
16804
+ width: number;
16805
+ /**
16806
+ * Width and height in px of the header's own buttons, equal to the
16807
+ * `--bb-sidebar-control-size` CSS variable. Size your controls to match.
16808
+ */
16809
+ controlSize: number;
16810
+ isCompactViewport: boolean;
16811
+ }
16655
16812
  /**
16656
16813
  * Props passed to an `experimental_threadList` component — the sidebar's
16657
16814
  * scrolling thread area, replaced wholesale by one plugin.
@@ -17619,7 +17776,7 @@ interface PluginSidebarThreadActions {
17619
17776
  setRead(threadId: string, read: boolean): Promise<void>;
17620
17777
  /** Silent rename — no dialog. For inline editing in your own row. */
17621
17778
  rename(threadId: string, title: string): Promise<void>;
17622
- /** Archives the thread AND its children, closing any panes showing them. */
17779
+ /** Opens bb's confirmation before archiving the thread and its children. */
17623
17780
  archive(threadId: string): void;
17624
17781
  /**
17625
17782
  * Opens bb's delete confirmation, which counts child threads first. Deletion
@@ -17752,7 +17909,14 @@ interface PluginThreadListRegistration {
17752
17909
  description?: string;
17753
17910
  component: ComponentType<PluginThreadListProps>;
17754
17911
  }
17755
- /** Replace the bounded navigation controls above the sidebar thread list. */
17912
+ /**
17913
+ * Replace the navigation controls above the sidebar thread list. Exclusive:
17914
+ * the user picks one provider under Settings → Appearance → Navigation, and
17915
+ * bb ships its own rows as the bundled Navigation plugin
17916
+ * (`navigation/navigation`, the default). A picked provider that is disabled
17917
+ * or removed falls back to Navigation; a crashing provider is replaced by a
17918
+ * placeholder with a Reload button.
17919
+ */
17756
17920
  interface ExperimentalSidebarNavigationRegistration {
17757
17921
  /** Unique within the plugin; letters, digits, `-`, `_`. */
17758
17922
  id: string;
@@ -17762,6 +17926,23 @@ interface ExperimentalSidebarNavigationRegistration {
17762
17926
  description?: string;
17763
17927
  component: ComponentType<ExperimentalSidebarNavigationProps>;
17764
17928
  }
17929
+ /**
17930
+ * Render a component in the sidebar's header row, between the sidebar toggle
17931
+ * and bb's back and forward buttons. Exclusive: the user picks at most one
17932
+ * header under Settings → Appearance, and by default the header shows only
17933
+ * bb's own controls. Content is clipped to the row, so it cannot move the
17934
+ * thread list or bb's controls. On macOS the empty space keeps dragging the
17935
+ * window; buttons, links, and inputs do not.
17936
+ */
17937
+ interface ExperimentalSidebarHeaderRegistration {
17938
+ /** Unique within the plugin; letters, digits, `-`, `_`. */
17939
+ id: string;
17940
+ /** Label shown in Settings → Appearance and capability details. */
17941
+ title: string;
17942
+ /** Optional one-line description shown with the provider choice. */
17943
+ description?: string;
17944
+ component: ComponentType<ExperimentalSidebarHeaderProps>;
17945
+ }
17765
17946
  /**
17766
17947
  * Register this plugin as a viewer/editor for file extensions. By default,
17767
17948
  * matching files render the first applicable opener in deterministic slot
@@ -18166,6 +18347,12 @@ interface PluginAppSlots {
18166
18347
  sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;
18167
18348
  /** Replace the bounded sidebar navigation controls. */
18168
18349
  experimental_sidebarNavigation(registration: ExperimentalSidebarNavigationRegistration): void;
18350
+ /**
18351
+ * Render a component in the sidebar header row (see
18352
+ * {@link ExperimentalSidebarHeaderRegistration}). Experimental: see
18353
+ * docs/api_to_audit.md.
18354
+ */
18355
+ experimental_sidebarHeader(registration: ExperimentalSidebarHeaderRegistration): void;
18169
18356
  /**
18170
18357
  * Replace the sidebar's thread list (see
18171
18358
  * {@link PluginThreadListRegistration}). Experimental: see
@@ -19172,6 +19359,15 @@ interface PluginSdkApp {
19172
19359
  useRealtimeConnectionState(): PluginRealtimeConnectionState;
19173
19360
  useSettings(): PluginSettingsState;
19174
19361
  useBbContext(): BbContext;
19362
+ /**
19363
+ * The id of the plugin that owns the calling component: the same id
19364
+ * `bb.pluginId` reports on the server, derived from the package name. Key
19365
+ * state the plugin keeps outside bb's per-plugin storage with it, such as
19366
+ * localStorage entries and log prefixes, so a copy of the plugin published
19367
+ * under another name does not collide with the original. Experimental: see
19368
+ * docs/api_to_audit.md.
19369
+ */
19370
+ experimental_usePluginId(): string;
19175
19371
  useBbNavigate(): BbNavigate;
19176
19372
  /** Select one of this plugin's eligible fixed tabs on the current surface. */
19177
19373
  experimental_useAppPanel(): ExperimentalAppPanel;
@@ -19221,6 +19417,27 @@ interface PluginSdkApp {
19221
19417
  * Experimental: see docs/api_to_audit.md.
19222
19418
  */
19223
19419
  experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;
19420
+ /**
19421
+ * The sidebar navigation items in the user's saved order, the active item,
19422
+ * and the host actions that activate, hide, reorder, and customize them
19423
+ * (see {@link ExperimentalSidebarNavigationState}). One model shared by
19424
+ * every caller in the sidebar. Items keep their identity while unchanged.
19425
+ * Outside the sidebar it returns no items and actions that do nothing.
19426
+ * Experimental: see docs/api_to_audit.md.
19427
+ */
19428
+ experimental_useSidebarNavigation(): ExperimentalSidebarNavigationState;
19429
+ /**
19430
+ * Per-item drag-to-split support for navigation items (see
19431
+ * {@link ExperimentalSidebarNavigationSplit}). Call it once per rendered
19432
+ * item. Experimental: see docs/api_to_audit.md.
19433
+ */
19434
+ experimental_useSidebarNavigationSplit(itemId: string, options?: ExperimentalSidebarNavigationSplitOptions): ExperimentalSidebarNavigationSplit;
19435
+ /**
19436
+ * bb's artwork for a navigation item's icon: bb's glyphs for its own items,
19437
+ * and the contributing plugin's branding for plugin panels. Experimental:
19438
+ * see docs/api_to_audit.md.
19439
+ */
19440
+ experimental_SidebarNavigationIcon: ComponentType<ExperimentalSidebarNavigationIconProps>;
19224
19441
  /**
19225
19442
  * Whether the composer holds an unsent draft for one thread (see
19226
19443
  * {@link PluginSidebarThreadDraftState}). Per row, because a draft is
@@ -19381,7 +19598,7 @@ interface PluginSdkApp {
19381
19598
 
19382
19599
  declare const experimental_Icon: react.ComponentType<ExperimentalIconProps>;
19383
19600
  declare const experimental_ProviderIcon: react.ComponentType<ExperimentalProviderIconProps>;
19384
- declare const definePluginApp: (setup: PluginAppSetup) => PluginAppDefinition;
19601
+ declare const definePluginApp: PluginSdkApp["definePluginApp"];
19385
19602
  declare const ThreadChat: react.ComponentType<ThreadChatProps>;
19386
19603
  declare const Markdown: react.ComponentType<MarkdownProps>;
19387
19604
  declare const experimental_FileLink: react.ComponentType<ExperimentalFileLinkProps>;
@@ -19399,6 +19616,7 @@ declare const useRealtime: (channel: string, handler: (payload: unknown) => void
19399
19616
  declare const useRealtimeConnectionState: () => PluginRealtimeConnectionState;
19400
19617
  declare const useSettings: () => PluginSettingsState;
19401
19618
  declare const useBbContext: () => BbContext;
19619
+ declare const experimental_usePluginId: () => string;
19402
19620
  declare const useBbNavigate: () => BbNavigate;
19403
19621
  declare const experimental_useAppPanel: () => ExperimentalAppPanel;
19404
19622
  declare const experimental_useFixedTabTarget: <Target extends JsonValue$1>(tab: ExperimentalPluginFixedTabReference<Target>) => ExperimentalFixedTabTargetState<Target> | null;
@@ -19410,6 +19628,9 @@ declare const experimental_useSidebarThreads: (options?: {
19410
19628
  declare const experimental_useSidebarThreadActions: () => PluginSidebarThreadActions;
19411
19629
  declare const experimental_useSidebarThreadPullRequest: (threadId: string) => PluginSidebarThreadPullRequestState;
19412
19630
  declare const experimental_useSidebarThreadSplit: (threadId: string) => PluginSidebarThreadSplit;
19631
+ declare const experimental_useSidebarNavigation: () => ExperimentalSidebarNavigationState;
19632
+ declare const experimental_useSidebarNavigationSplit: (itemId: string, options?: ExperimentalSidebarNavigationSplitOptions) => ExperimentalSidebarNavigationSplit;
19633
+ declare const experimental_SidebarNavigationIcon: react.ComponentType<ExperimentalSidebarNavigationIconProps>;
19413
19634
  declare const useSidebarThreadDraft: (threadId: string) => PluginSidebarThreadDraftState;
19414
19635
  declare const useSidebarThreadDraftIds: () => ReadonlySet<string>;
19415
19636
  declare const useSidebarThreadRowStatus: (threadId: string) => PluginSidebarThreadRowStatus | null;
@@ -19422,5 +19643,5 @@ declare const useSdk: () => PluginBrowserBbSdk;
19422
19643
  declare const experimental_useProviders: () => PluginProvidersState;
19423
19644
  declare const experimental_useCodeTheme: () => PluginCodeThemeState;
19424
19645
 
19425
- 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 };
19426
- 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 };
19646
+ export { Markdown, ThreadChat, ThreadTitle, UrlLink, definePluginApp, experimental_BranchPicker, experimental_Diff, experimental_FileLink, experimental_Icon, experimental_NewThreadComposer, experimental_PermissionModePicker, experimental_ProviderIcon, experimental_ProviderModelPicker, experimental_SidebarNavigationIcon, experimental_SourceCode, experimental_useAppPanel, experimental_useBranches, experimental_useCheckoutState, experimental_useCodeTheme, experimental_useFixedTabTarget, experimental_usePluginId, experimental_useProviders, experimental_useSidebarNavigation, experimental_useSidebarNavigationSplit, experimental_useSidebarThreadActions, experimental_useSidebarThreadPullRequest, experimental_useSidebarThreadSplit, experimental_useSidebarThreads, useBbContext, useBbNavigate, useComposer, useComposerView, useEnvironmentProviders, useRealtime, useRealtimeConnectionState, useRpc, useSdk, useSettings, useSidebarSplitLayout, useSidebarThreadDraft, useSidebarThreadDraftIds, useSidebarThreadRowStatus, useSidebarThreadRowStatuses, useSidebarThreadShortcut };
19647
+ export type { BbContext, BbNavigate, BranchPickerProps, BranchesState, CheckoutState, CodeOverflowMode, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, DiffProps, DiffViewMode, ExperimentalAppIcons, ExperimentalAppOverlayProps, ExperimentalAppOverlayRegistration, ExperimentalAppPanel, ExperimentalAppPanelSurface, ExperimentalComposerSelection, ExperimentalComposerSubmitOptions, ExperimentalDiffFileContent, ExperimentalDiffFullFileContents, ExperimentalFileLinkProps, ExperimentalFileLocation, ExperimentalFileOpenOptions, ExperimentalFixedTabTargetContract, ExperimentalFixedTabTargetState, ExperimentalIconProps, ExperimentalIconRegistration, ExperimentalLiveFileTarget, ExperimentalOpenFixedTabOptions, ExperimentalPermissionModePickerProps, ExperimentalPluginBrowserPage, ExperimentalPluginBrowserPageEvaluateOptions, ExperimentalPluginBrowserPageWorld, ExperimentalPluginBrowserToolbarActionProps, ExperimentalPluginBrowserToolbarActionRegistration, ExperimentalPluginFixedTabReference, ExperimentalProviderIconProps, ExperimentalProviderModelPickerProps, ExperimentalProviderModelPickerRouting, ExperimentalProviderModelPickerValue, ExperimentalSidebarFooter, ExperimentalSidebarFooterActionContext, ExperimentalSidebarFooterActionRegistration, ExperimentalSidebarFooterDisclosureController, ExperimentalSidebarFooterDisclosureProps, ExperimentalSidebarFooterDisclosureRegistration, ExperimentalSidebarFooterItemBase, ExperimentalSidebarFooterItemRegistration, ExperimentalSidebarHeaderProps, ExperimentalSidebarHeaderRegistration, ExperimentalSidebarNavigationAction, ExperimentalSidebarNavigationActions, ExperimentalSidebarNavigationActivationOptions, ExperimentalSidebarNavigationIcon, ExperimentalSidebarNavigationIconProps, ExperimentalSidebarNavigationItem, ExperimentalSidebarNavigationProps, ExperimentalSidebarNavigationRegistration, ExperimentalSidebarNavigationShortcut, ExperimentalSidebarNavigationSplit, ExperimentalSidebarNavigationSplitOptions, ExperimentalSidebarNavigationState, JsonValue$1 as JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAppBuilder, PluginAppCommands, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBoundThreadsArea, PluginBrowserBbSdk, PluginCodeThemeData, PluginCodeThemeState, PluginCodeThemeTokenRule, PluginCommandContext, PluginCommandRegistration, PluginCommandShortcut, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginDiffRendererProps, PluginDiffRendererRegistration, PluginEnvironmentProvider, PluginEnvironmentProviderInputsChange, PluginEnvironmentProviderInputsProps, PluginEnvironmentProviderInputsRegistration, PluginEnvironmentProvidersState, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginFixedTabDeclaration, PluginFixedTabRegistration, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMachineProviderInputsChange, PluginMachineProviderInputsProps, PluginMachineProviderInputsRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginNewThreadPanelActionContext, PluginNewThreadPanelActionRegistration, PluginNewThreadPanelProps, PluginPanelActionOpenOptions, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginProviderIconRegistration, PluginProvidersState, PluginRealtimeConnectionState, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSection, PluginSidebarSplitLayout, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadDraftState, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadRowStatus, PluginSidebarThreadShortcut, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSourceCodeRendererProps, PluginSourceCodeRendererRegistration, PluginTargetedPanelActionOpenOptions, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginThreadTitleProps, PluginTimelineRendererProps, PluginTimelineRendererRegistration, PluginTimelineRendererRow, PluginTimelineRowPresentation, PluginTimelineRowStatus, ReadonlyJsonValue, SourceCodeLineRange, SourceCodeProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps, UrlLinkProps, UseBranchesArgs, UseCheckoutStateArgs };
@@ -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[];