@get-bb/plugin-sdk 0.4.35 → 0.4.40

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
@@ -65,6 +65,16 @@ action id, or a surface with no side panel). A decline is a return value, never
65
65
  a thrown error, so a plugin registering several kinds of action can share one
66
66
  open routine and branch on the result.
67
67
 
68
+ Use `app.slots.experimental_appOverlay({ id, component })` for additive,
69
+ app-wide floating React UI. BB mounts the component once per app window through
70
+ the normal plugin slot boundary, so SDK hooks and plugin CSS work and React
71
+ context survives portals. This app-level boundary includes the sidebar thread
72
+ data and action hooks. Hooks whose contract requires a particular surface,
73
+ including `useComposer` and `useComposerView`, remain limited to that surface.
74
+ The plugin owns the overlay's chrome, positioning, visibility, focus, and
75
+ responsive behavior; a crashing overlay is hidden without affecting siblings.
76
+ Use a content script for app-wide DOM behavior that does not need React context.
77
+
68
78
  See the
69
79
  [`composer-customization` reference plugin](../../examples/plugins/composer-customization/README.md)
70
80
  for every region in one small app. The deprecated pre-1.0
@@ -341,6 +341,14 @@ interface PluginHomepageSectionProps {
341
341
  */
342
342
  interface PluginSettingsSectionProps {
343
343
  }
344
+ /**
345
+ * Props passed to an `experimental_appOverlay` component.
346
+ *
347
+ * Deliberately empty while the component reads live app state through SDK
348
+ * hooks; versioned additive like the other slot props.
349
+ */
350
+ interface ExperimentalAppOverlayProps {
351
+ }
344
352
  /** Props passed to a `navPanel` component (it owns its whole route). */
345
353
  interface PluginNavPanelProps {
346
354
  /**
@@ -705,6 +713,21 @@ interface PluginSettingsSectionRegistration {
705
713
  description?: string;
706
714
  component: ComponentType<PluginSettingsSectionProps>;
707
715
  }
716
+ /**
717
+ * Render app-wide plugin UI outside BB's layout regions.
718
+ *
719
+ * The host mounts each registration once per app window through the ordinary
720
+ * plugin React boundary. The component therefore keeps PluginContext, router,
721
+ * query, realtime, and other app-level SDK contexts when it renders fixed UI
722
+ * or creates a React portal. BB supplies no chrome, positioning, visibility,
723
+ * or interaction policy; the plugin owns those details and responsive
724
+ * behavior. Registrations are additive and a crash hides only that overlay.
725
+ */
726
+ interface ExperimentalAppOverlayRegistration {
727
+ /** Unique within the plugin; letters, digits, `-`, `_`. */
728
+ id: string;
729
+ component: ComponentType<ExperimentalAppOverlayProps>;
730
+ }
708
731
  /**
709
732
  * Owner-defined validator for a fixed tab's transient target. The host first
710
733
  * verifies that the value is JSON-safe, then calls this validator before
@@ -1522,6 +1545,12 @@ interface PluginTimelineRendererRegistration {
1522
1545
  interface PluginAppSlots {
1523
1546
  homepageSection(registration: PluginHomepageSectionRegistration): void;
1524
1547
  settingsSection(registration: PluginSettingsSectionRegistration): void;
1548
+ /**
1549
+ * Render one app-wide overlay component (see
1550
+ * {@link ExperimentalAppOverlayRegistration}). Experimental: see
1551
+ * docs/api_to_audit.md.
1552
+ */
1553
+ experimental_appOverlay(registration: ExperimentalAppOverlayRegistration): void;
1525
1554
  navPanel(registration: PluginNavPanelRegistration): void;
1526
1555
  /**
1527
1556
  * Add an action to an existing thread's panel launcher. This slot is
@@ -1661,7 +1690,7 @@ interface PluginSettingsState {
1661
1690
  * Effective non-secret setting values (secret settings are excluded —
1662
1691
  * read them server-side). Undefined while loading or unavailable.
1663
1692
  */
1664
- values: Record<string, string | boolean> | undefined;
1693
+ values: Record<string, string | number | boolean> | undefined;
1665
1694
  isLoading: boolean;
1666
1695
  }
1667
1696
  /** State of the app's shared realtime connection to the bb server. */
@@ -2441,4 +2470,4 @@ declare const experimental_useProviders: () => PluginProvidersState;
2441
2470
  declare const experimental_useCodeTheme: () => PluginCodeThemeState;
2442
2471
 
2443
2472
  export { Markdown, ThreadChat, UrlLink, definePluginApp, experimental_Diff, experimental_FileLink, experimental_NewThreadComposer, experimental_PermissionModePicker, experimental_ProviderModelPicker, experimental_SourceCode, experimental_useAppPanel, experimental_useCodeTheme, experimental_useFixedTabTarget, experimental_useProviders, experimental_useSidebarThreadActions, experimental_useSidebarThreadPullRequest, experimental_useSidebarThreadSplit, experimental_useSidebarThreads, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings };
2444
- export type { BbContext, BbNavigate, CodeOverflowMode, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, DiffProps, DiffViewMode, ExperimentalAppPanel, ExperimentalAppPanelSurface, ExperimentalComposerSubmitOptions, ExperimentalDiffFileContent, ExperimentalDiffFullFileContents, ExperimentalFileLinkProps, ExperimentalFileLocation, ExperimentalFileOpenOptions, ExperimentalFixedTabTargetContract, ExperimentalFixedTabTargetState, ExperimentalLiveFileTarget, ExperimentalOpenFixedTabOptions, ExperimentalPermissionModePickerProps, ExperimentalPluginFixedTabReference, ExperimentalProviderModelPickerProps, ExperimentalProviderModelPickerRouting, ExperimentalProviderModelPickerValue, ExperimentalSidebarNavigationAction, ExperimentalSidebarNavigationActivationOptions, ExperimentalSidebarNavigationIcon, ExperimentalSidebarNavigationItem, ExperimentalSidebarNavigationProps, ExperimentalSidebarNavigationRegistration, ExperimentalSidebarNavigationShortcut, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginCodeThemeData, PluginCodeThemeState, PluginCodeThemeTokenRule, PluginCommandPaletteActionContext, PluginCommandPaletteActionRegistration, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginDiffRendererProps, PluginDiffRendererRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginFixedTabDeclaration, PluginFixedTabRegistration, PluginHomepageSectionProps, PluginHomepageSectionRegistration, 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, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSidebarWorkspaceKind, PluginSourceCodeRendererProps, PluginSourceCodeRendererRegistration, PluginTargetedPanelActionOpenOptions, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginTimelineRendererProps, PluginTimelineRendererRegistration, PluginTimelineRendererRow, PluginTimelineRowPresentation, PluginTimelineRowStatus, SourceCodeLineRange, SourceCodeProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps, UrlLinkProps };
2473
+ export type { BbContext, BbNavigate, CodeOverflowMode, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, DiffProps, DiffViewMode, ExperimentalAppOverlayProps, ExperimentalAppOverlayRegistration, ExperimentalAppPanel, ExperimentalAppPanelSurface, ExperimentalComposerSubmitOptions, ExperimentalDiffFileContent, ExperimentalDiffFullFileContents, ExperimentalFileLinkProps, ExperimentalFileLocation, ExperimentalFileOpenOptions, ExperimentalFixedTabTargetContract, ExperimentalFixedTabTargetState, ExperimentalLiveFileTarget, ExperimentalOpenFixedTabOptions, ExperimentalPermissionModePickerProps, ExperimentalPluginFixedTabReference, ExperimentalProviderModelPickerProps, ExperimentalProviderModelPickerRouting, ExperimentalProviderModelPickerValue, ExperimentalSidebarNavigationAction, ExperimentalSidebarNavigationActivationOptions, ExperimentalSidebarNavigationIcon, ExperimentalSidebarNavigationItem, ExperimentalSidebarNavigationProps, ExperimentalSidebarNavigationRegistration, ExperimentalSidebarNavigationShortcut, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginCodeThemeData, PluginCodeThemeState, PluginCodeThemeTokenRule, PluginCommandPaletteActionContext, PluginCommandPaletteActionRegistration, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginDiffRendererProps, PluginDiffRendererRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginFixedTabDeclaration, PluginFixedTabRegistration, PluginHomepageSectionProps, PluginHomepageSectionRegistration, 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, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSidebarWorkspaceKind, PluginSourceCodeRendererProps, PluginSourceCodeRendererRegistration, PluginTargetedPanelActionOpenOptions, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginTimelineRendererProps, PluginTimelineRendererRegistration, PluginTimelineRendererRow, PluginTimelineRowPresentation, PluginTimelineRowStatus, SourceCodeLineRange, SourceCodeProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps, UrlLinkProps };
@@ -512,6 +512,12 @@ type PluginSettingDescriptor = {
512
512
  /** Synchronously validate without transforming a proposed value. */
513
513
  experimental_schema?: StandardSchemaV1<boolean, boolean>;
514
514
  default?: boolean;
515
+ } | {
516
+ type: "number";
517
+ label: string;
518
+ description?: string;
519
+ experimental_schema?: StandardSchemaV1<number, number>;
520
+ default?: number;
515
521
  } | {
516
522
  type: "select";
517
523
  label: string;
@@ -529,7 +535,7 @@ type PluginSettingDescriptor = {
529
535
  default?: string;
530
536
  };
531
537
  type PluginSettingDescriptors = Record<string, PluginSettingDescriptor>;
532
- type PluginSettingValue = string | boolean;
538
+ type PluginSettingValue = string | number | boolean;
533
539
  /**
534
540
  * What a `message.dispatch` hook answers.
535
541
  *
@@ -5,12 +5,13 @@
5
5
  // Confused by the API, or need a symbol that isn't here? Clone the BB repo
6
6
  // and read the real source: https://github.com/get-bb/bb
7
7
 
8
- import { PluginHomepageSectionRegistration, PluginSettingsSectionRegistration, PluginNavPanelRegistration, PluginThreadPanelActionRegistration, PluginNewThreadPanelActionRegistration, ComposerCustomization, PluginPendingInteractionRegistration, PluginSidebarFooterActionRegistration, ExperimentalSidebarNavigationRegistration, PluginThreadListRegistration, PluginThreadHeaderActionRegistration, PluginFileOpenerRegistration, PluginSourceCodeRendererRegistration, PluginDiffRendererRegistration, PluginMessageDirectiveRegistration, PluginMessageActionRegistration, PluginCommandPaletteActionRegistration, PluginProviderIconRegistration, PluginTimelineRendererRegistration, PluginContentScriptRegistration, PluginAppDefinition } from '@get-bb/plugin-sdk';
8
+ import { PluginHomepageSectionRegistration, PluginSettingsSectionRegistration, ExperimentalAppOverlayRegistration, PluginNavPanelRegistration, PluginThreadPanelActionRegistration, PluginNewThreadPanelActionRegistration, ComposerCustomization, PluginPendingInteractionRegistration, PluginSidebarFooterActionRegistration, ExperimentalSidebarNavigationRegistration, PluginThreadListRegistration, PluginThreadHeaderActionRegistration, PluginFileOpenerRegistration, PluginSourceCodeRendererRegistration, PluginDiffRendererRegistration, PluginMessageDirectiveRegistration, PluginMessageActionRegistration, PluginCommandPaletteActionRegistration, PluginProviderIconRegistration, PluginTimelineRendererRegistration, PluginContentScriptRegistration, PluginAppDefinition } from '@get-bb/plugin-sdk';
9
9
 
10
10
  /** Validated registrations produced by one plugin app setup execution. */
11
11
  interface CollectedPluginAppRegistrations {
12
12
  homepageSections: PluginHomepageSectionRegistration[];
13
13
  settingsSections: PluginSettingsSectionRegistration[];
14
+ appOverlays: ExperimentalAppOverlayRegistration[];
14
15
  navPanels: PluginNavPanelRegistration[];
15
16
  threadPanelActions: PluginThreadPanelActionRegistration[];
16
17
  newThreadPanelActions: PluginNewThreadPanelActionRegistration[];
@@ -7,7 +7,7 @@
7
7
 
8
8
  import { ReactNode, ComponentType } from 'react';
9
9
  import { RenderResult } from '@testing-library/react';
10
- import { PluginHomepageSectionRegistration, PluginSettingsSectionRegistration, PluginNavPanelRegistration, PluginThreadPanelActionRegistration, PluginNewThreadPanelActionRegistration, ComposerCustomization, PluginPendingInteractionRegistration, PluginSidebarFooterActionRegistration, ExperimentalSidebarNavigationRegistration, PluginThreadListRegistration, PluginThreadHeaderActionRegistration, PluginFileOpenerRegistration, PluginSourceCodeRendererRegistration, PluginDiffRendererRegistration, PluginMessageDirectiveRegistration, PluginMessageActionRegistration, PluginProviderIconRegistration, PluginTimelineRendererRegistration, PluginContentScriptRegistration, PluginComposerScope, PluginComposerTextEffect, PluginComposerMention, PluginComposerThreadRowStatus, ExperimentalOpenFixedTabOptions, JsonValue, BbNavigate, ExperimentalFileOpenOptions, PluginAppDefinition, PluginRpcContract, StandardSchemaV1InferInput, PluginRpcResult, PluginRealtimeConnectionState, PluginSidebarThreadsState, PluginProvidersState, PluginCodeThemeState, PluginSidebarPullRequest, PluginSidebarThreadActions } from '@get-bb/plugin-sdk';
10
+ import { PluginHomepageSectionRegistration, PluginSettingsSectionRegistration, ExperimentalAppOverlayRegistration, PluginNavPanelRegistration, PluginThreadPanelActionRegistration, PluginNewThreadPanelActionRegistration, ComposerCustomization, PluginPendingInteractionRegistration, PluginSidebarFooterActionRegistration, ExperimentalSidebarNavigationRegistration, PluginThreadListRegistration, PluginThreadHeaderActionRegistration, PluginFileOpenerRegistration, PluginSourceCodeRendererRegistration, PluginDiffRendererRegistration, PluginMessageDirectiveRegistration, PluginMessageActionRegistration, PluginProviderIconRegistration, PluginTimelineRendererRegistration, PluginContentScriptRegistration, PluginComposerScope, PluginComposerTextEffect, PluginComposerMention, PluginComposerThreadRowStatus, ExperimentalOpenFixedTabOptions, JsonValue, BbNavigate, ExperimentalFileOpenOptions, PluginAppDefinition, PluginRpcContract, StandardSchemaV1InferInput, PluginRpcResult, PluginRealtimeConnectionState, PluginSidebarThreadsState, PluginProvidersState, PluginCodeThemeState, PluginSidebarPullRequest, PluginSidebarThreadActions } from '@get-bb/plugin-sdk';
11
11
 
12
12
  /**
13
13
  * `@get-bb/plugin-sdk/testing/app` — the frontend plugin test harness. Tests a
@@ -118,6 +118,7 @@ declare function installTestPluginRuntime(): void;
118
118
  interface CapturedPluginApp {
119
119
  homepageSections: PluginHomepageSectionRegistration[];
120
120
  settingsSections: PluginSettingsSectionRegistration[];
121
+ appOverlays: ExperimentalAppOverlayRegistration[];
121
122
  navPanels: PluginNavPanelRegistration[];
122
123
  threadPanelActions: PluginThreadPanelActionRegistration[];
123
124
  newThreadPanelActions: PluginNewThreadPanelActionRegistration[];
@@ -192,7 +193,7 @@ interface RenderSlotOptions<Contract extends PluginRpcContract = PluginRpcContra
192
193
  */
193
194
  rpc?: PluginRpcTestHandlers<Contract>;
194
195
  /** `useSettings()` values; omitted → `{ values: undefined, isLoading: false }`. */
195
- settings?: Record<string, string | boolean>;
196
+ settings?: Record<string, string | number | boolean>;
196
197
  /** `useBbContext()` selection; both default to null. */
197
198
  context?: {
198
199
  projectId?: string | null;
@@ -102,7 +102,7 @@ interface StandardSchemaV1Issue {
102
102
  })[];
103
103
  }
104
104
 
105
- type PluginSettingValue = string | boolean;
105
+ type PluginSettingValue = string | number | boolean;
106
106
  /**
107
107
  * Permission modes a provider can run a session in — BB's own permission
108
108
  * vocabulary, ordered least ("accept-edits") to most ("full") privileged.
@@ -770,6 +770,10 @@ interface FakePluginHarness extends FakePluginInspectionState, FakePluginBehavio
770
770
  interface CreateFakePluginHostOptions {
771
771
  /** Defaults to "test-plugin". */
772
772
  pluginId?: string;
773
+ /**
774
+ * Value served by `bb.server.experimental_appUrl`. Defaults to `null`.
775
+ */
776
+ appUrl?: string | null;
773
777
  /**
774
778
  * Value served by `bb.server.loopbackBaseUrl` (always bound here, like
775
779
  * `bb.sdk`). Defaults to "http://127.0.0.1:38886".
@@ -4464,15 +4464,6 @@ declare const commitActionResponseSchema: z$1.ZodObject<{
4464
4464
  ok: z$1.ZodLiteral<true>;
4465
4465
  }, z$1.core.$strip>;
4466
4466
  type CommitActionResponse = z$1.infer<typeof commitActionResponseSchema>;
4467
- declare const squashMergeActionResponseSchema: z$1.ZodObject<{
4468
- action: z$1.ZodLiteral<"squash_merge">;
4469
- commitSha: z$1.ZodString;
4470
- commitSubject: z$1.ZodString;
4471
- merged: z$1.ZodBoolean;
4472
- message: z$1.ZodString;
4473
- ok: z$1.ZodLiteral<true>;
4474
- }, z$1.core.$strip>;
4475
- type SquashMergeActionResponse = z$1.infer<typeof squashMergeActionResponseSchema>;
4476
4467
  declare const pullRequestReadyActionResponseSchema: z$1.ZodObject<{
4477
4468
  action: z$1.ZodLiteral<"pull_request_ready">;
4478
4469
  message: z$1.ZodString;
@@ -6086,24 +6077,6 @@ declare const hostDaemonCommandRegistry: {
6086
6077
  commitSha: z$1.ZodString;
6087
6078
  commitSubject: z$1.ZodString;
6088
6079
  }, z$1.core.$strip>, "settled", false>;
6089
- "workspace.squash_merge": HostDaemonCommandDescriptor<"workspace.squash_merge", z$1.ZodObject<{
6090
- commitMessage: z$1.ZodString;
6091
- environmentId: z$1.ZodString;
6092
- targetBranch: z$1.ZodString;
6093
- type: z$1.ZodLiteral<"workspace.squash_merge">;
6094
- workspaceContext: z$1.ZodObject<{
6095
- workspacePath: z$1.ZodString;
6096
- workspaceProvisionType: z$1.ZodEnum<{
6097
- "managed-worktree": "managed-worktree";
6098
- personal: "personal";
6099
- unmanaged: "unmanaged";
6100
- }>;
6101
- }, z$1.core.$strip>;
6102
- }, z$1.core.$strict>, z$1.ZodObject<{
6103
- commitSha: z$1.ZodString;
6104
- commitSubject: z$1.ZodString;
6105
- merged: z$1.ZodBoolean;
6106
- }, z$1.core.$strip>, "settled", false>;
6107
6080
  "workspace.pull_request_action": HostDaemonCommandDescriptor<"workspace.pull_request_action", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
6108
6081
  environmentId: z$1.ZodString;
6109
6082
  operation: z$1.ZodLiteral<"ready">;
@@ -7581,10 +7554,16 @@ declare const installedPluginSchema: z$1.ZodObject<{
7581
7554
  }, z$1.core.$strip>>>;
7582
7555
  catalogEntryId: z$1.ZodOptional<z$1.ZodString>;
7583
7556
  catalogMarketplaceName: z$1.ZodOptional<z$1.ZodString>;
7557
+ category: z$1.ZodOptional<z$1.ZodString>;
7558
+ categoryId: z$1.ZodOptional<z$1.ZodString>;
7584
7559
  cliCommand: z$1.ZodNullable<z$1.ZodObject<{
7585
7560
  name: z$1.ZodString;
7586
7561
  summary: z$1.ZodString;
7587
7562
  }, z$1.core.$strip>>;
7563
+ collections: z$1.ZodArray<z$1.ZodObject<{
7564
+ id: z$1.ZodString;
7565
+ rank: z$1.ZodNumber;
7566
+ }, z$1.core.$strip>>;
7588
7567
  description: z$1.ZodNullable<z$1.ZodString>;
7589
7568
  enabled: z$1.ZodBoolean;
7590
7569
  handlerStats: z$1.ZodObject<{
@@ -7608,6 +7587,7 @@ declare const installedPluginSchema: z$1.ZodObject<{
7608
7587
  direct: "direct";
7609
7588
  }>;
7610
7589
  providerIds: z$1.ZodArray<z$1.ZodString>;
7590
+ publishedAt: z$1.ZodOptional<z$1.ZodISODateTime>;
7611
7591
  publisherLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;
7612
7592
  rootDir: z$1.ZodString;
7613
7593
  schedules: z$1.ZodArray<z$1.ZodObject<{
@@ -7622,6 +7602,7 @@ declare const installedPluginSchema: z$1.ZodObject<{
7622
7602
  name: z$1.ZodString;
7623
7603
  nextRunAt: z$1.ZodNumber;
7624
7604
  }, z$1.core.$strip>>;
7605
+ screenshots: z$1.ZodArray<z$1.ZodString>;
7625
7606
  services: z$1.ZodArray<z$1.ZodObject<{
7626
7607
  name: z$1.ZodString;
7627
7608
  state: z$1.ZodEnum<{
@@ -7661,6 +7642,7 @@ declare const installedPluginSchema: z$1.ZodObject<{
7661
7642
  unavailable: "unavailable";
7662
7643
  }>>;
7663
7644
  }, z$1.core.$strip>;
7645
+ updatedAt: z$1.ZodOptional<z$1.ZodISODateTime>;
7664
7646
  version: z$1.ZodString;
7665
7647
  }, z$1.core.$strip>;
7666
7648
  type InstalledPlugin = z$1.infer<typeof installedPluginSchema>;
@@ -7691,10 +7673,16 @@ declare const pluginListResponseSchema: z$1.ZodObject<{
7691
7673
  }, z$1.core.$strip>>>;
7692
7674
  catalogEntryId: z$1.ZodOptional<z$1.ZodString>;
7693
7675
  catalogMarketplaceName: z$1.ZodOptional<z$1.ZodString>;
7676
+ category: z$1.ZodOptional<z$1.ZodString>;
7677
+ categoryId: z$1.ZodOptional<z$1.ZodString>;
7694
7678
  cliCommand: z$1.ZodNullable<z$1.ZodObject<{
7695
7679
  name: z$1.ZodString;
7696
7680
  summary: z$1.ZodString;
7697
7681
  }, z$1.core.$strip>>;
7682
+ collections: z$1.ZodArray<z$1.ZodObject<{
7683
+ id: z$1.ZodString;
7684
+ rank: z$1.ZodNumber;
7685
+ }, z$1.core.$strip>>;
7698
7686
  description: z$1.ZodNullable<z$1.ZodString>;
7699
7687
  enabled: z$1.ZodBoolean;
7700
7688
  handlerStats: z$1.ZodObject<{
@@ -7718,6 +7706,7 @@ declare const pluginListResponseSchema: z$1.ZodObject<{
7718
7706
  direct: "direct";
7719
7707
  }>;
7720
7708
  providerIds: z$1.ZodArray<z$1.ZodString>;
7709
+ publishedAt: z$1.ZodOptional<z$1.ZodISODateTime>;
7721
7710
  publisherLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;
7722
7711
  rootDir: z$1.ZodString;
7723
7712
  schedules: z$1.ZodArray<z$1.ZodObject<{
@@ -7732,6 +7721,7 @@ declare const pluginListResponseSchema: z$1.ZodObject<{
7732
7721
  name: z$1.ZodString;
7733
7722
  nextRunAt: z$1.ZodNumber;
7734
7723
  }, z$1.core.$strip>>;
7724
+ screenshots: z$1.ZodArray<z$1.ZodString>;
7735
7725
  services: z$1.ZodArray<z$1.ZodObject<{
7736
7726
  name: z$1.ZodString;
7737
7727
  state: z$1.ZodEnum<{
@@ -7771,6 +7761,7 @@ declare const pluginListResponseSchema: z$1.ZodObject<{
7771
7761
  unavailable: "unavailable";
7772
7762
  }>>;
7773
7763
  }, z$1.core.$strip>;
7764
+ updatedAt: z$1.ZodOptional<z$1.ZodISODateTime>;
7774
7765
  version: z$1.ZodString;
7775
7766
  }, z$1.core.$strip>>;
7776
7767
  }, z$1.core.$strip>;
@@ -7803,10 +7794,16 @@ declare const pluginReloadResponseSchema: z$1.ZodObject<{
7803
7794
  }, z$1.core.$strip>>>;
7804
7795
  catalogEntryId: z$1.ZodOptional<z$1.ZodString>;
7805
7796
  catalogMarketplaceName: z$1.ZodOptional<z$1.ZodString>;
7797
+ category: z$1.ZodOptional<z$1.ZodString>;
7798
+ categoryId: z$1.ZodOptional<z$1.ZodString>;
7806
7799
  cliCommand: z$1.ZodNullable<z$1.ZodObject<{
7807
7800
  name: z$1.ZodString;
7808
7801
  summary: z$1.ZodString;
7809
7802
  }, z$1.core.$strip>>;
7803
+ collections: z$1.ZodArray<z$1.ZodObject<{
7804
+ id: z$1.ZodString;
7805
+ rank: z$1.ZodNumber;
7806
+ }, z$1.core.$strip>>;
7810
7807
  description: z$1.ZodNullable<z$1.ZodString>;
7811
7808
  enabled: z$1.ZodBoolean;
7812
7809
  handlerStats: z$1.ZodObject<{
@@ -7830,6 +7827,7 @@ declare const pluginReloadResponseSchema: z$1.ZodObject<{
7830
7827
  direct: "direct";
7831
7828
  }>;
7832
7829
  providerIds: z$1.ZodArray<z$1.ZodString>;
7830
+ publishedAt: z$1.ZodOptional<z$1.ZodISODateTime>;
7833
7831
  publisherLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;
7834
7832
  rootDir: z$1.ZodString;
7835
7833
  schedules: z$1.ZodArray<z$1.ZodObject<{
@@ -7844,6 +7842,7 @@ declare const pluginReloadResponseSchema: z$1.ZodObject<{
7844
7842
  name: z$1.ZodString;
7845
7843
  nextRunAt: z$1.ZodNumber;
7846
7844
  }, z$1.core.$strip>>;
7845
+ screenshots: z$1.ZodArray<z$1.ZodString>;
7847
7846
  services: z$1.ZodArray<z$1.ZodObject<{
7848
7847
  name: z$1.ZodString;
7849
7848
  state: z$1.ZodEnum<{
@@ -7883,6 +7882,7 @@ declare const pluginReloadResponseSchema: z$1.ZodObject<{
7883
7882
  unavailable: "unavailable";
7884
7883
  }>>;
7885
7884
  }, z$1.core.$strip>;
7885
+ updatedAt: z$1.ZodOptional<z$1.ZodISODateTime>;
7886
7886
  version: z$1.ZodString;
7887
7887
  }, z$1.core.$strip>>;
7888
7888
  }, z$1.core.$strip>;
@@ -7905,6 +7905,11 @@ declare const pluginSettingsResponseSchema: z$1.ZodObject<{
7905
7905
  description: z$1.ZodOptional<z$1.ZodString>;
7906
7906
  label: z$1.ZodString;
7907
7907
  type: z$1.ZodLiteral<"boolean">;
7908
+ }, z$1.core.$strict>, z$1.ZodObject<{
7909
+ default: z$1.ZodOptional<z$1.ZodNumber>;
7910
+ description: z$1.ZodOptional<z$1.ZodString>;
7911
+ label: z$1.ZodString;
7912
+ type: z$1.ZodLiteral<"number">;
7908
7913
  }, z$1.core.$strict>, z$1.ZodObject<{
7909
7914
  default: z$1.ZodOptional<z$1.ZodString>;
7910
7915
  description: z$1.ZodOptional<z$1.ZodString>;
@@ -7931,32 +7936,48 @@ declare const pluginCatalogStatusSchema: z$1.ZodObject<{
7931
7936
  pluginCount: z$1.ZodNumber;
7932
7937
  }, z$1.core.$strip>;
7933
7938
  type PluginCatalogStatus = z$1.infer<typeof pluginCatalogStatusSchema>;
7934
- declare const pluginCatalogSearchResultSchema: z$1.ZodObject<{
7935
- author: z$1.ZodNullable<z$1.ZodObject<{
7936
- name: z$1.ZodString;
7937
- url: z$1.ZodNullable<z$1.ZodString>;
7939
+ declare const pluginCatalogSearchResponseSchema: z$1.ZodObject<{
7940
+ collections: z$1.ZodArray<z$1.ZodObject<{
7941
+ displayName: z$1.ZodString;
7942
+ id: z$1.ZodString;
7943
+ pluginIds: z$1.ZodArray<z$1.ZodString>;
7944
+ }, z$1.core.$strip>>;
7945
+ results: z$1.ZodArray<z$1.ZodObject<{
7946
+ author: z$1.ZodNullable<z$1.ZodObject<{
7947
+ github: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;
7948
+ name: z$1.ZodString;
7949
+ url: z$1.ZodNullable<z$1.ZodString>;
7950
+ }, z$1.core.$strip>>;
7951
+ category: z$1.ZodOptional<z$1.ZodString>;
7952
+ categoryId: z$1.ZodOptional<z$1.ZodString>;
7953
+ collections: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
7954
+ id: z$1.ZodString;
7955
+ rank: z$1.ZodNumber;
7956
+ }, z$1.core.$strip>>>;
7957
+ compatible: z$1.ZodBoolean;
7958
+ description: z$1.ZodString;
7959
+ displayName: z$1.ZodString;
7960
+ entryId: z$1.ZodString;
7961
+ icon: z$1.ZodNullable<z$1.ZodString>;
7962
+ iconTinted: z$1.ZodDefault<z$1.ZodBoolean>;
7963
+ iconUrl: z$1.ZodNullable<z$1.ZodString>;
7964
+ incompatibleReason: z$1.ZodNullable<z$1.ZodString>;
7965
+ installed: z$1.ZodBoolean;
7966
+ installs: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodNumber>>;
7967
+ marketplace: z$1.ZodString;
7968
+ marketplaceDisplayName: z$1.ZodString;
7969
+ official: z$1.ZodBoolean;
7970
+ pluginId: z$1.ZodString;
7971
+ publishedAt: z$1.ZodOptional<z$1.ZodISODateTime>;
7972
+ publisherKey: z$1.ZodString;
7973
+ publisherLabel: z$1.ZodString;
7974
+ repositoryUrl: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;
7975
+ screenshots: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;
7976
+ source: z$1.ZodString;
7977
+ updatedAt: z$1.ZodOptional<z$1.ZodISODateTime>;
7938
7978
  }, z$1.core.$strip>>;
7939
- category: z$1.ZodString;
7940
- compatible: z$1.ZodBoolean;
7941
- description: z$1.ZodString;
7942
- displayName: z$1.ZodString;
7943
- entryId: z$1.ZodString;
7944
- icon: z$1.ZodNullable<z$1.ZodString>;
7945
- iconTinted: z$1.ZodDefault<z$1.ZodBoolean>;
7946
- iconUrl: z$1.ZodNullable<z$1.ZodString>;
7947
- incompatibleReason: z$1.ZodNullable<z$1.ZodString>;
7948
- installed: z$1.ZodBoolean;
7949
- installs: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodNumber>>;
7950
- marketplace: z$1.ZodString;
7951
- marketplaceDisplayName: z$1.ZodString;
7952
- official: z$1.ZodBoolean;
7953
- pluginId: z$1.ZodString;
7954
- publisherKey: z$1.ZodString;
7955
- publisherLabel: z$1.ZodString;
7956
- repositoryUrl: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;
7957
- source: z$1.ZodString;
7958
7979
  }, z$1.core.$strip>;
7959
- type PluginCatalogSearchResult$1 = z$1.infer<typeof pluginCatalogSearchResultSchema>;
7980
+ type PluginCatalogSearchResponse = z$1.infer<typeof pluginCatalogSearchResponseSchema>;
7960
7981
  declare const pluginCatalogResolvedSourceSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
7961
7982
  kind: z$1.ZodLiteral<"npm">;
7962
7983
  package: z$1.ZodString;
@@ -7988,6 +8009,7 @@ declare const pluginCatalogInstallPlanSchema: z$1.ZodDiscriminatedUnion<[z$1.Zod
7988
8009
  source: z$1.ZodString;
7989
8010
  }, z$1.core.$strip>, z$1.ZodObject<{
7990
8011
  author: z$1.ZodObject<{
8012
+ github: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;
7991
8013
  name: z$1.ZodString;
7992
8014
  url: z$1.ZodNullable<z$1.ZodString>;
7993
8015
  }, z$1.core.$strip>;
@@ -10280,26 +10302,143 @@ declare const sendMessageResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObjec
10280
10302
  }, z$1.core.$strip>, z$1.ZodObject<{
10281
10303
  delivery: z$1.ZodLiteral<"queued">;
10282
10304
  ok: z$1.ZodLiteral<true>;
10283
- queuedMessageId: z$1.ZodString;
10284
- sendAt: z$1.ZodNullable<z$1.ZodNumber>;
10285
- waitingOn: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
10286
- kind: z$1.ZodLiteral<"time">;
10287
- }, z$1.core.$strip>, z$1.ZodObject<{
10288
- kind: z$1.ZodLiteral<"thread-busy">;
10289
- }, z$1.core.$strip>, z$1.ZodObject<{
10290
- kind: z$1.ZodLiteral<"turn-starting">;
10291
- }, z$1.core.$strip>, z$1.ZodObject<{
10292
- kind: z$1.ZodLiteral<"provisioning">;
10293
- }, z$1.core.$strip>, z$1.ZodObject<{
10294
- hostName: z$1.ZodString;
10295
- kind: z$1.ZodLiteral<"host-offline">;
10296
- }, z$1.core.$strip>, z$1.ZodObject<{
10297
- kind: z$1.ZodLiteral<"interaction">;
10298
- }, z$1.core.$strip>, z$1.ZodObject<{
10299
- kind: z$1.ZodLiteral<"plugin">;
10300
- pluginId: z$1.ZodString;
10301
- reason: z$1.ZodString;
10302
- }, z$1.core.$strip>], "kind">;
10305
+ queuedMessage: z$1.ZodObject<{
10306
+ content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
10307
+ mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{
10308
+ end: z$1.ZodNumber;
10309
+ resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
10310
+ kind: z$1.ZodLiteral<"thread">;
10311
+ label: z$1.ZodString;
10312
+ projectId: z$1.ZodOptional<z$1.ZodString>;
10313
+ threadId: z$1.ZodString;
10314
+ }, z$1.core.$strip>, z$1.ZodObject<{
10315
+ kind: z$1.ZodLiteral<"project">;
10316
+ label: z$1.ZodString;
10317
+ projectId: z$1.ZodString;
10318
+ }, z$1.core.$strip>, z$1.ZodObject<{
10319
+ kind: z$1.ZodLiteral<"section">;
10320
+ label: z$1.ZodString;
10321
+ sectionId: z$1.ZodString;
10322
+ }, z$1.core.$strip>, z$1.ZodObject<{
10323
+ entryKind: z$1.ZodEnum<{
10324
+ directory: "directory";
10325
+ file: "file";
10326
+ }>;
10327
+ kind: z$1.ZodLiteral<"path">;
10328
+ label: z$1.ZodString;
10329
+ path: z$1.ZodString;
10330
+ source: z$1.ZodEnum<{
10331
+ "thread-storage": "thread-storage";
10332
+ workspace: "workspace";
10333
+ }>;
10334
+ }, z$1.core.$strip>, z$1.ZodObject<{
10335
+ argumentHint: z$1.ZodNullable<z$1.ZodString>;
10336
+ kind: z$1.ZodLiteral<"command">;
10337
+ label: z$1.ZodString;
10338
+ name: z$1.ZodString;
10339
+ origin: z$1.ZodEnum<{
10340
+ builtin: "builtin";
10341
+ project: "project";
10342
+ user: "user";
10343
+ }>;
10344
+ source: z$1.ZodEnum<{
10345
+ command: "command";
10346
+ skill: "skill";
10347
+ }>;
10348
+ trigger: z$1.ZodEnum<{
10349
+ "/": "/";
10350
+ }>;
10351
+ }, z$1.core.$strip>, z$1.ZodObject<{
10352
+ icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;
10353
+ itemId: z$1.ZodString;
10354
+ kind: z$1.ZodLiteral<"plugin">;
10355
+ label: z$1.ZodString;
10356
+ pluginId: z$1.ZodString;
10357
+ }, z$1.core.$strip>], "kind">>;
10358
+ start: z$1.ZodNumber;
10359
+ }, z$1.core.$strip>>>;
10360
+ text: z$1.ZodString;
10361
+ type: z$1.ZodLiteral<"text">;
10362
+ visibility: z$1.ZodOptional<z$1.ZodEnum<{
10363
+ "agent-only": "agent-only";
10364
+ }>>;
10365
+ }, z$1.core.$strip>, z$1.ZodObject<{
10366
+ type: z$1.ZodLiteral<"image">;
10367
+ url: z$1.ZodString;
10368
+ visibility: z$1.ZodOptional<z$1.ZodEnum<{
10369
+ "agent-only": "agent-only";
10370
+ }>>;
10371
+ }, z$1.core.$strip>, z$1.ZodObject<{
10372
+ path: z$1.ZodString;
10373
+ type: z$1.ZodLiteral<"localImage">;
10374
+ visibility: z$1.ZodOptional<z$1.ZodEnum<{
10375
+ "agent-only": "agent-only";
10376
+ }>>;
10377
+ }, z$1.core.$strip>, z$1.ZodObject<{
10378
+ mimeType: z$1.ZodOptional<z$1.ZodString>;
10379
+ name: z$1.ZodOptional<z$1.ZodString>;
10380
+ path: z$1.ZodString;
10381
+ sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;
10382
+ type: z$1.ZodLiteral<"localFile">;
10383
+ visibility: z$1.ZodOptional<z$1.ZodEnum<{
10384
+ "agent-only": "agent-only";
10385
+ }>>;
10386
+ }, z$1.core.$strip>], "type">>;
10387
+ createdAt: z$1.ZodNumber;
10388
+ editable: z$1.ZodBoolean;
10389
+ failureReason: z$1.ZodNullable<z$1.ZodString>;
10390
+ groupWithNext: z$1.ZodBoolean;
10391
+ id: z$1.ZodString;
10392
+ model: z$1.ZodString;
10393
+ payload: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
10394
+ kind: z$1.ZodLiteral<"inline">;
10395
+ }, z$1.core.$strip>, z$1.ZodObject<{
10396
+ attempt: z$1.ZodNumber;
10397
+ kind: z$1.ZodLiteral<"retry">;
10398
+ reason: z$1.ZodString;
10399
+ retryOfTurnRequestId: z$1.ZodString;
10400
+ }, z$1.core.$strip>], "kind">;
10401
+ permissionMode: z$1.ZodEnum<{
10402
+ "accept-edits": "accept-edits";
10403
+ auto: "auto";
10404
+ full: "full";
10405
+ }>;
10406
+ reasoningLevel: z$1.ZodEnum<{
10407
+ high: "high";
10408
+ low: "low";
10409
+ max: "max";
10410
+ medium: "medium";
10411
+ none: "none";
10412
+ ultra: "ultra";
10413
+ ultracode: "ultracode";
10414
+ xhigh: "xhigh";
10415
+ }>;
10416
+ sendAt: z$1.ZodNullable<z$1.ZodNumber>;
10417
+ serviceTier: z$1.ZodEnum<{
10418
+ default: "default";
10419
+ fast: "fast";
10420
+ }>;
10421
+ threadId: z$1.ZodString;
10422
+ updatedAt: z$1.ZodNumber;
10423
+ waitingOn: z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
10424
+ kind: z$1.ZodLiteral<"time">;
10425
+ }, z$1.core.$strip>, z$1.ZodObject<{
10426
+ kind: z$1.ZodLiteral<"thread-busy">;
10427
+ }, z$1.core.$strip>, z$1.ZodObject<{
10428
+ kind: z$1.ZodLiteral<"turn-starting">;
10429
+ }, z$1.core.$strip>, z$1.ZodObject<{
10430
+ kind: z$1.ZodLiteral<"provisioning">;
10431
+ }, z$1.core.$strip>, z$1.ZodObject<{
10432
+ hostName: z$1.ZodString;
10433
+ kind: z$1.ZodLiteral<"host-offline">;
10434
+ }, z$1.core.$strip>, z$1.ZodObject<{
10435
+ kind: z$1.ZodLiteral<"interaction">;
10436
+ }, z$1.core.$strip>, z$1.ZodObject<{
10437
+ kind: z$1.ZodLiteral<"plugin">;
10438
+ pluginId: z$1.ZodString;
10439
+ reason: z$1.ZodString;
10440
+ }, z$1.core.$strip>], "kind">>;
10441
+ }, z$1.core.$strip>;
10303
10442
  }, z$1.core.$strip>], "delivery">;
10304
10443
  type SendMessageResponse = z$1.infer<typeof sendMessageResponseSchema>;
10305
10444
  declare const editMessageRequestSchema: z$1.ZodObject<{
@@ -10698,7 +10837,11 @@ declare const setQueuedMessageGroupBoundaryRequestSchema: z$1.ZodObject<{
10698
10837
  groupBoundaryQueuedMessageId: z$1.ZodString;
10699
10838
  }, z$1.core.$strip>;
10700
10839
  type SetQueuedMessageGroupBoundaryRequest = z$1.infer<typeof setQueuedMessageGroupBoundaryRequestSchema>;
10701
- declare const sendQueuedMessageResponseSchema: z$1.ZodObject<{
10840
+ declare const sendQueuedMessageResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
10841
+ delivery: z$1.ZodLiteral<"sent">;
10842
+ ok: z$1.ZodLiteral<true>;
10843
+ }, z$1.core.$strip>, z$1.ZodObject<{
10844
+ delivery: z$1.ZodLiteral<"queued">;
10702
10845
  ok: z$1.ZodLiteral<true>;
10703
10846
  queuedMessage: z$1.ZodObject<{
10704
10847
  content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{
@@ -10837,7 +10980,7 @@ declare const sendQueuedMessageResponseSchema: z$1.ZodObject<{
10837
10980
  reason: z$1.ZodString;
10838
10981
  }, z$1.core.$strip>], "kind">>;
10839
10982
  }, z$1.core.$strip>;
10840
- }, z$1.core.$strip>;
10983
+ }, z$1.core.$strip>], "delivery">;
10841
10984
  type SendQueuedMessageResponse = z$1.infer<typeof sendQueuedMessageResponseSchema>;
10842
10985
  declare const threadListResponseSchema: z$1.ZodArray<z$1.ZodObject<{
10843
10986
  activity: z$1.ZodObject<{
@@ -12487,6 +12630,14 @@ interface PluginHomepageSectionProps {
12487
12630
  */
12488
12631
  interface PluginSettingsSectionProps {
12489
12632
  }
12633
+ /**
12634
+ * Props passed to an `experimental_appOverlay` component.
12635
+ *
12636
+ * Deliberately empty while the component reads live app state through SDK
12637
+ * hooks; versioned additive like the other slot props.
12638
+ */
12639
+ interface ExperimentalAppOverlayProps {
12640
+ }
12490
12641
  /** Props passed to a `navPanel` component (it owns its whole route). */
12491
12642
  interface PluginNavPanelProps {
12492
12643
  /**
@@ -12851,6 +13002,21 @@ interface PluginSettingsSectionRegistration {
12851
13002
  description?: string;
12852
13003
  component: ComponentType<PluginSettingsSectionProps>;
12853
13004
  }
13005
+ /**
13006
+ * Render app-wide plugin UI outside BB's layout regions.
13007
+ *
13008
+ * The host mounts each registration once per app window through the ordinary
13009
+ * plugin React boundary. The component therefore keeps PluginContext, router,
13010
+ * query, realtime, and other app-level SDK contexts when it renders fixed UI
13011
+ * or creates a React portal. BB supplies no chrome, positioning, visibility,
13012
+ * or interaction policy; the plugin owns those details and responsive
13013
+ * behavior. Registrations are additive and a crash hides only that overlay.
13014
+ */
13015
+ interface ExperimentalAppOverlayRegistration {
13016
+ /** Unique within the plugin; letters, digits, `-`, `_`. */
13017
+ id: string;
13018
+ component: ComponentType<ExperimentalAppOverlayProps>;
13019
+ }
12854
13020
  /**
12855
13021
  * Owner-defined validator for a fixed tab's transient target. The host first
12856
13022
  * verifies that the value is JSON-safe, then calls this validator before
@@ -13668,6 +13834,12 @@ interface PluginTimelineRendererRegistration {
13668
13834
  interface PluginAppSlots {
13669
13835
  homepageSection(registration: PluginHomepageSectionRegistration): void;
13670
13836
  settingsSection(registration: PluginSettingsSectionRegistration): void;
13837
+ /**
13838
+ * Render one app-wide overlay component (see
13839
+ * {@link ExperimentalAppOverlayRegistration}). Experimental: see
13840
+ * docs/api_to_audit.md.
13841
+ */
13842
+ experimental_appOverlay(registration: ExperimentalAppOverlayRegistration): void;
13671
13843
  navPanel(registration: PluginNavPanelRegistration): void;
13672
13844
  /**
13673
13845
  * Add an action to an existing thread's panel launcher. This slot is
@@ -13807,7 +13979,7 @@ interface PluginSettingsState {
13807
13979
  * Effective non-secret setting values (secret settings are excluded —
13808
13980
  * read them server-side). Undefined while loading or unavailable.
13809
13981
  */
13810
- values: Record<string, string | boolean> | undefined;
13982
+ values: Record<string, string | number | boolean> | undefined;
13811
13983
  isLoading: boolean;
13812
13984
  }
13813
13985
  /** State of the app's shared realtime connection to the bb server. */
@@ -14598,10 +14770,6 @@ interface EnvironmentDiffBranchesArgs extends EnvironmentDiffBranchesQuery {
14598
14770
  interface EnvironmentCommitArgs {
14599
14771
  environmentId: string;
14600
14772
  }
14601
- interface EnvironmentSquashMergeArgs {
14602
- environmentId: string;
14603
- mergeBaseBranch: string;
14604
- }
14605
14773
  interface EnvironmentPullRequestMergeArgs {
14606
14774
  environmentId: string;
14607
14775
  method: PullRequestMergeMethod;
@@ -14627,7 +14795,6 @@ type EnvironmentMarkPullRequestReadyResult = PullRequestReadyActionResponse;
14627
14795
  type EnvironmentMergePullRequestResult = PullRequestMergeActionResponse;
14628
14796
  type EnvironmentPathsResult = WorkspacePathListResponse;
14629
14797
  type EnvironmentPullRequestResult = EnvironmentPullRequestResponse;
14630
- type EnvironmentSquashMergeResult = SquashMergeActionResponse;
14631
14798
  type EnvironmentStatusResult = EnvironmentStatusResponse;
14632
14799
  type EnvironmentUpdateResult = Environment;
14633
14800
  interface EnvironmentsArea {
@@ -14644,7 +14811,6 @@ interface EnvironmentsArea {
14644
14811
  markPullRequestReady(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestReadyResult>;
14645
14812
  mergePullRequest(args: EnvironmentPullRequestMergeArgs): Promise<EnvironmentMergePullRequestResult>;
14646
14813
  paths(args: EnvironmentPathsArgs): Promise<EnvironmentPathsResult>;
14647
- squashMerge(args: EnvironmentSquashMergeArgs): Promise<EnvironmentSquashMergeResult>;
14648
14814
  status(args: EnvironmentStatusArgs): Promise<EnvironmentStatusResult>;
14649
14815
  update(args: EnvironmentUpdateArgs): Promise<EnvironmentUpdateResult>;
14650
14816
  }
@@ -15057,7 +15223,7 @@ type PluginGetSourceResult = PluginSourceDetail;
15057
15223
  type PluginCheckUpdatesResult = PluginUpdateCheckEntry[];
15058
15224
  type PluginApplyUpdateResult = PluginApplyUpdateResult$1;
15059
15225
  type PluginCatalogStatusResult = PluginCatalogStatus;
15060
- type PluginCatalogSearchResult = PluginCatalogSearchResult$1[];
15226
+ type PluginCatalogSearchResult = PluginCatalogSearchResponse;
15061
15227
  type PluginCatalogInstallPlanResult = PluginCatalogInstallPlan;
15062
15228
  type PluginMarketplaceListResult = PluginMarketplace[];
15063
15229
  type PluginMarketplaceAddResult = PluginMarketplace;
@@ -16004,6 +16170,12 @@ type PluginSettingDescriptor = {
16004
16170
  /** Synchronously validate without transforming a proposed value. */
16005
16171
  experimental_schema?: StandardSchemaV1<boolean, boolean>;
16006
16172
  default?: boolean;
16173
+ } | {
16174
+ type: "number";
16175
+ label: string;
16176
+ description?: string;
16177
+ experimental_schema?: StandardSchemaV1<number, number>;
16178
+ default?: number;
16007
16179
  } | {
16008
16180
  type: "select";
16009
16181
  label: string;
@@ -16021,16 +16193,18 @@ type PluginSettingDescriptor = {
16021
16193
  default?: string;
16022
16194
  };
16023
16195
  type PluginSettingDescriptors = Record<string, PluginSettingDescriptor>;
16024
- type PluginSettingValue = string | boolean;
16196
+ type PluginSettingValue = string | number | boolean;
16025
16197
  /** `default` present → non-optional value; absent → `T | undefined`. */
16026
16198
  type PluginSettingsValues<Ds extends Record<string, PluginSettingDescriptor>> = {
16027
16199
  [K in keyof Ds]: Ds[K] extends {
16028
- default: string | boolean;
16200
+ default: string | number | boolean;
16029
16201
  } ? PluginSettingValueOf<Ds[K]> : PluginSettingValueOf<Ds[K]> | undefined;
16030
16202
  };
16031
16203
  type PluginSettingValueOf<D extends PluginSettingDescriptor> = D extends {
16032
16204
  type: "boolean";
16033
- } ? boolean : string;
16205
+ } ? boolean : D extends {
16206
+ type: "number";
16207
+ } ? number : string;
16034
16208
  interface PluginSettingsHandle<Ds extends Record<string, PluginSettingDescriptor>> {
16035
16209
  /** Load-safe: callable inside the factory. */
16036
16210
  get(): Promise<PluginSettingsValues<Ds>>;
@@ -16161,6 +16335,11 @@ interface PluginThreadEventPayloads {
16161
16335
  "thread.deleted": {
16162
16336
  thread: ThreadResponse;
16163
16337
  };
16338
+ /** Fired after a pending interaction row is committed. */
16339
+ "interaction.pending": {
16340
+ thread: ThreadResponse;
16341
+ interaction: PendingInteraction;
16342
+ };
16164
16343
  /**
16165
16344
  * Fired after a dispatch attempt is queued as a row — by a `message.dispatch`
16166
16345
  * hook's `wait` decision, by a `sendAt` in the future, or by a core wait (the
@@ -17187,6 +17366,11 @@ interface PluginEvents {
17187
17366
  on<E extends PluginThreadEventName>(event: E, handler: PluginThreadEventHandler<E>): void;
17188
17367
  }
17189
17368
  interface PluginServerApi {
17369
+ /**
17370
+ * The operator-configured public app URL from `BB_APP_URL`, or `null` when
17371
+ * the operator has not configured one. This value is not bind-gated.
17372
+ */
17373
+ readonly experimental_appUrl: string | null;
17190
17374
  /**
17191
17375
  * This BB server's own loopback base URL (e.g. "http://127.0.0.1:38886"),
17192
17376
  * which serves the SPA + /api + /ws. For plugins that proxy or relay
@@ -17351,4 +17535,4 @@ interface BbPluginApi {
17351
17535
  }
17352
17536
 
17353
17537
  export { PLUGIN_CLI_OUTPUT_MAX_BYTES, defineRpcContract, experimental_defineHostEntry };
17354
- export type { BbContext, BbNavigate, BbPluginApi, CodeOverflowMode, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, DiffProps, DiffViewMode, ExperimentalAppPanel, ExperimentalAppPanelSurface, ExperimentalComposerSubmitOptions, ExperimentalDiffFileContent, ExperimentalDiffFullFileContents, ExperimentalFileLinkProps, ExperimentalFileLocation, ExperimentalFileOpenOptions, ExperimentalFixedTabTargetContract, ExperimentalFixedTabTargetState, ExperimentalHostCallOptions, ExperimentalHostClient, ExperimentalHostEntry, ExperimentalHostPaths, ExperimentalHostRpcContext, ExperimentalHostRpcHandlers, ExperimentalHostSignalContract, ExperimentalHostSignalEvent, ExperimentalHostSignals, ExperimentalHostWatchChange, ExperimentalHostWatchChangeType, ExperimentalHostWatchEvent, ExperimentalHostWatchListener, ExperimentalHostWatchOptions, ExperimentalHostWatchSubscription, ExperimentalHostWorkerLease, ExperimentalLiveFileTarget, ExperimentalOpenFixedTabOptions, ExperimentalPermissionModePickerProps, ExperimentalPluginFixedTabReference, ExperimentalProviderModelPickerProps, ExperimentalProviderModelPickerRouting, ExperimentalProviderModelPickerValue, ExperimentalSidebarNavigationAction, ExperimentalSidebarNavigationActivationOptions, ExperimentalSidebarNavigationIcon, ExperimentalSidebarNavigationItem, ExperimentalSidebarNavigationProps, ExperimentalSidebarNavigationRegistration, ExperimentalSidebarNavigationShortcut, JsonValue, MarkdownProps, MessageDispatchHookContext, MessageDispatchHookDecision, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolLabels, PluginAgentToolPresentation, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAiServiceDeclaration, PluginAiServiceKind, PluginAiServices, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginCli, PluginCliCommandInfo, PluginCliContext, PluginCliExecutionResult, PluginCliOutputLimitError, PluginCliRegistration, PluginCliResult, PluginCodeThemeData, PluginCodeThemeState, PluginCodeThemeTokenRule, PluginCommandPaletteActionContext, PluginCommandPaletteActionRegistration, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginDiffRendererProps, PluginDiffRendererRegistration, PluginDispatchAttemptKind, PluginDispatchExecution, PluginDispatchExecutionSources, PluginDispatchInput, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginFixedTabDeclaration, PluginFixedTabRegistration, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHookHandler, PluginHookName, PluginHookSignatures, PluginHooks, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginNewThreadPanelActionContext, PluginNewThreadPanelActionRegistration, PluginNewThreadPanelProps, PluginPanelActionOpenOptions, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginProviderCapabilities, PluginProviderComposerAction, PluginProviderDeclaration, PluginProviderExtensionKindDeclaration, PluginProviderFallbackModel, PluginProviderIconRegistration, PluginProviderMaintenance, PluginProviderModelCatalogScope, PluginProviderNativeRootEntry, PluginProviderNativeRoots, PluginProviderOptionDescriptor, PluginProviderOptionsContext, PluginProviderPermissionMode, PluginProviderReasoningLevel, PluginProviderStrings, PluginProviders, PluginProvidersState, PluginRealtime, PluginRealtimeConnectionState, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSidebarWorkspaceKind, PluginSourceCodeRendererProps, PluginSourceCodeRendererRegistration, PluginStatusApi, PluginStorage, PluginTargetedPanelActionOpenOptions, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginTimelineRendererProps, PluginTimelineRendererRegistration, PluginTimelineRendererRow, PluginTimelineRowPresentation, PluginTimelineRowStatus, PluginTurnFailedEvent, PluginUi, SourceCodeLineRange, SourceCodeProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps, UrlLinkProps };
17538
+ export type { BbContext, BbNavigate, BbPluginApi, CodeOverflowMode, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, DiffProps, DiffViewMode, ExperimentalAppOverlayProps, ExperimentalAppOverlayRegistration, ExperimentalAppPanel, ExperimentalAppPanelSurface, ExperimentalComposerSubmitOptions, ExperimentalDiffFileContent, ExperimentalDiffFullFileContents, ExperimentalFileLinkProps, ExperimentalFileLocation, ExperimentalFileOpenOptions, ExperimentalFixedTabTargetContract, ExperimentalFixedTabTargetState, ExperimentalHostCallOptions, ExperimentalHostClient, ExperimentalHostEntry, ExperimentalHostPaths, ExperimentalHostRpcContext, ExperimentalHostRpcHandlers, ExperimentalHostSignalContract, ExperimentalHostSignalEvent, ExperimentalHostSignals, ExperimentalHostWatchChange, ExperimentalHostWatchChangeType, ExperimentalHostWatchEvent, ExperimentalHostWatchListener, ExperimentalHostWatchOptions, ExperimentalHostWatchSubscription, ExperimentalHostWorkerLease, ExperimentalLiveFileTarget, ExperimentalOpenFixedTabOptions, ExperimentalPermissionModePickerProps, ExperimentalPluginFixedTabReference, ExperimentalProviderModelPickerProps, ExperimentalProviderModelPickerRouting, ExperimentalProviderModelPickerValue, ExperimentalSidebarNavigationAction, ExperimentalSidebarNavigationActivationOptions, ExperimentalSidebarNavigationIcon, ExperimentalSidebarNavigationItem, ExperimentalSidebarNavigationProps, ExperimentalSidebarNavigationRegistration, ExperimentalSidebarNavigationShortcut, JsonValue, MarkdownProps, MessageDispatchHookContext, MessageDispatchHookDecision, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolLabels, PluginAgentToolPresentation, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAiServiceDeclaration, PluginAiServiceKind, PluginAiServices, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginCli, PluginCliCommandInfo, PluginCliContext, PluginCliExecutionResult, PluginCliOutputLimitError, PluginCliRegistration, PluginCliResult, PluginCodeThemeData, PluginCodeThemeState, PluginCodeThemeTokenRule, PluginCommandPaletteActionContext, PluginCommandPaletteActionRegistration, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginDiffRendererProps, PluginDiffRendererRegistration, PluginDispatchAttemptKind, PluginDispatchExecution, PluginDispatchExecutionSources, PluginDispatchInput, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginFixedTabDeclaration, PluginFixedTabRegistration, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHookHandler, PluginHookName, PluginHookSignatures, PluginHooks, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginNewThreadPanelActionContext, PluginNewThreadPanelActionRegistration, PluginNewThreadPanelProps, PluginPanelActionOpenOptions, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginProviderCapabilities, PluginProviderComposerAction, PluginProviderDeclaration, PluginProviderExtensionKindDeclaration, PluginProviderFallbackModel, PluginProviderIconRegistration, PluginProviderMaintenance, PluginProviderModelCatalogScope, PluginProviderNativeRootEntry, PluginProviderNativeRoots, PluginProviderOptionDescriptor, PluginProviderOptionsContext, PluginProviderPermissionMode, PluginProviderReasoningLevel, PluginProviderStrings, PluginProviders, PluginProvidersState, PluginRealtime, PluginRealtimeConnectionState, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSidebarWorkspaceKind, PluginSourceCodeRendererProps, PluginSourceCodeRendererRegistration, PluginStatusApi, PluginStorage, PluginTargetedPanelActionOpenOptions, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginTimelineRendererProps, PluginTimelineRendererRegistration, PluginTimelineRendererRow, PluginTimelineRowPresentation, PluginTimelineRowStatus, PluginTurnFailedEvent, PluginUi, SourceCodeLineRange, SourceCodeProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps, UrlLinkProps };
@@ -276,7 +276,7 @@ var PLUGIN_HTTP_METHODS = /* @__PURE__ */ new Set([
276
276
  "HEAD",
277
277
  "OPTIONS"
278
278
  ]);
279
- var RPC_METHOD_PATTERN = /^[a-zA-Z0-9_-]+$/;
279
+ var RPC_METHOD_PATTERN = /^[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*$/;
280
280
  var BACKGROUND_NAME_PATTERN = /^[a-zA-Z0-9_-]+$/;
281
281
  var CLI_COMMAND_NAME_PATTERN = /^[a-z0-9-]+$/;
282
282
  var AGENT_TOOL_NAME_PATTERN = /^[a-zA-Z0-9_-]+$/;
@@ -299,6 +299,9 @@ var stringSettingSchemaSchema = z3.custom(
299
299
  var booleanSettingSchemaSchema = z3.custom(
300
300
  (value) => isStandardSchema(value)
301
301
  );
302
+ var numberSettingSchemaSchema = z3.custom(
303
+ (value) => isStandardSchema(value)
304
+ );
302
305
  var settingDescriptorSchema = z3.discriminatedUnion("type", [
303
306
  z3.object({
304
307
  type: z3.literal("string"),
@@ -320,6 +323,12 @@ var settingDescriptorSchema = z3.discriminatedUnion("type", [
320
323
  experimental_schema: booleanSettingSchemaSchema.optional(),
321
324
  default: z3.boolean().optional()
322
325
  }).strict(),
326
+ z3.object({
327
+ type: z3.literal("number"),
328
+ ...settingsBaseFields,
329
+ experimental_schema: numberSettingSchemaSchema.optional(),
330
+ default: z3.number().finite().optional()
331
+ }).strict(),
323
332
  z3.object({
324
333
  type: z3.literal("select"),
325
334
  ...settingsBaseFields,
@@ -416,6 +425,21 @@ function validateSettingsUpdate(descriptors, values) {
416
425
  }
417
426
  continue;
418
427
  }
428
+ if (descriptor.type === "number") {
429
+ if (typeof value !== "number" || !Number.isFinite(value)) {
430
+ errors.push(`setting "${key}" expects a finite number`);
431
+ continue;
432
+ }
433
+ const validationError2 = settingSchemaError(
434
+ key,
435
+ descriptor.experimental_schema,
436
+ value
437
+ );
438
+ if (validationError2 !== null) {
439
+ errors.push(validationError2);
440
+ }
441
+ continue;
442
+ }
419
443
  if (typeof value !== "string") {
420
444
  errors.push(`setting "${key}" expects a string`);
421
445
  continue;
@@ -246,6 +246,7 @@ function collectPluginAppRegistrations(definition, onComposerCustomizationReject
246
246
  const collected = {
247
247
  homepageSections: [],
248
248
  settingsSections: [],
249
+ appOverlays: [],
249
250
  navPanels: [],
250
251
  threadPanelActions: [],
251
252
  newThreadPanelActions: [],
@@ -268,6 +269,7 @@ function collectPluginAppRegistrations(definition, onComposerCustomizationReject
268
269
  const seenIds = {
269
270
  homepageSection: /* @__PURE__ */ new Set(),
270
271
  settingsSection: /* @__PURE__ */ new Set(),
272
+ appOverlay: /* @__PURE__ */ new Set(),
271
273
  navPanel: /* @__PURE__ */ new Set(),
272
274
  threadPanelAction: /* @__PURE__ */ new Set(),
273
275
  newThreadPanelAction: /* @__PURE__ */ new Set(),
@@ -316,6 +318,15 @@ function collectPluginAppRegistrations(definition, onComposerCustomizationReject
316
318
  component: requireComponent(kind, registration.component)
317
319
  });
318
320
  },
321
+ experimental_appOverlay(registration) {
322
+ const kind = "slots.experimental_appOverlay";
323
+ const id = requireSlotId(kind, registration?.id);
324
+ requireUniqueId(kind, seenIds.appOverlay, id);
325
+ collected.appOverlays.push({
326
+ id,
327
+ component: requireComponent(kind, registration.component)
328
+ });
329
+ },
319
330
  navPanel(registration) {
320
331
  const kind = "slots.navPanel";
321
332
  const id = requireSlotId(kind, registration?.id);
@@ -4189,6 +4189,11 @@ var acpCompactionCompletedNotificationParamsSchema = z34.discriminatedUnion("sta
4189
4189
  threadId: z34.string().min(1),
4190
4190
  status: z34.literal("interrupted")
4191
4191
  }).passthrough(),
4192
+ z34.object({
4193
+ threadId: z34.string().min(1),
4194
+ status: z34.literal("skipped"),
4195
+ detail: z34.string().min(1)
4196
+ }).passthrough(),
4192
4197
  z34.object({
4193
4198
  threadId: z34.string().min(1),
4194
4199
  status: z34.literal("failed"),
@@ -4820,6 +4825,18 @@ function ompCommandResult(event) {
4820
4825
  ...output.length === 0 ? {} : { output }
4821
4826
  };
4822
4827
  }
4828
+ var OMP_COMPACTION_FAILURE_PATTERN = /\bcompaction failed\b/i;
4829
+ var OMP_COMPACTION_NOOP_PATTERN = /\b(?:nothing to compact|already compacted)\b/i;
4830
+ function compactionOutcomeForEndTurn(dialect, agentMessage) {
4831
+ if (dialect.id !== "omp") {
4832
+ return { status: "completed" };
4833
+ }
4834
+ const text = agentMessage.trim();
4835
+ if (!OMP_COMPACTION_FAILURE_PATTERN.test(text)) {
4836
+ return { status: "completed" };
4837
+ }
4838
+ return OMP_COMPACTION_NOOP_PATTERN.test(text) ? { status: "skipped", detail: text } : { status: "failed", error: text };
4839
+ }
4823
4840
  var OMP_ACP_DIALECT = {
4824
4841
  id: "omp",
4825
4842
  commandResult: ompCommandResult
@@ -6022,12 +6039,22 @@ function createAcpDeltaTranslator(options = {}) {
6022
6039
  return [];
6023
6040
  }
6024
6041
  const status = params.data.status;
6042
+ const turnStatus = status === "skipped" ? "completed" : status;
6025
6043
  return [
6026
- ...flushOpenTurnWork(context, status),
6044
+ ...flushOpenTurnWork(context, itemStatusForTurnStatus(turnStatus)),
6027
6045
  ...status === "completed" ? [{ kind: "context.compacted" }] : [],
6046
+ ...status === "skipped" ? [
6047
+ {
6048
+ kind: "provider.warning",
6049
+ category: "compaction-skipped",
6050
+ summary: "Context compaction skipped",
6051
+ details: params.data.detail,
6052
+ vouchedTurn: true
6053
+ }
6054
+ ] : [],
6028
6055
  {
6029
6056
  kind: "turn.boundary",
6030
- status,
6057
+ status: turnStatus,
6031
6058
  ...status === "failed" ? { error: { message: params.data.error } } : {}
6032
6059
  }
6033
6060
  ];
@@ -6663,6 +6690,93 @@ function splitPrimaryModels(catalogModels, primaryModels) {
6663
6690
  };
6664
6691
  }
6665
6692
 
6693
+ // ../provider-bridge-acp/src/cursor-model-selection.ts
6694
+ var CURSOR_LEGACY_FAMILY_SELECTIONS = {
6695
+ "claude-4-sonnet": { modelId: "claude-sonnet-4" },
6696
+ "claude-4.5-opus": { modelId: "claude-opus-4-5" },
6697
+ "claude-4.5-sonnet": { modelId: "claude-sonnet-4-5" },
6698
+ "claude-4.6-opus": { modelId: "claude-opus-4-6" },
6699
+ "claude-4.6-sonnet": { modelId: "claude-sonnet-4-6" },
6700
+ "gemini-3.6-flash-minimal": {
6701
+ modelId: "gemini-3.6-flash",
6702
+ reasoningLevel: "low"
6703
+ },
6704
+ "gpt-5.1-codex-max": { modelId: "gpt-5.1" }
6705
+ };
6706
+ function bareCursorFamilyId(model) {
6707
+ const familyId = model === "auto" ? "default" : agentModelFamilyId(model);
6708
+ return familyId.startsWith("cursor-") ? familyId.slice("cursor-".length) : familyId;
6709
+ }
6710
+ function cursorParameterizedSelection(model, reasoningLevel) {
6711
+ const familyId = bareCursorFamilyId(model);
6712
+ const selection = CURSOR_LEGACY_FAMILY_SELECTIONS[familyId] ?? {
6713
+ modelId: familyId
6714
+ };
6715
+ return selection.reasoningLevel !== void 0 || reasoningLevel === void 0 ? selection : { ...selection, reasoningLevel };
6716
+ }
6717
+ function cursorCatalogModel(model) {
6718
+ const selection = cursorParameterizedSelection(
6719
+ model.id,
6720
+ model.defaultReasoningEffort
6721
+ );
6722
+ const efforts = /* @__PURE__ */ new Map();
6723
+ for (const effort of model.supportedReasoningEfforts) {
6724
+ const level = cursorParameterizedSelection(model.id, effort.reasoningEffort).reasoningLevel ?? effort.reasoningEffort;
6725
+ if (!efforts.has(level)) {
6726
+ efforts.set(level, { ...effort, reasoningEffort: level });
6727
+ }
6728
+ }
6729
+ return {
6730
+ model: {
6731
+ ...model,
6732
+ id: selection.modelId,
6733
+ model: selection.modelId,
6734
+ supportedReasoningEfforts: [...efforts.values()].sort(
6735
+ (a, b) => reasoningLevelValues.indexOf(a.reasoningEffort) - reasoningLevelValues.indexOf(b.reasoningEffort)
6736
+ ),
6737
+ defaultReasoningEffort: selection.reasoningLevel ?? model.defaultReasoningEffort
6738
+ },
6739
+ directFamily: bareCursorFamilyId(model.id) === selection.modelId
6740
+ };
6741
+ }
6742
+ function buildCursorParameterizedModelCatalog(models) {
6743
+ const normalized = /* @__PURE__ */ new Map();
6744
+ for (const model of models) {
6745
+ const candidate = cursorCatalogModel(model);
6746
+ const current = normalized.get(candidate.model.id);
6747
+ if (current === void 0) {
6748
+ normalized.set(candidate.model.id, candidate);
6749
+ continue;
6750
+ }
6751
+ const preferred = candidate.directFamily && !current.directFamily ? candidate : current;
6752
+ const efforts = new Map(
6753
+ preferred.model.supportedReasoningEfforts.map((effort) => [
6754
+ effort.reasoningEffort,
6755
+ effort
6756
+ ])
6757
+ );
6758
+ for (const effort of [
6759
+ ...current.model.supportedReasoningEfforts,
6760
+ ...candidate.model.supportedReasoningEfforts
6761
+ ]) {
6762
+ if (!efforts.has(effort.reasoningEffort)) {
6763
+ efforts.set(effort.reasoningEffort, effort);
6764
+ }
6765
+ }
6766
+ normalized.set(candidate.model.id, {
6767
+ model: {
6768
+ ...preferred.model,
6769
+ supportedReasoningEfforts: [...efforts.values()].sort(
6770
+ (a, b) => reasoningLevelValues.indexOf(a.reasoningEffort) - reasoningLevelValues.indexOf(b.reasoningEffort)
6771
+ ),
6772
+ isDefault: current.model.isDefault || candidate.model.isDefault
6773
+ },
6774
+ directFamily: preferred.directFamily
6775
+ });
6776
+ }
6777
+ return [...normalized.values()].map((entry) => entry.model);
6778
+ }
6779
+
6666
6780
  // ../provider-bridge-acp/src/session-params.ts
6667
6781
  function sanitizeAcpSkillDescription(description) {
6668
6782
  const sanitized = description.replace(/[\r\n]+/gu, " ").replace(/\s+/gu, " ").replace(/[<>]/gu, "").trim();
@@ -6751,26 +6865,6 @@ function buildAcpModelListParams(launchSpec, options) {
6751
6865
  ...launchSpec.nativeReasoning !== void 0 ? { nativeReasoning: launchSpec.nativeReasoning } : {}
6752
6866
  };
6753
6867
  }
6754
- var CURSOR_LEGACY_FAMILY_SELECTIONS = {
6755
- "claude-4-sonnet": { modelId: "claude-sonnet-4" },
6756
- "claude-4.5-opus": { modelId: "claude-opus-4-5" },
6757
- "claude-4.5-sonnet": { modelId: "claude-sonnet-4-5" },
6758
- "claude-4.6-opus": { modelId: "claude-opus-4-6" },
6759
- "claude-4.6-sonnet": { modelId: "claude-sonnet-4-6" },
6760
- "gemini-3.6-flash-minimal": {
6761
- modelId: "gemini-3.6-flash",
6762
- reasoningLevel: "low"
6763
- },
6764
- "gpt-5.1-codex-max": { modelId: "gpt-5.1" }
6765
- };
6766
- function cursorParameterizedSelection(model, reasoningLevel) {
6767
- const familyId = model === "auto" ? "default" : agentModelFamilyId(model);
6768
- const bareFamilyId = familyId.startsWith("cursor-") ? familyId.slice("cursor-".length) : familyId;
6769
- const selection = CURSOR_LEGACY_FAMILY_SELECTIONS[bareFamilyId] ?? {
6770
- modelId: bareFamilyId
6771
- };
6772
- return selection.reasoningLevel !== void 0 || reasoningLevel === void 0 ? selection : { ...selection, reasoningLevel };
6773
- }
6774
6868
  function buildAcpModelSelectionParam(launchSpec, options, parameterizedModelPicker, dialectId) {
6775
6869
  const model = options.model;
6776
6870
  const listCommand = buildAcpModelListCommand(launchSpec);
@@ -8636,6 +8730,7 @@ async function startAgentSession(request) {
8636
8730
  },
8637
8731
  pendingInstructions: params.instructions,
8638
8732
  activePromptKind: null,
8733
+ compactionAgentMessage: "",
8639
8734
  queuedInputs: [],
8640
8735
  promptRequestPending: false,
8641
8736
  cancelRequested: false,
@@ -8977,6 +9072,7 @@ function runTurn(session, firstInput) {
8977
9072
  }
8978
9073
  function startCompaction(session, pending) {
8979
9074
  session.activePromptKind = "compaction";
9075
+ session.compactionAgentMessage = "";
8980
9076
  emitForSession(session, ACP_COMPACTION_STARTED_METHOD, {
8981
9077
  threadId: session.bbThreadId
8982
9078
  });
@@ -8994,7 +9090,10 @@ function startCompaction(session, pending) {
8994
9090
  acceptTurnInput(session, pending);
8995
9091
  session.turnSettled = promptResult.then((result) => {
8996
9092
  finish(
8997
- result.stopReason === "end_turn" ? { status: "completed" } : result.stopReason === "cancelled" ? { status: "interrupted" } : {
9093
+ result.stopReason === "end_turn" ? compactionOutcomeForEndTurn(
9094
+ session.dialect,
9095
+ session.compactionAgentMessage
9096
+ ) : result.stopReason === "cancelled" ? { status: "interrupted" } : {
8998
9097
  status: "failed",
8999
9098
  error: `Agent stopped compaction: ${result.stopReason}`
9000
9099
  }
@@ -9080,6 +9179,14 @@ function handleAgentNotification(session, method, params) {
9080
9179
  if (parsed.data.sessionId !== session.providerThreadId) {
9081
9180
  return;
9082
9181
  }
9182
+ if (session.activePromptKind === "compaction") {
9183
+ const chunk = acpAgentMessageChunkUpdateSchema.safeParse(
9184
+ parsed.data.update
9185
+ );
9186
+ if (chunk.success) {
9187
+ session.compactionAgentMessage += extractAcpContentText(chunk.data.content) ?? "";
9188
+ }
9189
+ }
9083
9190
  emitForSession(session, ACP_UPDATE_METHOD, update);
9084
9191
  }
9085
9192
  function decodeAcpBridgeJsonRpcRequest(raw) {
@@ -9113,13 +9220,14 @@ function decodeAcpBridgeJsonRpcRequest(raw) {
9113
9220
  issues: command.error.issues.map((issue) => `${issue.path.join(".")}: ${issue.message}`).join("; ")
9114
9221
  };
9115
9222
  }
9116
- async function handleModelList(id, params) {
9223
+ async function handleModelList(id, params, dialectId) {
9117
9224
  const catalog = params.listCommand ? await loadAgentModelCatalog(params.listCommand) : null;
9118
9225
  if (catalog) {
9226
+ const catalogModels = params.parameterizedModelPicker && dialectId === "cursor" ? buildCursorParameterizedModelCatalog(catalog.models) : catalog.models;
9119
9227
  sendResult(
9120
9228
  id,
9121
9229
  splitPrimaryModels(
9122
- applyConfiguredReasoningToModels(catalog.models, {
9230
+ applyConfiguredReasoningToModels(catalogModels, {
9123
9231
  reasoningCli: params.reasoningCli,
9124
9232
  nativeReasoning: params.nativeReasoning
9125
9233
  }),
@@ -9221,7 +9329,8 @@ async function handleRequest2(request) {
9221
9329
  buildAcpModelListParams(
9222
9330
  decodeLaunchSpec(request.params.providerOptions),
9223
9331
  modelPicker
9224
- )
9332
+ ),
9333
+ decodeDialectId(request.params.providerOptions)
9225
9334
  );
9226
9335
  return;
9227
9336
  }
@@ -425,6 +425,7 @@ function collectPluginAppRegistrations(definition, onComposerCustomizationReject
425
425
  const collected = {
426
426
  homepageSections: [],
427
427
  settingsSections: [],
428
+ appOverlays: [],
428
429
  navPanels: [],
429
430
  threadPanelActions: [],
430
431
  newThreadPanelActions: [],
@@ -447,6 +448,7 @@ function collectPluginAppRegistrations(definition, onComposerCustomizationReject
447
448
  const seenIds = {
448
449
  homepageSection: /* @__PURE__ */ new Set(),
449
450
  settingsSection: /* @__PURE__ */ new Set(),
451
+ appOverlay: /* @__PURE__ */ new Set(),
450
452
  navPanel: /* @__PURE__ */ new Set(),
451
453
  threadPanelAction: /* @__PURE__ */ new Set(),
452
454
  newThreadPanelAction: /* @__PURE__ */ new Set(),
@@ -495,6 +497,15 @@ function collectPluginAppRegistrations(definition, onComposerCustomizationReject
495
497
  component: requireComponent(kind, registration.component)
496
498
  });
497
499
  },
500
+ experimental_appOverlay(registration) {
501
+ const kind = "slots.experimental_appOverlay";
502
+ const id = requireSlotId(kind, registration?.id);
503
+ requireUniqueId(kind, seenIds.appOverlay, id);
504
+ collected.appOverlays.push({
505
+ id,
506
+ component: requireComponent(kind, registration.component)
507
+ });
508
+ },
498
509
  navPanel(registration) {
499
510
  const kind = "slots.navPanel";
500
511
  const id = requireSlotId(kind, registration?.id);
@@ -289,7 +289,7 @@ var PLUGIN_HTTP_METHODS = /* @__PURE__ */ new Set([
289
289
  "HEAD",
290
290
  "OPTIONS"
291
291
  ]);
292
- var RPC_METHOD_PATTERN = /^[a-zA-Z0-9_-]+$/;
292
+ var RPC_METHOD_PATTERN = /^[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*$/;
293
293
  var BACKGROUND_NAME_PATTERN = /^[a-zA-Z0-9_-]+$/;
294
294
  var CLI_COMMAND_NAME_PATTERN = /^[a-z0-9-]+$/;
295
295
  var AGENT_TOOL_NAME_PATTERN = /^[a-zA-Z0-9_-]+$/;
@@ -312,6 +312,9 @@ var stringSettingSchemaSchema = z3.custom(
312
312
  var booleanSettingSchemaSchema = z3.custom(
313
313
  (value) => isStandardSchema(value)
314
314
  );
315
+ var numberSettingSchemaSchema = z3.custom(
316
+ (value) => isStandardSchema(value)
317
+ );
315
318
  var settingDescriptorSchema = z3.discriminatedUnion("type", [
316
319
  z3.object({
317
320
  type: z3.literal("string"),
@@ -333,6 +336,12 @@ var settingDescriptorSchema = z3.discriminatedUnion("type", [
333
336
  experimental_schema: booleanSettingSchemaSchema.optional(),
334
337
  default: z3.boolean().optional()
335
338
  }).strict(),
339
+ z3.object({
340
+ type: z3.literal("number"),
341
+ ...settingsBaseFields,
342
+ experimental_schema: numberSettingSchemaSchema.optional(),
343
+ default: z3.number().finite().optional()
344
+ }).strict(),
336
345
  z3.object({
337
346
  type: z3.literal("select"),
338
347
  ...settingsBaseFields,
@@ -429,6 +438,21 @@ function validateSettingsUpdate(descriptors, values) {
429
438
  }
430
439
  continue;
431
440
  }
441
+ if (descriptor.type === "number") {
442
+ if (typeof value !== "number" || !Number.isFinite(value)) {
443
+ errors.push(`setting "${key}" expects a finite number`);
444
+ continue;
445
+ }
446
+ const validationError2 = settingSchemaError(
447
+ key,
448
+ descriptor.experimental_schema,
449
+ value
450
+ );
451
+ if (validationError2 !== null) {
452
+ errors.push(validationError2);
453
+ }
454
+ continue;
455
+ }
432
456
  if (typeof value !== "string") {
433
457
  errors.push(`setting "${key}" expects a string`);
434
458
  continue;
@@ -1766,7 +1790,14 @@ function readSettingsValues(descriptors, stored) {
1766
1790
  const values = {};
1767
1791
  for (const [key, descriptor] of Object.entries(descriptors)) {
1768
1792
  let value = stored.get(key);
1769
- const expected = descriptor.type === "boolean" ? "boolean" : "string";
1793
+ if (descriptor.type === "number" && typeof value === "string") {
1794
+ const legacyNumber = Number(value.trim());
1795
+ value = value.trim().length > 0 && Number.isFinite(legacyNumber) ? legacyNumber : void 0;
1796
+ }
1797
+ if (descriptor.type === "number" && typeof value === "number" && !Number.isFinite(value)) {
1798
+ value = void 0;
1799
+ }
1800
+ const expected = descriptor.type === "boolean" ? "boolean" : descriptor.type === "number" ? "number" : "string";
1770
1801
  if (typeof value !== expected) value = void 0;
1771
1802
  if (descriptor.type === "select" && typeof value === "string" && !descriptor.options.includes(value)) {
1772
1803
  value = void 0;
@@ -2143,9 +2174,7 @@ function createFakePluginHostInternal(options, sharedState) {
2143
2174
  "ALTER TABLE _bb_migrations ADD COLUMN statement_hash TEXT"
2144
2175
  );
2145
2176
  }
2146
- const rows = database.prepare(
2147
- "SELECT id, statement_hash FROM _bb_migrations ORDER BY id"
2148
- ).all();
2177
+ const rows = database.prepare("SELECT id, statement_hash FROM _bb_migrations ORDER BY id").all();
2149
2178
  const applied = /* @__PURE__ */ new Map();
2150
2179
  for (const row of rows) applied.set(row.id, row.statement_hash);
2151
2180
  const statementHashes = statements.map(migrationStatementHash);
@@ -2190,7 +2219,7 @@ function createFakePluginHostInternal(options, sharedState) {
2190
2219
  const prev = readSettingsValues(settingsDescriptors, storedSettings);
2191
2220
  for (const [key, value] of Object.entries(values)) {
2192
2221
  if (value === null) storedSettings.delete(key);
2193
- else if (typeof value === "string" || typeof value === "boolean") {
2222
+ else if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
2194
2223
  storedSettings.set(key, value);
2195
2224
  } else {
2196
2225
  throw new Error(`setting "${key}" has an unsupported value`);
@@ -2302,7 +2331,7 @@ function createFakePluginHostInternal(options, sharedState) {
2302
2331
  for (const [name, contractValue] of contractEntries) {
2303
2332
  if (!RPC_METHOD_PATTERN.test(name)) {
2304
2333
  throw new Error(
2305
- `invalid rpc method name "${name}" \u2014 use letters, digits, "-" and "_"`
2334
+ `invalid rpc method name "${name}" \u2014 use dot-separated segments with letters, digits, "-" and "_"`
2306
2335
  );
2307
2336
  }
2308
2337
  const methodContract = readRpcMethodContract(name, contractValue);
@@ -2652,9 +2681,14 @@ function createFakePluginHostInternal(options, sharedState) {
2652
2681
  );
2653
2682
  }
2654
2683
  };
2684
+ const appUrl = options.appUrl ?? null;
2655
2685
  const loopbackBaseUrl = options.loopbackBaseUrl ?? "http://127.0.0.1:38886";
2656
2686
  const dataDir = options.dataDir ?? "/tmp/bb-fake-data-dir";
2657
2687
  const server = {
2688
+ get experimental_appUrl() {
2689
+ assertLive();
2690
+ return appUrl;
2691
+ },
2658
2692
  get loopbackBaseUrl() {
2659
2693
  assertLive();
2660
2694
  return loopbackBaseUrl;
@@ -2675,6 +2709,7 @@ function createFakePluginHostInternal(options, sharedState) {
2675
2709
  "thread.failed": [],
2676
2710
  "thread.archived": [],
2677
2711
  "thread.deleted": [],
2712
+ "interaction.pending": [],
2678
2713
  "message.queued": [],
2679
2714
  "message.dispatched": [],
2680
2715
  "turn.failed": []
@@ -3014,6 +3049,7 @@ function createFakePluginHostInternal(options, sharedState) {
3014
3049
  "thread.failed": threadEventHandlers["thread.failed"].length,
3015
3050
  "thread.archived": threadEventHandlers["thread.archived"].length,
3016
3051
  "thread.deleted": threadEventHandlers["thread.deleted"].length,
3052
+ "interaction.pending": threadEventHandlers["interaction.pending"].length,
3017
3053
  "message.queued": threadEventHandlers["message.queued"].length,
3018
3054
  "message.dispatched": threadEventHandlers["message.dispatched"].length,
3019
3055
  "turn.failed": threadEventHandlers["turn.failed"].length
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@get-bb/plugin-sdk",
3
- "version": "0.4.35",
3
+ "version": "0.4.40",
4
4
  "homepage": "https://github.com/get-bb/bb#readme",
5
5
  "bugs": {
6
6
  "url": "https://github.com/get-bb/bb/issues"