@get-bb/plugin-sdk 0.5.31 → 0.6.5
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 +8 -4
- package/bundled-types/bb-plugin-sdk-app.d.ts +261 -102
- package/bundled-types/bb-plugin-sdk-internal-composer-handle.d.ts +457 -0
- package/bundled-types/bb-plugin-sdk-internal-host-policy.d.ts +21 -4
- package/bundled-types/bb-plugin-sdk-testing-app.d.ts +32 -10
- package/bundled-types/bb-plugin-sdk-testing.d.ts +8 -3
- package/bundled-types/bb-plugin-sdk.d.ts +295 -109
- package/dist/app.js +2 -0
- package/dist/internal/composer-customization-validation.js +37 -27
- package/dist/internal/composer-handle.js +531 -0
- package/dist/internal/plugin-app-collector.js +37 -27
- package/dist/testing/app.js +780 -132
- package/dist/testing/index.js +6 -2
- package/package.json +7 -1
|
@@ -234,6 +234,11 @@ declare const appKeybindingOverridesSchema: z$1.ZodArray<z$1.ZodObject<{
|
|
|
234
234
|
"window.new": "window.new";
|
|
235
235
|
"workspace.openPreferred": "workspace.openPreferred";
|
|
236
236
|
}>, z$1.ZodTemplateLiteral<`plugin:${string}/${string}`>]>;
|
|
237
|
+
platform: z$1.ZodOptional<z$1.ZodEnum<{
|
|
238
|
+
linux: "linux";
|
|
239
|
+
mac: "mac";
|
|
240
|
+
windows: "windows";
|
|
241
|
+
}>>;
|
|
237
242
|
shortcut: z$1.ZodNullable<z$1.ZodObject<{
|
|
238
243
|
alt: z$1.ZodBoolean;
|
|
239
244
|
control: z$1.ZodBoolean;
|
|
@@ -483,6 +488,7 @@ declare const environmentSchema: z$1.ZodObject<{
|
|
|
483
488
|
type Environment = z$1.infer<typeof environmentSchema>;
|
|
484
489
|
|
|
485
490
|
declare const experimentsSchema: z$1.ZodRecord<z$1.ZodEnum<{
|
|
491
|
+
androidTesting: "androidTesting";
|
|
486
492
|
changelogPreview: "changelogPreview";
|
|
487
493
|
legacyJitiPluginLoader: "legacyJitiPluginLoader";
|
|
488
494
|
mobileApp: "mobileApp";
|
|
@@ -10183,6 +10189,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
|
|
|
10183
10189
|
all: z$1.ZodArray<z$1.ZodEnum<{
|
|
10184
10190
|
browserFocus: "browserFocus";
|
|
10185
10191
|
editableFocus: "editableFocus";
|
|
10192
|
+
linuxPlatform: "linuxPlatform";
|
|
10186
10193
|
macPlatform: "macPlatform";
|
|
10187
10194
|
mainSurface: "mainSurface";
|
|
10188
10195
|
modalOpen: "modalOpen";
|
|
@@ -10192,10 +10199,12 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
|
|
|
10192
10199
|
splitActive: "splitActive";
|
|
10193
10200
|
terminalFocus: "terminalFocus";
|
|
10194
10201
|
webSurface: "webSurface";
|
|
10202
|
+
windowsPlatform: "windowsPlatform";
|
|
10195
10203
|
}>>;
|
|
10196
10204
|
none: z$1.ZodArray<z$1.ZodEnum<{
|
|
10197
10205
|
browserFocus: "browserFocus";
|
|
10198
10206
|
editableFocus: "editableFocus";
|
|
10207
|
+
linuxPlatform: "linuxPlatform";
|
|
10199
10208
|
macPlatform: "macPlatform";
|
|
10200
10209
|
mainSurface: "mainSurface";
|
|
10201
10210
|
modalOpen: "modalOpen";
|
|
@@ -10205,10 +10214,12 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
|
|
|
10205
10214
|
splitActive: "splitActive";
|
|
10206
10215
|
terminalFocus: "terminalFocus";
|
|
10207
10216
|
webSurface: "webSurface";
|
|
10217
|
+
windowsPlatform: "windowsPlatform";
|
|
10208
10218
|
}>>;
|
|
10209
10219
|
}, z$1.core.$strict>;
|
|
10210
10220
|
}, z$1.core.$strict>>;
|
|
10211
10221
|
experiments: z$1.ZodRecord<z$1.ZodEnum<{
|
|
10222
|
+
androidTesting: "androidTesting";
|
|
10212
10223
|
changelogPreview: "changelogPreview";
|
|
10213
10224
|
legacyJitiPluginLoader: "legacyJitiPluginLoader";
|
|
10214
10225
|
mobileApp: "mobileApp";
|
|
@@ -10317,6 +10328,11 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
|
|
|
10317
10328
|
"window.new": "window.new";
|
|
10318
10329
|
"workspace.openPreferred": "workspace.openPreferred";
|
|
10319
10330
|
}>, z$1.ZodTemplateLiteral<`plugin:${string}/${string}`>]>;
|
|
10331
|
+
platform: z$1.ZodOptional<z$1.ZodEnum<{
|
|
10332
|
+
linux: "linux";
|
|
10333
|
+
mac: "mac";
|
|
10334
|
+
windows: "windows";
|
|
10335
|
+
}>>;
|
|
10320
10336
|
shortcut: z$1.ZodNullable<z$1.ZodObject<{
|
|
10321
10337
|
alt: z$1.ZodBoolean;
|
|
10322
10338
|
control: z$1.ZodBoolean;
|
|
@@ -10417,6 +10433,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
|
|
|
10417
10433
|
all: z$1.ZodArray<z$1.ZodEnum<{
|
|
10418
10434
|
browserFocus: "browserFocus";
|
|
10419
10435
|
editableFocus: "editableFocus";
|
|
10436
|
+
linuxPlatform: "linuxPlatform";
|
|
10420
10437
|
macPlatform: "macPlatform";
|
|
10421
10438
|
mainSurface: "mainSurface";
|
|
10422
10439
|
modalOpen: "modalOpen";
|
|
@@ -10426,10 +10443,12 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
|
|
|
10426
10443
|
splitActive: "splitActive";
|
|
10427
10444
|
terminalFocus: "terminalFocus";
|
|
10428
10445
|
webSurface: "webSurface";
|
|
10446
|
+
windowsPlatform: "windowsPlatform";
|
|
10429
10447
|
}>>;
|
|
10430
10448
|
none: z$1.ZodArray<z$1.ZodEnum<{
|
|
10431
10449
|
browserFocus: "browserFocus";
|
|
10432
10450
|
editableFocus: "editableFocus";
|
|
10451
|
+
linuxPlatform: "linuxPlatform";
|
|
10433
10452
|
macPlatform: "macPlatform";
|
|
10434
10453
|
mainSurface: "mainSurface";
|
|
10435
10454
|
modalOpen: "modalOpen";
|
|
@@ -10439,6 +10458,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{
|
|
|
10439
10458
|
splitActive: "splitActive";
|
|
10440
10459
|
terminalFocus: "terminalFocus";
|
|
10441
10460
|
webSurface: "webSurface";
|
|
10461
|
+
windowsPlatform: "windowsPlatform";
|
|
10442
10462
|
}>>;
|
|
10443
10463
|
}, z$1.core.$strict>;
|
|
10444
10464
|
}, z$1.core.$strict>>;
|
|
@@ -10706,6 +10726,27 @@ declare const systemMachineProviderSchema: z$1.ZodObject<{
|
|
|
10706
10726
|
supportsSuspend: z$1.ZodBoolean;
|
|
10707
10727
|
}, z$1.core.$strip>;
|
|
10708
10728
|
type SystemMachineProvider = z$1.infer<typeof systemMachineProviderSchema>;
|
|
10729
|
+
declare const androidAppArtifactSchema: z$1.ZodObject<{
|
|
10730
|
+
sha256: z$1.ZodString;
|
|
10731
|
+
size: z$1.ZodNumber;
|
|
10732
|
+
version: z$1.ZodString;
|
|
10733
|
+
versionCode: z$1.ZodNumber;
|
|
10734
|
+
}, z$1.core.$strip>;
|
|
10735
|
+
type AndroidAppArtifact = z$1.infer<typeof androidAppArtifactSchema>;
|
|
10736
|
+
type SystemAndroidAppResponse = AndroidAppArtifact | null;
|
|
10737
|
+
declare const androidAppPrepareRequestSchema: z$1.ZodObject<{
|
|
10738
|
+
source: z$1.ZodEnum<{
|
|
10739
|
+
github: "github";
|
|
10740
|
+
local: "local";
|
|
10741
|
+
}>;
|
|
10742
|
+
}, z$1.core.$strip>;
|
|
10743
|
+
type AndroidAppPrepareRequest = z$1.infer<typeof androidAppPrepareRequestSchema>;
|
|
10744
|
+
interface AndroidAppPreparation {
|
|
10745
|
+
status: "failed" | "idle" | "preparing" | "ready";
|
|
10746
|
+
source: "github" | "local" | null;
|
|
10747
|
+
message: string;
|
|
10748
|
+
artifact: AndroidAppArtifact | null;
|
|
10749
|
+
}
|
|
10709
10750
|
|
|
10710
10751
|
interface UiPreferencesResponse {
|
|
10711
10752
|
preferences: UiPreferenceEntries;
|
|
@@ -12188,6 +12229,7 @@ declare const createThreadRequestSchema: z$1.ZodObject<{
|
|
|
12188
12229
|
auto: "auto";
|
|
12189
12230
|
full: "full";
|
|
12190
12231
|
}>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>;
|
|
12232
|
+
pinned: z$1.ZodOptional<z$1.ZodBoolean>;
|
|
12191
12233
|
pluginMetadata: z$1.ZodOptional<z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>>;
|
|
12192
12234
|
pluginSubmission: z$1.ZodOptional<z$1.ZodObject<{
|
|
12193
12235
|
data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;
|
|
@@ -15512,6 +15554,9 @@ interface EnvironmentListProvidersArgs {
|
|
|
15512
15554
|
}
|
|
15513
15555
|
type EnvironmentListProvidersResult = SystemEnvironmentProvider[];
|
|
15514
15556
|
interface EnvironmentsArea {
|
|
15557
|
+
experimental_cleanup(args: EnvironmentActionArgs): Promise<{
|
|
15558
|
+
ok: true;
|
|
15559
|
+
}>;
|
|
15515
15560
|
archiveThreads(args: EnvironmentActionArgs): Promise<EnvironmentArchiveThreadsResult>;
|
|
15516
15561
|
commit(args: EnvironmentCommitArgs): Promise<EnvironmentCommitResult>;
|
|
15517
15562
|
diff(args: EnvironmentDiffArgs): Promise<EnvironmentDiffResult>;
|
|
@@ -15672,6 +15717,7 @@ type HostDeleteResult = {
|
|
|
15672
15717
|
type HostDirectoryResult = HostDirectoryListing;
|
|
15673
15718
|
type HostGetResult = Host & {
|
|
15674
15719
|
connectMachineId: string | null;
|
|
15720
|
+
threadStorageRootPath: string | null;
|
|
15675
15721
|
};
|
|
15676
15722
|
type HostEnrollmentCommandResult = HostEnrollmentCommandResponse;
|
|
15677
15723
|
type HostReconnectResult = HostReconnectResponse;
|
|
@@ -16342,6 +16388,9 @@ interface SystemArea {
|
|
|
16342
16388
|
testAiService(args: SystemTestAiServiceArgs): Promise<SystemTestAiServiceResult>;
|
|
16343
16389
|
transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise<SystemVoiceTranscriptionResult>;
|
|
16344
16390
|
uiPreferences: SystemUiPreferencesArea;
|
|
16391
|
+
androidAppPreparation(): Promise<AndroidAppPreparation>;
|
|
16392
|
+
prepareAndroidApp(input: AndroidAppPrepareRequest): Promise<AndroidAppPreparation>;
|
|
16393
|
+
androidApp(): Promise<SystemAndroidAppResponse>;
|
|
16345
16394
|
updateExperiments(args: Experiments): Promise<SystemUpdateExperimentsResult>;
|
|
16346
16395
|
updateGeneralSettings(args: AppSettingsUpdate): Promise<SystemUpdateGeneralSettingsResult>;
|
|
16347
16396
|
updateKeyboardSettings(args: AppKeybindingOverrides): Promise<SystemUpdateKeyboardSettingsResult>;
|
|
@@ -16997,9 +17046,33 @@ interface PluginRpcMethodContract<InputSchema extends StandardSchemaV1 = Standar
|
|
|
16997
17046
|
type PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract>>;
|
|
16998
17047
|
/** Define a shared RPC contract while preserving exact method/schema types. */
|
|
16999
17048
|
declare function defineRpcContract<const Contract extends PluginRpcContract>(contract: Contract): Contract;
|
|
17049
|
+
/**
|
|
17050
|
+
* Who invoked an rpc method. `plugin` means another loaded plugin (or this
|
|
17051
|
+
* one) called through its own `bb.sdk.plugins.callRpc`; the host verifies
|
|
17052
|
+
* that with a per-load token only the server knows. Every other caller — the
|
|
17053
|
+
* app, the `bb` CLI, agents, and bb itself — is `client`.
|
|
17054
|
+
*/
|
|
17055
|
+
type ExperimentalPluginRpcCaller = {
|
|
17056
|
+
readonly kind: "plugin";
|
|
17057
|
+
readonly pluginId: string;
|
|
17058
|
+
} | {
|
|
17059
|
+
readonly kind: "client";
|
|
17060
|
+
};
|
|
17061
|
+
/** Second argument of every rpc handler. */
|
|
17062
|
+
interface ExperimentalPluginRpcHandlerContext {
|
|
17063
|
+
readonly experimental_caller: ExperimentalPluginRpcCaller;
|
|
17064
|
+
}
|
|
17000
17065
|
type PluginRpcHandlers<Contract extends PluginRpcContract> = {
|
|
17001
17066
|
[Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method]["input"]>) => StandardSchemaV1InferInput<Contract[Method]["output"]> | Promise<StandardSchemaV1InferInput<Contract[Method]["output"]>>;
|
|
17002
17067
|
};
|
|
17068
|
+
/**
|
|
17069
|
+
* Handlers as `bb.rpc.register` calls them: the validated input, then the
|
|
17070
|
+
* call's context. A `PluginRpcHandlers` map is assignable to this type, so
|
|
17071
|
+
* handlers that ignore the context keep their one-argument signature.
|
|
17072
|
+
*/
|
|
17073
|
+
type ExperimentalPluginRpcHandlersWithContext<Contract extends PluginRpcContract> = {
|
|
17074
|
+
[Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method]["input"]>, context: ExperimentalPluginRpcHandlerContext) => StandardSchemaV1InferInput<Contract[Method]["output"]> | Promise<StandardSchemaV1InferInput<Contract[Method]["output"]>>;
|
|
17075
|
+
};
|
|
17003
17076
|
type PluginRpcCallInput<Method extends PluginRpcMethodContract> = StandardSchemaV1InferInput<Method["input"]>;
|
|
17004
17077
|
type PluginRpcCallArgs<Method extends PluginRpcMethodContract> = null extends PluginRpcCallInput<Method> ? [input?: PluginRpcCallInput<Method>] : [input: PluginRpcCallInput<Method>];
|
|
17005
17078
|
type PluginRpcResult<Method extends PluginRpcMethodContract> = StandardSchemaV1InferOutput<Method["output"]>;
|
|
@@ -17140,7 +17213,7 @@ type ExperimentalSidebarNavigationAction = {
|
|
|
17140
17213
|
/**
|
|
17141
17214
|
* Semantic icon identity for one sidebar navigation item. Render it with
|
|
17142
17215
|
* {@link PluginSdkApp.experimental_SidebarNavigationIcon} to match bb's
|
|
17143
|
-
* artwork, including plugin branding.
|
|
17216
|
+
* artwork, including panel icons with plugin branding as their fallback.
|
|
17144
17217
|
*/
|
|
17145
17218
|
type ExperimentalSidebarNavigationIcon = {
|
|
17146
17219
|
kind: "host";
|
|
@@ -17666,6 +17739,7 @@ type ExperimentalPluginFixedTabReference<Target extends JsonValue = never> = {
|
|
|
17666
17739
|
/** A fixed tab declared by a plugin nav panel. */
|
|
17667
17740
|
type PluginFixedTabRegistration<Target extends JsonValue = never> = ExperimentalPluginFixedTabReference<Target> & {
|
|
17668
17741
|
title: string;
|
|
17742
|
+
/** Resolved names take precedence over plugin branding; unknown names fall back to branding. */
|
|
17669
17743
|
icon: BbIconName;
|
|
17670
17744
|
component: ComponentType<PluginNavPanelProps>;
|
|
17671
17745
|
/** `flush` lets the component own padding and scrolling. */
|
|
@@ -17677,6 +17751,7 @@ interface PluginNavPanelRegistration {
|
|
|
17677
17751
|
/** Unique within the plugin; letters, digits, `-`, `_`. */
|
|
17678
17752
|
id: string;
|
|
17679
17753
|
title: string;
|
|
17754
|
+
/** Resolved names take precedence over plugin branding in navigation and the header; unknown names fall back to branding. */
|
|
17680
17755
|
icon: BbIconName;
|
|
17681
17756
|
/** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */
|
|
17682
17757
|
path: string;
|
|
@@ -17760,8 +17835,8 @@ interface PluginThreadPanelActionRegistration {
|
|
|
17760
17835
|
/** Label of the action row in the panel's new-tab launcher. */
|
|
17761
17836
|
title: string;
|
|
17762
17837
|
/**
|
|
17763
|
-
*
|
|
17764
|
-
*
|
|
17838
|
+
* Resolved names take precedence over plugin branding in the launcher and
|
|
17839
|
+
* opened tabs. Omitted or unknown names fall back to plugin branding.
|
|
17765
17840
|
*/
|
|
17766
17841
|
icon?: BbIconName;
|
|
17767
17842
|
/** Rendered inside every panel tab this action opens. */
|
|
@@ -17800,7 +17875,7 @@ interface PluginNewThreadPanelActionRegistration {
|
|
|
17800
17875
|
id: string;
|
|
17801
17876
|
/** Label of the action row in the panel's new-tab launcher. */
|
|
17802
17877
|
title: string;
|
|
17803
|
-
/**
|
|
17878
|
+
/** Resolved names take precedence over plugin branding; omitted or unknown names fall back to branding. */
|
|
17804
17879
|
icon?: BbIconName;
|
|
17805
17880
|
/** Rendered inside every panel tab this action opens. */
|
|
17806
17881
|
component: ComponentType<PluginNewThreadPanelProps>;
|
|
@@ -17845,7 +17920,7 @@ interface PluginSidebarFooterActionRegistration {
|
|
|
17845
17920
|
id: string;
|
|
17846
17921
|
/** Tooltip and accessible label for the icon button. */
|
|
17847
17922
|
title: string;
|
|
17848
|
-
/**
|
|
17923
|
+
/** Resolved names take precedence over plugin branding; omitted or unknown names fall back to branding. */
|
|
17849
17924
|
icon: BbIconName;
|
|
17850
17925
|
/**
|
|
17851
17926
|
* Runs when the user activates the action (e.g. call `openSettings()`,
|
|
@@ -18230,7 +18305,7 @@ interface PluginSidebarThreadDraftState {
|
|
|
18230
18305
|
}
|
|
18231
18306
|
/**
|
|
18232
18307
|
* The status another plugin's app-wide script set on a thread's row through
|
|
18233
|
-
* `
|
|
18308
|
+
* the content-script context's `experimental_setThreadRowStatus` (see
|
|
18234
18309
|
* {@link PluginSdkApp.useSidebarThreadRowStatus}). bb's row draws it in
|
|
18235
18310
|
* place of the draft glyph while it is set; a replaced list should do the
|
|
18236
18311
|
* same so a status set by, say, the drafts or workflows plugin does not
|
|
@@ -18270,6 +18345,9 @@ interface PluginSidebarThreadActions {
|
|
|
18270
18345
|
* `sectionId` files the new thread under that section, and
|
|
18271
18346
|
* `environmentId` reuses that environment (the "New thread in
|
|
18272
18347
|
* environment" affordance), both exactly as bb's own list does.
|
|
18348
|
+
* `experimental_placement` explicitly selects the section and pin state,
|
|
18349
|
+
* overriding `sectionId`. Omitting placement starts unpinned, outside sections
|
|
18350
|
+
* unless `sectionId` is supplied; previous composer placement is cleared.
|
|
18273
18351
|
* `hostId` selects a machine for a new environment when it
|
|
18274
18352
|
* is known and supports an environment provider. `environmentId` wins when
|
|
18275
18353
|
* both are supplied.
|
|
@@ -18277,6 +18355,10 @@ interface PluginSidebarThreadActions {
|
|
|
18277
18355
|
openNewThread(options?: {
|
|
18278
18356
|
projectId?: string;
|
|
18279
18357
|
sectionId?: string;
|
|
18358
|
+
experimental_placement?: {
|
|
18359
|
+
sectionId: string | null;
|
|
18360
|
+
pinned: boolean;
|
|
18361
|
+
};
|
|
18280
18362
|
environmentId?: string;
|
|
18281
18363
|
hostId?: string;
|
|
18282
18364
|
focusPrompt?: boolean;
|
|
@@ -18565,12 +18647,19 @@ interface PluginMessageActionContext {
|
|
|
18565
18647
|
* is never thrown: the host logs it and reports it here.
|
|
18566
18648
|
*/
|
|
18567
18649
|
openPanel(options: PluginTargetedPanelActionOpenOptions): boolean;
|
|
18650
|
+
/**
|
|
18651
|
+
* The composer of the thread the message is in, or null when that thread's
|
|
18652
|
+
* composer is not available on this surface. The same handle
|
|
18653
|
+
* `useComposer()` returns there.
|
|
18654
|
+
*/
|
|
18655
|
+
composer: PluginComposerApi | null;
|
|
18568
18656
|
}
|
|
18569
18657
|
/**
|
|
18570
18658
|
* An action on chat messages: an icon button in the per-message action bar
|
|
18571
18659
|
* (user and assistant messages) and an entry in the assistant-message
|
|
18572
18660
|
* text-selection menu. Host-rendered chrome — the plugin supplies title,
|
|
18573
|
-
* icon
|
|
18661
|
+
* icon, and `run` behavior only. Resolved icon names take precedence over
|
|
18662
|
+
* plugin branding; omitted or unknown names fall back to branding.
|
|
18574
18663
|
*/
|
|
18575
18664
|
interface PluginMessageActionRegistration {
|
|
18576
18665
|
/** Unique within the plugin; letters, digits, `-`, `_`. */
|
|
@@ -19080,12 +19169,6 @@ type PluginComposerScope = {
|
|
|
19080
19169
|
kind: "queued-message";
|
|
19081
19170
|
threadId: string;
|
|
19082
19171
|
queuedMessageId: string;
|
|
19083
|
-
} | {
|
|
19084
|
-
kind: "side-chat";
|
|
19085
|
-
projectId: string;
|
|
19086
|
-
parentThreadId: string;
|
|
19087
|
-
tabId: string;
|
|
19088
|
-
childThreadId: string | null;
|
|
19089
19172
|
} | {
|
|
19090
19173
|
kind: "new-thread";
|
|
19091
19174
|
/** Root compose's effective selected project; null only while unresolved. */
|
|
@@ -19108,35 +19191,39 @@ interface ComposerCustomization {
|
|
|
19108
19191
|
component: ComponentType;
|
|
19109
19192
|
}[];
|
|
19110
19193
|
plusMenu?: readonly ComposerPlusMenuItem[];
|
|
19194
|
+
/** Host-rendered rows in the menu next to the composer's send button. */
|
|
19195
|
+
sendMenu?: readonly ComposerSendMenuItem[];
|
|
19111
19196
|
richText?: ComposerRichTextSpec;
|
|
19112
19197
|
}
|
|
19113
19198
|
/** Host-rendered menu row in the composer's `+` menu. */
|
|
19114
19199
|
interface ComposerPlusMenuItem {
|
|
19115
19200
|
id: string;
|
|
19116
19201
|
label: string;
|
|
19117
|
-
/**
|
|
19202
|
+
/** Takes precedence over the plugin's `bb.branding.icon`, which is drawn when this is omitted. */
|
|
19118
19203
|
icon?: BbIconName;
|
|
19119
19204
|
/** Accessible description for the host-rendered row. */
|
|
19120
19205
|
description?: string;
|
|
19121
|
-
disabled?: boolean | ((
|
|
19206
|
+
disabled?: boolean | ((composer: PluginComposerApi) => boolean);
|
|
19122
19207
|
run(context: {
|
|
19123
19208
|
composer: PluginComposerApi;
|
|
19124
|
-
view: ComposerView;
|
|
19125
19209
|
}): void | Promise<void>;
|
|
19126
19210
|
}
|
|
19127
|
-
/**
|
|
19128
|
-
|
|
19129
|
-
|
|
19130
|
-
|
|
19131
|
-
|
|
19132
|
-
|
|
19133
|
-
|
|
19134
|
-
|
|
19135
|
-
|
|
19136
|
-
|
|
19137
|
-
|
|
19138
|
-
|
|
19139
|
-
|
|
19211
|
+
/**
|
|
19212
|
+
* Host-rendered row in the menu next to the composer's send button, for
|
|
19213
|
+
* alternatives to sending right away (save as a draft, send later). The menu
|
|
19214
|
+
* shows only while the composer can submit.
|
|
19215
|
+
*/
|
|
19216
|
+
interface ComposerSendMenuItem {
|
|
19217
|
+
id: string;
|
|
19218
|
+
label: string;
|
|
19219
|
+
/** Takes precedence over the plugin's `bb.branding.icon`, which is drawn when this is omitted. */
|
|
19220
|
+
icon?: BbIconName;
|
|
19221
|
+
/** Accessible description for the host-rendered row. */
|
|
19222
|
+
description?: string;
|
|
19223
|
+
disabled?: boolean | ((composer: PluginComposerApi) => boolean);
|
|
19224
|
+
run(context: {
|
|
19225
|
+
composer: PluginComposerApi;
|
|
19226
|
+
}): void | Promise<void>;
|
|
19140
19227
|
}
|
|
19141
19228
|
interface ComposerRichTextSpec {
|
|
19142
19229
|
/** Content-derived paint: match ranges receive `className`; text is never mutated. */
|
|
@@ -19149,18 +19236,80 @@ interface ComposerRichTextSpec {
|
|
|
19149
19236
|
}[];
|
|
19150
19237
|
className: string;
|
|
19151
19238
|
}[];
|
|
19152
|
-
/** Debounced, read-only observation of the structured draft. */
|
|
19153
|
-
onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;
|
|
19154
19239
|
}
|
|
19155
|
-
|
|
19240
|
+
/** The composer's text and the @-mention pills in it. */
|
|
19241
|
+
interface ComposerDraft {
|
|
19156
19242
|
text: string;
|
|
19157
|
-
mentions: readonly
|
|
19158
|
-
|
|
19159
|
-
|
|
19160
|
-
|
|
19161
|
-
|
|
19162
|
-
|
|
19163
|
-
|
|
19243
|
+
mentions: readonly ComposerMention[];
|
|
19244
|
+
}
|
|
19245
|
+
/** An already uploaded attachment; paths retain their original project or thread ownership. */
|
|
19246
|
+
type ComposerAttachment = UploadedPromptAttachment;
|
|
19247
|
+
/** The complete current draft. Snapshots and their entries are immutable. */
|
|
19248
|
+
interface ComposerDraftSnapshot extends ComposerDraft {
|
|
19249
|
+
readonly attachments: readonly ComposerAttachment[];
|
|
19250
|
+
}
|
|
19251
|
+
/** Atomic text and mention replacement, optionally replacing uploaded attachments too. */
|
|
19252
|
+
interface ComposerDraftReplacement extends ComposerDraft {
|
|
19253
|
+
/** Omit to preserve attachments; supply an empty array to remove them all. Does not upload or copy files. */
|
|
19254
|
+
attachments?: readonly ComposerAttachment[];
|
|
19255
|
+
}
|
|
19256
|
+
/**
|
|
19257
|
+
* One @-mention pill: its range in `ComposerDraft.text` plus everything the
|
|
19258
|
+
* host needs to recreate it, so a mention read from `draft` can be passed
|
|
19259
|
+
* back to `insert` unchanged.
|
|
19260
|
+
*/
|
|
19261
|
+
type ComposerMention = {
|
|
19262
|
+
from: number;
|
|
19263
|
+
to: number;
|
|
19264
|
+
label: string;
|
|
19265
|
+
} & ({
|
|
19266
|
+
kind: "thread";
|
|
19267
|
+
threadId: string;
|
|
19268
|
+
projectId?: string;
|
|
19269
|
+
} | {
|
|
19270
|
+
kind: "project";
|
|
19271
|
+
projectId: string;
|
|
19272
|
+
} | {
|
|
19273
|
+
kind: "section";
|
|
19274
|
+
sectionId: string;
|
|
19275
|
+
} | {
|
|
19276
|
+
kind: "path";
|
|
19277
|
+
path: string;
|
|
19278
|
+
source: "thread-storage" | "workspace";
|
|
19279
|
+
entryKind: "directory" | "file";
|
|
19280
|
+
} | {
|
|
19281
|
+
kind: "command";
|
|
19282
|
+
trigger: "$" | "/";
|
|
19283
|
+
name: string;
|
|
19284
|
+
source: "command" | "skill";
|
|
19285
|
+
origin: "builtin" | "project" | "user";
|
|
19286
|
+
argumentHint: string | null;
|
|
19287
|
+
} | {
|
|
19288
|
+
kind: "plugin";
|
|
19289
|
+
/** The plugin that owns the pill. */
|
|
19290
|
+
pluginId: string;
|
|
19291
|
+
/** The mention provider id that plugin registered. */
|
|
19292
|
+
provider: string;
|
|
19293
|
+
/** The item id the provider's `resolve` receives at send time. */
|
|
19294
|
+
id: string;
|
|
19295
|
+
icon?: string | null;
|
|
19296
|
+
});
|
|
19297
|
+
/**
|
|
19298
|
+
* What `insert` accepts: text, a mention read from `draft` (any kind), or one
|
|
19299
|
+
* of the calling plugin's own mentions (`{ provider, id, label }`, no `kind`).
|
|
19300
|
+
*/
|
|
19301
|
+
type ComposerInsertPart = string | ComposerMention | PluginComposerMention;
|
|
19302
|
+
/** Where `insert` puts its content. */
|
|
19303
|
+
interface ComposerInsertOptions {
|
|
19304
|
+
/**
|
|
19305
|
+
* `"cursor"` (default) inserts at the editor's selection, replacing any
|
|
19306
|
+
* selected text; the selection is kept while focus is elsewhere, and the
|
|
19307
|
+
* composer must be on screen. `"end"` inserts after the last character and
|
|
19308
|
+
* also works for a composer that is not on screen.
|
|
19309
|
+
*/
|
|
19310
|
+
at?: "cursor" | "end";
|
|
19311
|
+
/** Put the content on its own paragraph, adding a paragraph break before and after only where text is adjacent. */
|
|
19312
|
+
block?: boolean;
|
|
19164
19313
|
}
|
|
19165
19314
|
/** Host-rendered paint applied to the editable composer text. */
|
|
19166
19315
|
interface PluginComposerTextEffect {
|
|
@@ -19192,31 +19341,77 @@ interface PluginComposerMention {
|
|
|
19192
19341
|
label: string;
|
|
19193
19342
|
}
|
|
19194
19343
|
/**
|
|
19195
|
-
*
|
|
19196
|
-
*
|
|
19197
|
-
*
|
|
19198
|
-
*
|
|
19199
|
-
* draft.
|
|
19200
|
-
*
|
|
19201
|
-
*
|
|
19344
|
+
* One composer: its state and the writes a plugin can make. `useComposer()`
|
|
19345
|
+
* returns the composer the calling surface belongs to — inside a composer
|
|
19346
|
+
* slot, that composer; in a thread's panels, that thread's composer;
|
|
19347
|
+
* elsewhere, the current route's draft (the thread in view, or the new-thread
|
|
19348
|
+
* draft).
|
|
19349
|
+
*
|
|
19350
|
+
* The handle is stable: the same composer returns the same object across
|
|
19351
|
+
* renders, and its methods always act on the current draft, so it is safe to
|
|
19352
|
+
* keep in effects, callbacks and async work. Its reactive fields (`text`,
|
|
19353
|
+
* `draft`, `selection`, `isEmpty`, …) re-render the calling component when they change;
|
|
19354
|
+
* depend on those fields, not on the handle, in memo dependency lists.
|
|
19355
|
+
*
|
|
19356
|
+
* A handle always writes to its own composer's draft. Thread and new-thread
|
|
19357
|
+
* drafts persist, so a write after the composer left the screen still lands
|
|
19358
|
+
* in that draft. When the draft no longer exists (a queued-message or
|
|
19359
|
+
* sent-message editor that closed), `insert`, `replace`, `removeMention`, `submit` and
|
|
19360
|
+
* `setSelection` throw "This composer is no longer available"; the older
|
|
19361
|
+
* text methods log a warning and do nothing.
|
|
19202
19362
|
*/
|
|
19203
19363
|
interface PluginComposerApi {
|
|
19204
19364
|
scope: PluginComposerScope;
|
|
19365
|
+
/**
|
|
19366
|
+
* Stable identity for this composer's draft: the same across remounts and
|
|
19367
|
+
* reloads for thread and new-thread composers (including a `ThreadChat`),
|
|
19368
|
+
* and per editing session for queued-message and sent-message editors.
|
|
19369
|
+
*/
|
|
19370
|
+
readonly key: string;
|
|
19371
|
+
/** `"compact"` in the collapsed single-line layout, otherwise `"expanded"`. */
|
|
19372
|
+
readonly layout: "compact" | "expanded";
|
|
19373
|
+
/** The thread's agent is running or stopping. Always false in a new-thread composer. */
|
|
19374
|
+
readonly isRunning: boolean;
|
|
19375
|
+
/** The composer is submitting right now. */
|
|
19376
|
+
readonly isSubmitting: boolean;
|
|
19377
|
+
/**
|
|
19378
|
+
* Pressing Enter would not submit right now: the same decision as the
|
|
19379
|
+
* host's send button (empty draft, uploads in progress, loading, a
|
|
19380
|
+
* selection or setup missing, a pending interaction, voice input, …).
|
|
19381
|
+
*/
|
|
19382
|
+
readonly isSubmittingBlocked: boolean;
|
|
19383
|
+
/** The host's message for why submitting is blocked, or null when it is not. */
|
|
19384
|
+
readonly submittingBlockedReason: string | null;
|
|
19385
|
+
/** No text (ignoring whitespace), no mentions and no attachments. */
|
|
19386
|
+
readonly isEmpty: boolean;
|
|
19387
|
+
/** Attachments that have finished uploading. */
|
|
19388
|
+
readonly attachmentCount: number;
|
|
19205
19389
|
/** Current plain text for this composer scope. */
|
|
19206
19390
|
readonly text: string;
|
|
19207
|
-
/**
|
|
19208
|
-
|
|
19209
|
-
|
|
19210
|
-
|
|
19211
|
-
|
|
19212
|
-
|
|
19213
|
-
|
|
19214
|
-
*
|
|
19215
|
-
*
|
|
19216
|
-
|
|
19217
|
-
|
|
19218
|
-
|
|
19219
|
-
|
|
19391
|
+
/** The complete current draft, including uploaded attachments. Stable until the draft changes. */
|
|
19392
|
+
readonly draft: ComposerDraftSnapshot;
|
|
19393
|
+
/** Current picker values, or null when this composer has no pickers. Stable until a picker value changes. */
|
|
19394
|
+
readonly selection: ComposerSelection | null;
|
|
19395
|
+
/**
|
|
19396
|
+
* Replace text and mentions together in one committed change. An updater
|
|
19397
|
+
* receives the latest immutable snapshot, including attachments, and must
|
|
19398
|
+
* return its result synchronously. Returning that same snapshot is a no-op.
|
|
19399
|
+
* Omitted attachments are preserved; an explicit list replaces them, and
|
|
19400
|
+
* an empty list clears them. Does not infer or rebase mention ranges.
|
|
19401
|
+
* Ranges are non-overlapping UTF-16 offsets into the supplied text.
|
|
19402
|
+
* Invalid results, throwing updaters, and unavailable editors leave the
|
|
19403
|
+
* draft unchanged. Does not focus, submit, upload, or copy files between
|
|
19404
|
+
* projects. Use `insert` for insertion at the editor's cursor.
|
|
19405
|
+
*/
|
|
19406
|
+
replace(next: ComposerDraftReplacement | ((current: ComposerDraftSnapshot) => ComposerDraftReplacement)): void;
|
|
19407
|
+
/**
|
|
19408
|
+
* Insert text and mentions. See {@link ComposerInsertOptions} for placement.
|
|
19409
|
+
* Mentions read from `draft` are recreated exactly; the calling plugin's
|
|
19410
|
+
* own `{ provider, id, label }` resolves through its mention provider.
|
|
19411
|
+
* Throws for another plugin's mention without `kind`, and for
|
|
19412
|
+
* `at: "cursor"` when the composer is not on screen.
|
|
19413
|
+
*/
|
|
19414
|
+
insert(parts: ComposerInsertPart | readonly ComposerInsertPart[], options?: ComposerInsertOptions): void;
|
|
19220
19415
|
/**
|
|
19221
19416
|
* Apply a host-rendered effect to this composer's editable text, or clear it.
|
|
19222
19417
|
* Effects are scoped to the calling plugin and automatically clear when the
|
|
@@ -19229,38 +19424,22 @@ interface PluginComposerApi {
|
|
|
19229
19424
|
* scope changes.
|
|
19230
19425
|
*/
|
|
19231
19426
|
setInputLock(locked: boolean): void;
|
|
19232
|
-
/**
|
|
19233
|
-
* Append text to the draft as a `> ` blockquote block and focus the
|
|
19234
|
-
* composer. Blank text is a no-op. This is the "reference this selection
|
|
19235
|
-
* in chat" primitive.
|
|
19236
|
-
*/
|
|
19237
|
-
addQuote(text: string): void;
|
|
19238
|
-
/**
|
|
19239
|
-
* Insert an @-mention pill that resolves through this plugin's mention
|
|
19240
|
-
* provider at send time — the durable way to reference an entity whose
|
|
19241
|
-
* content should be fetched fresh when the message is sent.
|
|
19242
|
-
*/
|
|
19243
|
-
insertMention(mention: PluginComposerMention): void;
|
|
19244
|
-
/** Remove this plugin's matching mention pills and their text from the current draft. */
|
|
19245
|
-
experimental_removeMention(mention: {
|
|
19246
|
-
provider: string;
|
|
19247
|
-
id: string;
|
|
19248
|
-
}): void;
|
|
19249
19427
|
/** Subscribe to successful local submissions in this composer scope, including accepted queued messages. Failed sends and draft clearing do not notify. Dispose on unmount. */
|
|
19250
|
-
|
|
19428
|
+
onSubmitted(listener: () => void): () => void;
|
|
19251
19429
|
/** Focus the composer caret at the end of the draft. */
|
|
19252
19430
|
focus(): void;
|
|
19253
19431
|
/**
|
|
19254
|
-
* Submit this composer's draft
|
|
19255
|
-
*
|
|
19256
|
-
*
|
|
19257
|
-
* This is a real submission, not a plugin-issued send: the host builds the
|
|
19258
|
-
* request exactly as pressing Enter would, so the draft's attachments and
|
|
19432
|
+
* Submit this composer's draft exactly as pressing Enter would: the same
|
|
19433
|
+
* checks and the same action (send, or queue while the thread is busy; a
|
|
19434
|
+
* provider handoff creates a new thread). The draft's attachments and
|
|
19259
19435
|
* @-mentions, and — in the new-thread composer — the provider, model,
|
|
19260
19436
|
* reasoning level, service tier, permission mode and environment the user
|
|
19261
|
-
* has selected on screen, all travel with it.
|
|
19262
|
-
*
|
|
19263
|
-
*
|
|
19437
|
+
* has selected on screen, all travel with it.
|
|
19438
|
+
*
|
|
19439
|
+
* While attachments are uploading it waits for them, then checks again; it
|
|
19440
|
+
* rejects if an upload fails. Otherwise, when submitting is blocked it
|
|
19441
|
+
* rejects with `submittingBlockedReason`, a message safe to show to the
|
|
19442
|
+
* user. The queued-message and sent-message editors save edits and reject.
|
|
19264
19443
|
*
|
|
19265
19444
|
* `sendAt` queues the submission until that time. `experimental_data` is
|
|
19266
19445
|
* opaque JSON delivered to dispatch hooks together with the calling plugin's
|
|
@@ -19269,16 +19448,10 @@ interface PluginComposerApi {
|
|
|
19269
19448
|
* later attempts; core does not persist or interpret the opaque data.
|
|
19270
19449
|
*
|
|
19271
19450
|
* Resolves once the host has accepted the submission and cleared the draft.
|
|
19272
|
-
* Rejects when the composer refused to submit — a scope with no submit
|
|
19273
|
-
* pipeline (a queued-message editor, a side chat), an empty draft, or a
|
|
19274
|
-
* composer that is not ready (still loading its execution defaults, missing
|
|
19275
|
-
* an environment). The rejection's message is safe to show to the user.
|
|
19276
19451
|
* Failures of the underlying request are reported by bb's own submit error
|
|
19277
19452
|
* handling and restore the draft, exactly as an interactive failure does.
|
|
19278
|
-
*
|
|
19279
|
-
* Experimental: see docs/api_to_audit.md.
|
|
19280
19453
|
*/
|
|
19281
|
-
|
|
19454
|
+
submit(options: ComposerSubmitOptions): Promise<void>;
|
|
19282
19455
|
/**
|
|
19283
19456
|
* Set this composer's pickers as if each value had been picked by hand.
|
|
19284
19457
|
*
|
|
@@ -19325,18 +19498,15 @@ interface PluginComposerApi {
|
|
|
19325
19498
|
* mounted outside any composer), when the calling surface is no longer
|
|
19326
19499
|
* active, and when a value is not a known reasoning level, service tier or
|
|
19327
19500
|
* permission mode.
|
|
19328
|
-
*
|
|
19329
|
-
* Experimental: see docs/api_to_audit.md.
|
|
19330
19501
|
*/
|
|
19331
|
-
|
|
19502
|
+
setSelection(selection: ComposerSelection): Promise<ComposerSelection>;
|
|
19332
19503
|
}
|
|
19333
19504
|
/**
|
|
19334
|
-
*
|
|
19335
|
-
* with. Field names match `NewThreadRequest` and the `default*` props of
|
|
19505
|
+
* Current picker values in `selection`, input for `setSelection`, and the shape it resolves with. Field names match `NewThreadRequest` and the `default*` props of
|
|
19336
19506
|
* `experimental_NewThreadComposer`, so one routed decision can feed the
|
|
19337
19507
|
* composer, the embedded composer and `bb.sdk.threads.spawn` alike.
|
|
19338
19508
|
*/
|
|
19339
|
-
interface
|
|
19509
|
+
interface ComposerSelection {
|
|
19340
19510
|
/** New-thread composers only. BB's personal-project id means "Don't work in a project". */
|
|
19341
19511
|
projectId?: string;
|
|
19342
19512
|
/**
|
|
@@ -19357,13 +19527,13 @@ interface ExperimentalComposerSelection {
|
|
|
19357
19527
|
permissionMode?: PermissionMode;
|
|
19358
19528
|
}
|
|
19359
19529
|
/**
|
|
19360
|
-
* What `
|
|
19530
|
+
* What `submit` does differently from pressing Enter.
|
|
19361
19531
|
*
|
|
19362
19532
|
* `experimental_data` is opaque JSON delivered to dispatch hooks. The runtime
|
|
19363
19533
|
* associates it with the calling plugin automatically for the initial
|
|
19364
19534
|
* dispatch attempt.
|
|
19365
19535
|
*/
|
|
19366
|
-
type
|
|
19536
|
+
type ComposerSubmitOptions = {
|
|
19367
19537
|
sendAt: number;
|
|
19368
19538
|
experimental_data?: JsonValue;
|
|
19369
19539
|
} | {
|
|
@@ -19588,7 +19758,7 @@ interface NewThreadRequest {
|
|
|
19588
19758
|
input: PromptInput[];
|
|
19589
19759
|
/**
|
|
19590
19760
|
* Epoch ms the first turn should dispatch at. Present only when the
|
|
19591
|
-
* submission came from `useComposer().
|
|
19761
|
+
* submission came from `useComposer().submit` — a scheduled
|
|
19592
19762
|
* create — and absent otherwise, which is what makes an ordinary submission
|
|
19593
19763
|
* start work at once. Forward it to `threads.spawn` unchanged: the thread is
|
|
19594
19764
|
* created `pending` and its first message is queued as a row until then.
|
|
@@ -19892,6 +20062,20 @@ interface PluginSdkApp {
|
|
|
19892
20062
|
/** Read or clear the owning tab's validated, session-scoped target. */
|
|
19893
20063
|
experimental_useFixedTabTarget<Target extends JsonValue>(tab: ExperimentalPluginFixedTabReference<Target>): ExperimentalFixedTabTargetState<Target> | null;
|
|
19894
20064
|
useComposer(): PluginComposerApi;
|
|
20065
|
+
/**
|
|
20066
|
+
* Every composer on screen that plugin composer customizations mount in,
|
|
20067
|
+
* oldest first: the thread page's composer, a `ThreadChat`'s composer, the
|
|
20068
|
+
* new-thread composer and open queued-message editors. Use it from a panel
|
|
20069
|
+
* or page that writes into a composer the user picks — label each by its
|
|
20070
|
+
* `scope`, then call `insert`, `focus` or `submit` on the chosen handle.
|
|
20071
|
+
*
|
|
20072
|
+
* Each handle is stable while its composer stays on screen and follows the
|
|
20073
|
+
* same lifetime rule as `useComposer()`. `setTextEffect` and `setInputLock`
|
|
20074
|
+
* have no effect here; call them from a composer slot's `useComposer()`.
|
|
20075
|
+
* The calling component re-renders when the list or any listed draft
|
|
20076
|
+
* changes.
|
|
20077
|
+
*/
|
|
20078
|
+
useComposers(): readonly PluginComposerApi[];
|
|
19895
20079
|
/**
|
|
19896
20080
|
* The sidebar's live thread view (see {@link PluginSidebarThreadsState}).
|
|
19897
20081
|
* Reads the host's own cache and realtime subscriptions, so it costs no
|
|
@@ -19952,7 +20136,7 @@ interface PluginSdkApp {
|
|
|
19952
20136
|
experimental_useSidebarNavigationSplit(itemId: string, options?: ExperimentalSidebarNavigationSplitOptions): ExperimentalSidebarNavigationSplit;
|
|
19953
20137
|
/**
|
|
19954
20138
|
* bb's artwork for a navigation item's icon: bb's glyphs for its own items,
|
|
19955
|
-
* and the
|
|
20139
|
+
* and the panel's explicit icon, falling back to plugin branding, for plugin panels. Experimental:
|
|
19956
20140
|
* see docs/api_to_audit.md.
|
|
19957
20141
|
*/
|
|
19958
20142
|
experimental_SidebarNavigationIcon: ComponentType<ExperimentalSidebarNavigationIconProps>;
|
|
@@ -20112,7 +20296,6 @@ interface PluginSdkApp {
|
|
|
20112
20296
|
* docs/api_to_audit.md.
|
|
20113
20297
|
*/
|
|
20114
20298
|
experimental_Diff: ComponentType<DiffProps>;
|
|
20115
|
-
useComposerView(): ComposerView;
|
|
20116
20299
|
}
|
|
20117
20300
|
|
|
20118
20301
|
type PluginMachineProviderResource = Exclude<JsonValue$2, null>;
|
|
@@ -21012,7 +21195,7 @@ interface MessageDispatchHookContext {
|
|
|
21012
21195
|
queuedMessages: ThreadQueuedMessage[];
|
|
21013
21196
|
/**
|
|
21014
21197
|
* Opaque JSON supplied by a plugin through the composer's
|
|
21015
|
-
* `
|
|
21198
|
+
* `submit`, paired with that plugin's id. Null for ordinary
|
|
21016
21199
|
* submissions and queued re-attempts. Core does not persist or interpret
|
|
21017
21200
|
* the data.
|
|
21018
21201
|
*/
|
|
@@ -21167,9 +21350,11 @@ interface PluginRpc {
|
|
|
21167
21350
|
* `/api/v1/plugins/<id>/rpc/<method>` with "local" auth semantics. The
|
|
21168
21351
|
* host validates input before invocation and output before strict JSON
|
|
21169
21352
|
* serialization. The response is `{ ok: true, result }` or
|
|
21170
|
-
* `{ ok: false, error: { code, message, issues? } }`.
|
|
21353
|
+
* `{ ok: false, error: { code, message, issues? } }`. Each handler gets
|
|
21354
|
+
* the call's context as its second argument; `experimental_caller` names
|
|
21355
|
+
* the plugin that called through `bb.sdk.plugins.callRpc`, or `client`.
|
|
21171
21356
|
*/
|
|
21172
|
-
register<Contract extends PluginRpcContract>(contract: Contract, handlers:
|
|
21357
|
+
register<Contract extends PluginRpcContract>(contract: Contract, handlers: ExperimentalPluginRpcHandlersWithContext<Contract>, options?: {
|
|
21173
21358
|
experimental_discoverable?: boolean;
|
|
21174
21359
|
experimental_description?: string;
|
|
21175
21360
|
}): void;
|
|
@@ -21963,8 +22148,9 @@ interface PluginMentionItem {
|
|
|
21963
22148
|
subtitle?: string;
|
|
21964
22149
|
/**
|
|
21965
22150
|
* BB icon name: a built-in name, or a name the plugin's app bundle
|
|
21966
|
-
* registered with `app.experimental_icons.register()`.
|
|
21967
|
-
* plugin
|
|
22151
|
+
* registered with `app.experimental_icons.register()`. Resolved names take
|
|
22152
|
+
* precedence over plugin branding in menu rows, composer pills, and sent
|
|
22153
|
+
* messages. Omitted or unknown names fall back to plugin branding, then
|
|
21968
22154
|
* the generic plugin icon.
|
|
21969
22155
|
*/
|
|
21970
22156
|
icon?: string;
|
|
@@ -22524,4 +22710,4 @@ declare function cliCommand<const TOptions extends CliOptions = Record<string, n
|
|
|
22524
22710
|
declare function defineCli(spec: PluginCliSpec): PluginCliRegistration;
|
|
22525
22711
|
|
|
22526
22712
|
export { PLUGIN_CLI_OUTPUT_MAX_BYTES, PluginCliError, cliCommand, defineCli, defineRpcContract, experimental_defineHostEntry };
|
|
22527
|
-
export type { BbContext, BbNavigate, BbPluginApi, BranchPickerProps, BranchesState, CheckoutState, CodeOverflowMode, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec,
|
|
22713
|
+
export type { BbContext, BbNavigate, BbPluginApi, BranchPickerProps, BranchesState, CheckoutState, CodeOverflowMode, ComposerAttachment, ComposerCustomization, ComposerDraft, ComposerDraftReplacement, ComposerDraftSnapshot, ComposerInsertOptions, ComposerInsertPart, ComposerMention, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerSelection, ComposerSendMenuItem, ComposerSubmitOptions, DiffProps, DiffViewMode, ExperimentalAppIcons, ExperimentalAppOverlayProps, ExperimentalAppOverlayRegistration, ExperimentalAppPanel, ExperimentalAppPanelSurface, ExperimentalDesktopBrowserAcquireInput, ExperimentalDesktopBrowserCreateInput, ExperimentalDesktopBrowserLease, ExperimentalDesktopBrowserScope, ExperimentalDesktopBrowsersArea, ExperimentalDiffFileContent, ExperimentalDiffFullFileContents, ExperimentalFileLinkProps, ExperimentalFileLocation, ExperimentalFileOpenOptions, ExperimentalFixedTabTargetContract, ExperimentalFixedTabTargetState, ExperimentalHostCallOptions, ExperimentalHostClient, ExperimentalHostEntry, ExperimentalHostPaths, ExperimentalHostRpcContext, ExperimentalHostRpcHandlers, ExperimentalHostSignalContract, ExperimentalHostSignalEvent, ExperimentalHostSignals, ExperimentalHostWatchChange, ExperimentalHostWatchChangeType, ExperimentalHostWatchEvent, ExperimentalHostWatchListener, ExperimentalHostWatchOptions, ExperimentalHostWatchSubscription, ExperimentalHostWorkerLease, ExperimentalIconProps, ExperimentalIconRegistration, ExperimentalLiveFileTarget, ExperimentalOpenFixedTabOptions, ExperimentalPermissionModePickerProps, ExperimentalPluginBrowserPage, ExperimentalPluginBrowserPageEvaluateOptions, ExperimentalPluginBrowserPageWorld, ExperimentalPluginBrowserToolbarActionProps, ExperimentalPluginBrowserToolbarActionRegistration, ExperimentalPluginFixedTabReference, ExperimentalPluginMentionImage, ExperimentalPluginProviderEnvContext, ExperimentalPluginProviderEnvEntry, ExperimentalPluginProviderEnvHealth, ExperimentalPluginProviderEnvHealthContext, ExperimentalPluginRpcCaller, ExperimentalPluginRpcHandlerContext, ExperimentalPluginRpcHandlersWithContext, ExperimentalPluginWebSocket, ExperimentalPluginWebSocketContext, ExperimentalPluginWebSocketHandler, ExperimentalPluginWebSocketHandlers, ExperimentalProviderIconProps, ExperimentalProviderModelPickerProps, ExperimentalProviderModelPickerRouting, ExperimentalProviderModelPickerValue, ExperimentalQuestionFormHost, ExperimentalQuestionShortcut, ExperimentalSidebarFooter, ExperimentalSidebarFooterActionContext, ExperimentalSidebarFooterActionRegistration, ExperimentalSidebarFooterDisclosureController, ExperimentalSidebarFooterDisclosureProps, ExperimentalSidebarFooterDisclosureRegistration, ExperimentalSidebarFooterItemBase, ExperimentalSidebarFooterItemRegistration, ExperimentalSidebarHeaderProps, ExperimentalSidebarHeaderRegistration, ExperimentalSidebarNavigationAction, ExperimentalSidebarNavigationActions, ExperimentalSidebarNavigationActivationOptions, ExperimentalSidebarNavigationIcon, ExperimentalSidebarNavigationIconProps, ExperimentalSidebarNavigationItem, ExperimentalSidebarNavigationProps, ExperimentalSidebarNavigationRegistration, ExperimentalSidebarNavigationShortcut, ExperimentalSidebarNavigationSplit, ExperimentalSidebarNavigationSplitOptions, ExperimentalSidebarNavigationState, JsonValue, MachineBootstrapApi, MachineBootstrapRequest, MachineExecutor, MachineExecutorRequest, MarkdownProps, MessageDispatchHookContext, MessageDispatchHookDecision, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAiCompleteOptions, PluginAiServiceDeclaration, PluginAiServiceStatus, PluginAiServices, PluginAiTranscribeOptions, PluginAppBuilder, PluginAppCommands, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginBbSdk, PluginBoundThreadsArea, PluginBrowserBbSdk, PluginCli, PluginCliBooleanOption, PluginCliCommand, PluginCliCommandInfo, PluginCliConstraint, PluginCliContext, PluginCliDurationOption, PluginCliDurationUnit, PluginCliEnumOption, PluginCliErrorCode, PluginCliExecutionResult, PluginCliIntegerOption, PluginCliOption, PluginCliOptionValues, PluginCliOutputLimitError, PluginCliPositional, PluginCliPositionalValues, PluginCliRegistration, PluginCliResult, PluginCliRunInput, PluginCliSpec, PluginCliStringOption, PluginCodeThemeData, PluginCodeThemeState, PluginCodeThemeTokenRule, PluginCommandContext, PluginCommandRegistration, PluginCommandShortcut, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginDiffRendererProps, PluginDiffRendererRegistration, PluginDispatchAttemptKind, PluginDispatchEnvironmentIntent, PluginDispatchExecution, PluginDispatchExecutionSources, PluginDispatchInput, PluginEnvironmentProvider, PluginEnvironmentProviderDeclaration, PluginEnvironmentProviderInputsChange, PluginEnvironmentProviderInputsProps, PluginEnvironmentProviderInputsRegistration, PluginEnvironmentProviderRequirements, PluginEnvironmentProvidersState, PluginEnvironmentValidateDecision, PluginEnvironments, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginFixedTabDeclaration, PluginFixedTabRegistration, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHookHandler, PluginHookName, PluginHookSignatures, PluginHooks, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionDescription, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMachineProviderDeclaration, PluginMachineProviderInputsChange, PluginMachineProviderInputsProps, PluginMachineProviderInputsRegistration, PluginMachineValidateDecision, PluginMachines, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginNewThreadPanelActionContext, PluginNewThreadPanelActionRegistration, PluginNewThreadPanelProps, PluginPanelActionOpenOptions, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginProviderCapabilities, PluginProviderCompletedTurnDisplay, PluginProviderComposerAction, PluginProviderDeclaration, PluginProviderExtensionKindDeclaration, PluginProviderFallbackModel, PluginProviderIconRegistration, PluginProviderMaintenance, PluginProviderModelCatalogScope, PluginProviderNativeRootEntry, PluginProviderNativeRoots, PluginProviderOptionDescriptor, PluginProviderOptionsContext, PluginProviderPermissionMode, PluginProviderReasoningLevel, PluginProviderStrings, PluginProviders, PluginProvidersState, PluginRealtime, PluginRealtimeConnectionState, PluginRowLabels, PluginRowPresentation, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerAccess, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSection, PluginSidebarSplitLayout, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadDraftState, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadRowStatus, PluginSidebarThreadShortcut, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSourceCodeRendererProps, PluginSourceCodeRendererRegistration, PluginStatusApi, PluginStorage, PluginTargetedPanelActionOpenOptions, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginThreadTitleProps, PluginTimelineRendererProps, PluginTimelineRendererRegistration, PluginTimelineRendererRow, PluginTimelineRowPresentation, PluginTimelineRowStatus, PluginTurnFailedEvent, PluginUi, ReadonlyJsonValue, ServerAccessGrant, ServerAccessProviderDeclaration, SourceCodeLineRange, SourceCodeProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps, UrlLinkProps, UseBranchesArgs, UseCheckoutStateArgs };
|