@get-bb/plugin-sdk 0.4.15 → 0.4.17

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
@@ -21,9 +21,9 @@ Any mounted plugin component can use
21
21
  same plugin's registered thread-panel actions; it returns false when the
22
22
  current surface has no thread side panel.
23
23
 
24
- Use `experimental_UrlLink` for a real anchor that applies BB's current
24
+ Use `UrlLink` for a real anchor that applies BB's current
25
25
  in-app/external-browser preference on ordinary HTTP(S) activation, or
26
- `useBbNavigate().experimental_openUrl(url)` for a button or menu. Internal app
26
+ `useBbNavigate().openUrl(url)` for a button or menu. Internal app
27
27
  routes, modifier clicks, explicit anchor targets, and unsupported schemes stay
28
28
  browser-owned. A `_blank` or named target preserves supplied `rel` tokens but
29
29
  adds `noopener noreferrer` unless `rel` explicitly contains `opener`, so a
@@ -44,7 +44,7 @@ the current host accepted the intent. Targets never infer an ambient workspace.
44
44
  The frontend harness records both methods and accepts `openFilePreview` and
45
45
  `openFileExternally` behavior options.
46
46
 
47
- A nav panel's `experimental_fixedTabs` entries must include the containing nav
47
+ A nav panel's `fixedTabs` entries must include the containing nav
48
48
  panel's `id` as `panelId`; each entry is also a stable reference to that
49
49
  plugin's own tab. Give a targeted tab an `experimental_target.validate` type guard, call
50
50
  `experimental_useAppPanel().openFixedTab({ surface: { kind:
@@ -0,0 +1,141 @@
1
+ // Portable type declarations for `@get-bb/plugin-sdk`. Unpublished BB
2
+ // workspace contracts are flattened; public subpaths may reuse the
3
+ // package root without requiring any other @bb/* package.
4
+ //
5
+ // Confused by the API, or need a symbol that isn't here? Clone the BB repo
6
+ // and read the real source: https://github.com/get-bb/bb
7
+
8
+ import { z } from 'zod';
9
+
10
+ interface JsonObject {
11
+ [key: string]: JsonValue;
12
+ }
13
+ type JsonValue = string | number | boolean | null | JsonValue[] | JsonObject;
14
+
15
+ /** Why a call did not produce a result; core's retry policy keys on it. */
16
+ declare const experimental_aiServiceErrorCodeSchema: z.ZodEnum<{
17
+ auth_required: "auth_required";
18
+ invalid_response: "invalid_response";
19
+ rate_limited: "rate_limited";
20
+ request_failed: "request_failed";
21
+ service_unavailable: "service_unavailable";
22
+ timeout: "timeout";
23
+ }>;
24
+ type ExperimentalAiServiceErrorCode = z.infer<typeof experimental_aiServiceErrorCodeSchema>;
25
+ declare const experimental_aiInferenceCompleteInputSchema: z.ZodObject<{
26
+ model: z.ZodString;
27
+ outputSchema: z.ZodType<JsonObject, unknown, z.core.$ZodTypeInternals<JsonObject, unknown>>;
28
+ prompt: z.ZodString;
29
+ reasoningEffort: z.ZodLiteral<"none">;
30
+ serviceId: z.ZodString;
31
+ timeoutMs: z.ZodNumber;
32
+ }, z.core.$strict>;
33
+ type ExperimentalAiInferenceCompleteInput = z.infer<typeof experimental_aiInferenceCompleteInputSchema>;
34
+ declare const experimental_aiInferenceCompleteOutputSchema: z.ZodUnion<readonly [z.ZodObject<{
35
+ model: z.ZodString;
36
+ ok: z.ZodLiteral<true>;
37
+ value: z.ZodType<JsonObject, unknown, z.core.$ZodTypeInternals<JsonObject, unknown>>;
38
+ }, z.core.$strict>, z.ZodObject<{
39
+ code: z.ZodEnum<{
40
+ auth_required: "auth_required";
41
+ invalid_response: "invalid_response";
42
+ rate_limited: "rate_limited";
43
+ request_failed: "request_failed";
44
+ service_unavailable: "service_unavailable";
45
+ timeout: "timeout";
46
+ }>;
47
+ message: z.ZodString;
48
+ ok: z.ZodLiteral<false>;
49
+ }, z.core.$strict>]>;
50
+ type ExperimentalAiInferenceCompleteOutput = z.infer<typeof experimental_aiInferenceCompleteOutputSchema>;
51
+ declare const experimental_aiVoiceTranscribeInputSchema: z.ZodObject<{
52
+ audioBase64: z.ZodString;
53
+ filename: z.ZodString;
54
+ mimeType: z.ZodString;
55
+ model: z.ZodString;
56
+ prompt: z.ZodNullable<z.ZodString>;
57
+ serviceId: z.ZodString;
58
+ timeoutMs: z.ZodNumber;
59
+ }, z.core.$strict>;
60
+ type ExperimentalAiVoiceTranscribeInput = z.infer<typeof experimental_aiVoiceTranscribeInputSchema>;
61
+ declare const experimental_aiVoiceTranscribeOutputSchema: z.ZodUnion<readonly [z.ZodObject<{
62
+ model: z.ZodString;
63
+ ok: z.ZodLiteral<true>;
64
+ text: z.ZodString;
65
+ }, z.core.$strict>, z.ZodObject<{
66
+ code: z.ZodEnum<{
67
+ auth_required: "auth_required";
68
+ invalid_response: "invalid_response";
69
+ rate_limited: "rate_limited";
70
+ request_failed: "request_failed";
71
+ service_unavailable: "service_unavailable";
72
+ timeout: "timeout";
73
+ }>;
74
+ message: z.ZodString;
75
+ ok: z.ZodLiteral<false>;
76
+ }, z.core.$strict>]>;
77
+ type ExperimentalAiVoiceTranscribeOutput = z.infer<typeof experimental_aiVoiceTranscribeOutputSchema>;
78
+ /**
79
+ * The host RPC methods an AI-service plugin implements. A plugin that
80
+ * registers only `inference` still builds against the full contract; the
81
+ * unregistered method may answer `{ ok: false, code: "request_failed" }`.
82
+ */
83
+ declare const experimental_aiServicesHostContract: {
84
+ readonly "ai.inference.complete": {
85
+ readonly input: z.ZodObject<{
86
+ model: z.ZodString;
87
+ outputSchema: z.ZodType<JsonObject, unknown, z.core.$ZodTypeInternals<JsonObject, unknown>>;
88
+ prompt: z.ZodString;
89
+ reasoningEffort: z.ZodLiteral<"none">;
90
+ serviceId: z.ZodString;
91
+ timeoutMs: z.ZodNumber;
92
+ }, z.core.$strict>;
93
+ readonly output: z.ZodUnion<readonly [z.ZodObject<{
94
+ model: z.ZodString;
95
+ ok: z.ZodLiteral<true>;
96
+ value: z.ZodType<JsonObject, unknown, z.core.$ZodTypeInternals<JsonObject, unknown>>;
97
+ }, z.core.$strict>, z.ZodObject<{
98
+ code: z.ZodEnum<{
99
+ auth_required: "auth_required";
100
+ invalid_response: "invalid_response";
101
+ rate_limited: "rate_limited";
102
+ request_failed: "request_failed";
103
+ service_unavailable: "service_unavailable";
104
+ timeout: "timeout";
105
+ }>;
106
+ message: z.ZodString;
107
+ ok: z.ZodLiteral<false>;
108
+ }, z.core.$strict>]>;
109
+ };
110
+ readonly "ai.voice.transcribe": {
111
+ readonly input: z.ZodObject<{
112
+ audioBase64: z.ZodString;
113
+ filename: z.ZodString;
114
+ mimeType: z.ZodString;
115
+ model: z.ZodString;
116
+ prompt: z.ZodNullable<z.ZodString>;
117
+ serviceId: z.ZodString;
118
+ timeoutMs: z.ZodNumber;
119
+ }, z.core.$strict>;
120
+ readonly output: z.ZodUnion<readonly [z.ZodObject<{
121
+ model: z.ZodString;
122
+ ok: z.ZodLiteral<true>;
123
+ text: z.ZodString;
124
+ }, z.core.$strict>, z.ZodObject<{
125
+ code: z.ZodEnum<{
126
+ auth_required: "auth_required";
127
+ invalid_response: "invalid_response";
128
+ rate_limited: "rate_limited";
129
+ request_failed: "request_failed";
130
+ service_unavailable: "service_unavailable";
131
+ timeout: "timeout";
132
+ }>;
133
+ message: z.ZodString;
134
+ ok: z.ZodLiteral<false>;
135
+ }, z.core.$strict>]>;
136
+ };
137
+ };
138
+ type ExperimentalAiServicesHostContract = typeof experimental_aiServicesHostContract;
139
+
140
+ export { experimental_aiInferenceCompleteInputSchema, experimental_aiInferenceCompleteOutputSchema, experimental_aiServiceErrorCodeSchema, experimental_aiServicesHostContract, experimental_aiVoiceTranscribeInputSchema, experimental_aiVoiceTranscribeOutputSchema };
141
+ export type { ExperimentalAiInferenceCompleteInput, ExperimentalAiInferenceCompleteOutput, ExperimentalAiServiceErrorCode, ExperimentalAiServicesHostContract, ExperimentalAiVoiceTranscribeInput, ExperimentalAiVoiceTranscribeOutput };
@@ -184,6 +184,10 @@ type PromptInput = z.infer<typeof promptInputSchema>;
184
184
  declare const providerInfoSchema: z.ZodObject<{
185
185
  available: z.ZodBoolean;
186
186
  capabilities: z.ZodObject<{
187
+ modelCatalogScope: z.ZodEnum<{
188
+ host: "host";
189
+ workspace: "workspace";
190
+ }>;
187
191
  permissionModes: z.ZodArray<z.ZodEnum<{
188
192
  "accept-edits": "accept-edits";
189
193
  auto: "auto";
@@ -221,16 +225,22 @@ declare const providerInfoSchema: z.ZodObject<{
221
225
  kind: z.ZodLiteral<"goal">;
222
226
  }, z.core.$strip>], "kind">>;
223
227
  displayName: z.ZodString;
224
- experimental_providerHealth: z.ZodBoolean;
225
- experimental_providerInstallation: z.ZodBoolean;
226
- experimental_providerUsage: z.ZodBoolean;
227
228
  extensionKinds: z.ZodOptional<z.ZodRecord<z.ZodString & z.ZodType<`${string}/${string}`, string, z.core.$ZodTypeInternals<`${string}/${string}`, string>>, z.ZodObject<{
228
229
  item: z.ZodBoolean;
229
230
  state: z.ZodBoolean;
230
231
  }, z.core.$strip>>>;
231
232
  family: z.ZodOptional<z.ZodString>;
233
+ icon: z.ZodOptional<z.ZodObject<{
234
+ glyph: z.ZodString;
235
+ }, z.core.$strip>>;
232
236
  id: z.ZodString;
233
237
  logoUrl: z.ZodNullable<z.ZodString>;
238
+ maintenance: z.ZodObject<{
239
+ health: z.ZodBoolean;
240
+ installation: z.ZodBoolean;
241
+ usage: z.ZodBoolean;
242
+ }, z.core.$strip>;
243
+ pluginId: z.ZodString;
234
244
  reasoningLevels: z.ZodOptional<z.ZodArray<z.ZodObject<{
235
245
  description: z.ZodOptional<z.ZodString>;
236
246
  id: z.ZodString;
@@ -417,7 +427,9 @@ interface PluginThreadListProps {
417
427
  *
418
428
  * @experimental Audit before relying on this as a stable contract.
419
429
  */
420
- experimental_Original: ComponentType;
430
+ Original: ComponentType;
431
+ /** @deprecated Renamed to `Original` in SDK 0.4.16; removed in bb 0.42. */
432
+ experimental_Original?: ComponentType;
421
433
  }
422
434
  /**
423
435
  * Props passed to an `experimental_threadHeaderAction` component, rendered in
@@ -468,7 +480,9 @@ interface PluginFileOpenerProps {
468
480
  *
469
481
  * @experimental Audit before relying on this as a stable contract.
470
482
  */
471
- experimental_Original: ComponentType;
483
+ Original: ComponentType;
484
+ /** @deprecated Renamed to `Original` in SDK 0.4.16; removed in bb 0.42. */
485
+ experimental_Original?: ComponentType;
472
486
  }
473
487
  /** How a code line longer than the viewport is presented. */
474
488
  type CodeOverflowMode = "scroll" | "wrap";
@@ -559,7 +573,9 @@ interface PluginSourceCodeRendererProps {
559
573
  *
560
574
  * @experimental Audit before relying on this as a stable contract.
561
575
  */
562
- experimental_Original: ComponentType;
576
+ Original: ComponentType;
577
+ /** @deprecated Renamed to `Original` in SDK 0.4.16; removed in bb 0.42. */
578
+ experimental_Original?: ComponentType;
563
579
  }
564
580
  /**
565
581
  * Props passed to an `experimental_diffRenderer` component. `patch` is always
@@ -586,7 +602,9 @@ interface PluginDiffRendererProps {
586
602
  *
587
603
  * @experimental Audit before relying on this as a stable contract.
588
604
  */
589
- experimental_Original: ComponentType;
605
+ Original: ComponentType;
606
+ /** @deprecated Renamed to `Original` in SDK 0.4.16; removed in bb 0.42. */
607
+ experimental_Original?: ComponentType;
590
608
  }
591
609
  /**
592
610
  * Message context passed to a `messageDirective` component — the assistant
@@ -660,7 +678,7 @@ type ExperimentalPluginFixedTabReference<Target extends JsonValue = never> = {
660
678
  readonly experimental_target: ExperimentalFixedTabTargetContract<Target>;
661
679
  });
662
680
  /** A fixed tab declared by a plugin nav panel. */
663
- type ExperimentalPluginFixedTabRegistration<Target extends JsonValue = never> = ExperimentalPluginFixedTabReference<Target> & {
681
+ type PluginFixedTabRegistration<Target extends JsonValue = never> = ExperimentalPluginFixedTabReference<Target> & {
664
682
  title: string;
665
683
  /** Icon hint (BB icon name); unknown names fall back to a generic icon. */
666
684
  icon: string;
@@ -669,7 +687,7 @@ type ExperimentalPluginFixedTabRegistration<Target extends JsonValue = never> =
669
687
  layout?: "flush" | "padded";
670
688
  };
671
689
  /** A fixed tab with either no target or an owner-validated JSON target. */
672
- type ExperimentalPluginFixedTabDeclaration = ExperimentalPluginFixedTabRegistration | ExperimentalPluginFixedTabRegistration<JsonValue>;
690
+ type PluginFixedTabDeclaration = PluginFixedTabRegistration | PluginFixedTabRegistration<JsonValue>;
673
691
  interface PluginNavPanelRegistration {
674
692
  /** Unique within the plugin; letters, digits, `-`, `_`. */
675
693
  id: string;
@@ -689,7 +707,7 @@ interface PluginNavPanelRegistration {
689
707
  *
690
708
  * Experimental: see docs/api_to_audit.md.
691
709
  */
692
- experimental_fixedTabs?: readonly ExperimentalPluginFixedTabDeclaration[];
710
+ fixedTabs?: readonly PluginFixedTabDeclaration[];
693
711
  /**
694
712
  * Optional presentational component rendered at the trailing edge of this
695
713
  * panel's sidebar row. It receives no props so it can own a narrow live
@@ -811,7 +829,17 @@ interface PluginNewThreadPanelActionRegistration {
811
829
  run?(context: PluginNewThreadPanelActionContext): void | Promise<void>;
812
830
  }
813
831
  interface PluginPendingInteractionRegistration {
814
- /** Matches `rendererId` passed to `bb.ui.requestInput`. */
832
+ /**
833
+ * The renderer's plugin-local name. Two addresses resolve to it: the
834
+ * `rendererId` a backend passes to `bb.ui.requestInput`, and the `<name>`
835
+ * half of a provider bridge's `interaction/request` kind
836
+ * `"<pluginId>/<name>"` (docs/provider-plugin-api.md §4), which the client
837
+ * splits on the slash to find this registration under its plugin.
838
+ * `bb.ui.requestInput` validates `rendererId` against `/^[a-zA-Z0-9_-]+$/`;
839
+ * an extension kind must match `/^[a-z0-9-]+\/[a-z0-9-]+$/`
840
+ * (`EXTENSION_KIND_PATTERN` in @bb/domain), so an id addressable both ways
841
+ * uses lowercase letters, digits, and "-" only.
842
+ */
815
843
  id: string;
816
844
  component: ComponentType<PluginPendingInteractionProps>;
817
845
  }
@@ -1083,7 +1111,7 @@ interface PluginSidebarThreadSplit {
1083
1111
  * enabled. If multiple plugins register one, the first in deterministic slot
1084
1112
  * order is active by default; removing it reveals the next. The user can pin
1085
1113
  * BB's list or a specific provider under Settings → Appearance. A plugin can
1086
- * also use its own setting and render `experimental_Original` conditionally.
1114
+ * also use its own setting and render `Original` conditionally.
1087
1115
  * An absent or crashing replacement falls back to BB's list rather than
1088
1116
  * leaving the user with no sidebar.
1089
1117
  *
@@ -1107,7 +1135,7 @@ interface PluginThreadListRegistration {
1107
1135
  * order. The user can pin BB's preview or a specific opener per extension
1108
1136
  * under Settings → Files. The file tab's "Open with" menu can override that
1109
1137
  * choice for one open. A plugin can also use its own setting and render
1110
- * `experimental_Original` conditionally. Applies to working-tree, host, and
1138
+ * `Original` conditionally. Applies to working-tree, host, and
1111
1139
  * thread-storage files — never to git-ref snapshots (diff views always use
1112
1140
  * BB's preview).
1113
1141
  */
@@ -1127,7 +1155,7 @@ interface PluginFileOpenerRegistration {
1127
1155
  * **exclusive**: one renderer at a time. Registering activates it while the
1128
1156
  * plugin is enabled; if several are registered the first in deterministic slot
1129
1157
  * order wins. A missing, disabled, or crashing replacement falls back to BB's
1130
- * renderer, and a replacement can render `experimental_Original` to delegate
1158
+ * renderer, and a replacement can render `Original` to delegate
1131
1159
  * per call (behind its own setting, by language, by size — whatever it needs).
1132
1160
  */
1133
1161
  interface PluginSourceCodeRendererRegistration {
@@ -1143,7 +1171,7 @@ interface PluginSourceCodeRendererRegistration {
1143
1171
  * Replace BB's diff renderer everywhere it renders supplied diff content — the
1144
1172
  * timeline file diffs, the environment diff panel's text bodies, and every
1145
1173
  * plugin that calls `experimental_Diff`. Exclusive, with the same activation,
1146
- * fallback, and `experimental_Original` delegation rules as
1174
+ * fallback, and `Original` delegation rules as
1147
1175
  * {@link PluginSourceCodeRendererRegistration}.
1148
1176
  */
1149
1177
  interface PluginDiffRendererRegistration {
@@ -1297,6 +1325,94 @@ interface PluginProviderIconRegistration {
1297
1325
  className?: string;
1298
1326
  }>;
1299
1327
  }
1328
+ /**
1329
+ * The declarative presentation persisted with a timeline item (docs/
1330
+ * provider-plugin-api.md §3): what every client renders when no plugin code
1331
+ * is present. A renderer receives it so it can reuse the bridge's label,
1332
+ * glyph and tint instead of re-deriving them from the payload.
1333
+ */
1334
+ interface PluginTimelineRowPresentation {
1335
+ label: {
1336
+ pending: string;
1337
+ completed: string;
1338
+ };
1339
+ icon: {
1340
+ glyph: string;
1341
+ };
1342
+ title?: string;
1343
+ /** Short Markdown, length-capped at ingest. */
1344
+ detail?: string;
1345
+ suppress?: boolean;
1346
+ tint?: {
1347
+ light: string;
1348
+ dark: string;
1349
+ };
1350
+ }
1351
+ type PluginTimelineRowStatus = "completed" | "error" | "interrupted" | "pending";
1352
+ /** The projected row a `experimental_timelineRenderer` component receives. */
1353
+ interface PluginTimelineRendererRow {
1354
+ id: string;
1355
+ threadId: string;
1356
+ turnId: string | null;
1357
+ /**
1358
+ * The item kind the renderer registered for: this plugin's extension kind
1359
+ * (`"<pluginId>/<name>"`) or `"tool"` for a generic tool item.
1360
+ */
1361
+ kind: string;
1362
+ /** The tool name for a `"tool"` row; null for an extension row. */
1363
+ toolName: string | null;
1364
+ status: PluginTimelineRowStatus;
1365
+ startedAt: number;
1366
+ completedAt: number | null;
1367
+ }
1368
+ interface PluginTimelineRendererProps {
1369
+ row: PluginTimelineRendererRow;
1370
+ /**
1371
+ * The item's data: an extension item's payload (validated against the
1372
+ * plugin's declared schema at ingest), or for a `"tool"` row the call's
1373
+ * `{ arguments, output }`.
1374
+ */
1375
+ payload: JsonValue;
1376
+ /**
1377
+ * The bridge's presentation for the row. Null only for a generic tool row
1378
+ * persisted before bridges attached presentation (grammar v2); an
1379
+ * extension row always has one.
1380
+ */
1381
+ presentation: PluginTimelineRowPresentation | null;
1382
+ /** The thread the row belongs to. */
1383
+ thread: {
1384
+ id: string;
1385
+ providerId: string | null;
1386
+ };
1387
+ /**
1388
+ * The host's declarative base for this row's body (the presentation's
1389
+ * `detail`, or the tool call's arguments and output). Render it to keep
1390
+ * the default body beside the plugin's own content.
1391
+ */
1392
+ Original: ComponentType<Record<never, never>>;
1393
+ }
1394
+ /**
1395
+ * Render the expanded body of the timeline rows this plugin owns: its own
1396
+ * extension item kinds (`"<pluginId>/<name>"`, where `<pluginId>` is this
1397
+ * plugin), and `"tool"` for the generic tool items of the providers this
1398
+ * plugin registered. Core kinds (message, command, fileChange, fileRead,
1399
+ * search, delegation, planSteps, …) always use the core renderers and are
1400
+ * customized through the bridge's presentation alone.
1401
+ *
1402
+ * The row's header — the bridge's label, glyph, tint and headline — stays
1403
+ * host-rendered so the timeline reads uniformly; the component owns the
1404
+ * body. When no renderer is registered for a kind (the plugin is not loaded,
1405
+ * uninstalled, or never shipped an app bundle) the declarative base renders
1406
+ * instead, so a row never goes blank. Crashes are contained per row.
1407
+ */
1408
+ interface PluginTimelineRendererRegistration {
1409
+ /**
1410
+ * `"<pluginId>/<name>"` for one of this plugin's extension kinds, or
1411
+ * `"tool"` for the generic tool items of this plugin's providers.
1412
+ */
1413
+ kind: string;
1414
+ component: ComponentType<PluginTimelineRendererProps>;
1415
+ }
1300
1416
  interface PluginAppSlots {
1301
1417
  homepageSection(registration: PluginHomepageSectionRegistration): void;
1302
1418
  settingsSection(registration: PluginSettingsSectionRegistration): void;
@@ -1353,6 +1469,13 @@ interface PluginAppSlots {
1353
1469
  * docs/api_to_audit.md.
1354
1470
  */
1355
1471
  experimental_providerIcon(registration: PluginProviderIconRegistration): void;
1472
+ /**
1473
+ * Render the body of this plugin's own timeline rows: its extension kinds
1474
+ * and its providers' generic tool items (see
1475
+ * {@link PluginTimelineRendererRegistration}). Experimental: see
1476
+ * docs/api_to_audit.md.
1477
+ */
1478
+ experimental_timelineRenderer(registration: PluginTimelineRendererRegistration): void;
1356
1479
  }
1357
1480
  interface PluginAppComposer {
1358
1481
  customize(registration: ComposerCustomization): void;
@@ -1881,7 +2004,7 @@ interface MarkdownProps {
1881
2004
  * supplied `rel` tokens and receive safe defaults unless `opener` is explicit.
1882
2005
  * Experimental: see docs/api_to_audit.md.
1883
2006
  */
1884
- interface ExperimentalUrlLinkProps extends Omit<ComponentPropsWithoutRef<"a">, "href"> {
2007
+ interface UrlLinkProps extends Omit<ComponentPropsWithoutRef<"a">, "href"> {
1885
2008
  href: string;
1886
2009
  }
1887
2010
  /** A live file whose identity is complete without ambient route context. */
@@ -1985,7 +2108,7 @@ interface BbNavigate {
1985
2108
  * false for schemes the host does not own. Experimental: see
1986
2109
  * docs/api_to_audit.md.
1987
2110
  */
1988
- experimental_openUrl(url: string): boolean;
2111
+ openUrl(url: string): boolean;
1989
2112
  /** Open a live file in this surface's shared BB preview panel. */
1990
2113
  experimental_openFilePreview(options: ExperimentalFileOpenOptions): boolean;
1991
2114
  /** Open a live file in this client's preferred external file target. */
@@ -2075,7 +2198,7 @@ interface PluginSdkApp {
2075
2198
  * A real anchor whose ordinary HTTP(S) activation uses BB's URL preference.
2076
2199
  * Experimental: see docs/api_to_audit.md.
2077
2200
  */
2078
- experimental_UrlLink: ComponentType<ExperimentalUrlLinkProps>;
2201
+ UrlLink: ComponentType<UrlLinkProps>;
2079
2202
  /** Host-rendered live-file link backed by the shared navigation controller. */
2080
2203
  experimental_FileLink: ComponentType<ExperimentalFileLinkProps>;
2081
2204
  /**
@@ -2120,7 +2243,7 @@ declare const definePluginApp: (setup: PluginAppSetup) => PluginAppDefinition;
2120
2243
  declare const ThreadChat: react.ComponentType<ThreadChatProps>;
2121
2244
  declare const Markdown: react.ComponentType<MarkdownProps>;
2122
2245
  declare const experimental_FileLink: react.ComponentType<ExperimentalFileLinkProps>;
2123
- declare const experimental_UrlLink: react.ComponentType<ExperimentalUrlLinkProps>;
2246
+ declare const UrlLink: react.ComponentType<UrlLinkProps>;
2124
2247
  declare const experimental_NewThreadComposer: react.ComponentType<NewThreadComposerProps>;
2125
2248
  declare const experimental_ProviderModelPicker: react.ComponentType<ExperimentalProviderModelPickerProps>;
2126
2249
  declare const experimental_PermissionModePicker: react.ComponentType<ExperimentalPermissionModePickerProps>;
@@ -2142,5 +2265,5 @@ declare const experimental_useSidebarThreadPullRequest: (threadId: string) => Pl
2142
2265
  declare const experimental_useSidebarThreadSplit: (threadId: string) => PluginSidebarThreadSplit;
2143
2266
  declare const experimental_useProviders: () => PluginProvidersState;
2144
2267
 
2145
- export { Markdown, ThreadChat, definePluginApp, experimental_Diff, experimental_FileLink, experimental_NewThreadComposer, experimental_PermissionModePicker, experimental_ProviderModelPicker, experimental_SourceCode, experimental_UrlLink, experimental_useAppPanel, experimental_useFixedTabTarget, experimental_useProviders, experimental_useSidebarThreadActions, experimental_useSidebarThreadPullRequest, experimental_useSidebarThreadSplit, experimental_useSidebarThreads, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings };
2146
- export type { BbContext, BbNavigate, CodeOverflowMode, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, DiffProps, DiffViewMode, ExperimentalAppPanel, ExperimentalAppPanelSurface, ExperimentalDiffFileContent, ExperimentalDiffFullFileContents, ExperimentalFileLinkProps, ExperimentalFileLocation, ExperimentalFileOpenOptions, ExperimentalFixedTabTargetContract, ExperimentalFixedTabTargetState, ExperimentalLiveFileTarget, ExperimentalOpenFixedTabOptions, ExperimentalPermissionModePickerProps, ExperimentalPluginFixedTabDeclaration, ExperimentalPluginFixedTabReference, ExperimentalPluginFixedTabRegistration, ExperimentalProviderModelPickerProps, ExperimentalProviderModelPickerRouting, ExperimentalProviderModelPickerValue, ExperimentalUrlLinkProps, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginCommandPaletteActionContext, PluginCommandPaletteActionRegistration, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginDiffRendererProps, PluginDiffRendererRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, 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, SourceCodeLineRange, SourceCodeProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };
2268
+ export { Markdown, ThreadChat, UrlLink, definePluginApp, experimental_Diff, experimental_FileLink, experimental_NewThreadComposer, experimental_PermissionModePicker, experimental_ProviderModelPicker, experimental_SourceCode, experimental_useAppPanel, experimental_useFixedTabTarget, experimental_useProviders, experimental_useSidebarThreadActions, experimental_useSidebarThreadPullRequest, experimental_useSidebarThreadSplit, experimental_useSidebarThreads, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings };
2269
+ export type { BbContext, BbNavigate, CodeOverflowMode, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, DiffProps, DiffViewMode, ExperimentalAppPanel, ExperimentalAppPanelSurface, ExperimentalDiffFileContent, ExperimentalDiffFullFileContents, ExperimentalFileLinkProps, ExperimentalFileLocation, ExperimentalFileOpenOptions, ExperimentalFixedTabTargetContract, ExperimentalFixedTabTargetState, ExperimentalLiveFileTarget, ExperimentalOpenFixedTabOptions, ExperimentalPermissionModePickerProps, ExperimentalPluginFixedTabReference, ExperimentalProviderModelPickerProps, ExperimentalProviderModelPickerRouting, ExperimentalProviderModelPickerValue, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, 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 };