@get-bb/plugin-sdk 0.4.94 → 0.4.99

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.
@@ -192,6 +192,7 @@ declare const promptInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
192
192
  }>;
193
193
  trigger: z.ZodEnum<{
194
194
  "/": "/";
195
+ $: "$";
195
196
  }>;
196
197
  }, z.core.$strip>, z.ZodObject<{
197
198
  icon: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -250,10 +251,15 @@ declare const providerInfoSchema: z.ZodObject<{
250
251
  supportsThreadArchive: z.ZodBoolean;
251
252
  supportsThreadRename: z.ZodBoolean;
252
253
  }, z.core.$strip>;
254
+ completedTurnDisplay: z.ZodEnum<{
255
+ collapse: "collapse";
256
+ flat: "flat";
257
+ }>;
253
258
  composerActions: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
254
259
  kind: z.ZodLiteral<"skills">;
255
260
  trigger: z.ZodEnum<{
256
261
  "/": "/";
262
+ $: "$";
257
263
  }>;
258
264
  }, z.core.$strip>, z.ZodObject<{
259
265
  command: z.ZodObject<{
@@ -261,6 +267,7 @@ declare const providerInfoSchema: z.ZodObject<{
261
267
  trailingText: z.ZodString;
262
268
  trigger: z.ZodEnum<{
263
269
  "/": "/";
270
+ $: "$";
264
271
  }>;
265
272
  }, z.core.$strip>;
266
273
  kind: z.ZodLiteral<"plan">;
@@ -270,6 +277,7 @@ declare const providerInfoSchema: z.ZodObject<{
270
277
  trailingText: z.ZodString;
271
278
  trigger: z.ZodEnum<{
272
279
  "/": "/";
280
+ $: "$";
273
281
  }>;
274
282
  }, z.core.$strip>;
275
283
  kind: z.ZodLiteral<"goal">;
@@ -575,6 +583,34 @@ interface PluginThreadHeaderActionProps {
575
583
  */
576
584
  isCompactViewport: boolean;
577
585
  }
586
+ /** JavaScript world a Browser page expression runs in. */
587
+ type ExperimentalPluginBrowserPageWorld = "isolated" | "main";
588
+ interface ExperimentalPluginBrowserPageEvaluateOptions {
589
+ /**
590
+ * `isolated` (default) runs in a BB-owned world that shares the page DOM but
591
+ * not page globals, and binds `bb.postMessage(data)`. `main` runs beside the
592
+ * page's own scripts, where `bb` is `null`.
593
+ */
594
+ world?: ExperimentalPluginBrowserPageWorld;
595
+ }
596
+ /**
597
+ * Script access to the top-level document of one Browser tab. Independent of
598
+ * CDP control leases: it never attaches a debugger or shows a control banner.
599
+ */
600
+ interface ExperimentalPluginBrowserPage {
601
+ /**
602
+ * Evaluate a JavaScript expression and resolve its JSON-serialized value.
603
+ * Promises are awaited and `undefined` resolves to `null`. The expression
604
+ * can reference `bb`. Rejects when the tab is gone or the expression throws.
605
+ * Anything the expression installs is lost when the document navigates.
606
+ */
607
+ evaluate(expression: string, options?: ExperimentalPluginBrowserPageEvaluateOptions): Promise<JsonValue$1>;
608
+ /**
609
+ * Subscribe to values this plugin's isolated-world scripts in this tab send
610
+ * with `bb.postMessage(data)`. Returns the unsubscribe function.
611
+ */
612
+ onMessage(listener: (data: JsonValue$1) => void): () => void;
613
+ }
578
614
  interface ExperimentalPluginBrowserToolbarActionProps {
579
615
  /** Thread that owns the Browser tab. */
580
616
  threadId: string;
@@ -584,6 +620,8 @@ interface ExperimentalPluginBrowserToolbarActionProps {
584
620
  url: string;
585
621
  /** True when the Browser chrome needs compact controls. */
586
622
  isCompactViewport: boolean;
623
+ /** Script access to this tab's page; `null` outside the desktop app. */
624
+ experimental_page: ExperimentalPluginBrowserPage | null;
587
625
  }
588
626
  /**
589
627
  * Where a file being opened by a `fileOpener` lives. `path` semantics follow
@@ -2174,6 +2212,13 @@ interface PluginComposerApi {
2174
2212
  * content should be fetched fresh when the message is sent.
2175
2213
  */
2176
2214
  insertMention(mention: PluginComposerMention): void;
2215
+ /** Remove this plugin's matching mention pills and their text from the current draft. */
2216
+ experimental_removeMention(mention: {
2217
+ provider: string;
2218
+ id: string;
2219
+ }): void;
2220
+ /** Subscribe to successful local submissions in this composer scope, including accepted queued messages. Failed sends and draft clearing do not notify. Dispose on unmount. */
2221
+ experimental_onSubmitted(listener: () => void): () => void;
2177
2222
  /** Focus the composer caret at the end of the draft. */
2178
2223
  focus(): void;
2179
2224
  /**
@@ -2528,7 +2573,13 @@ interface NewThreadComposerProps {
2528
2573
  * the original `default` submission would have created from.
2529
2574
  */
2530
2575
  defaultEnvironment?: CreateThreadEnvironmentArgs;
2531
- /** Seeds the draft, only while the draft is still empty. */
2576
+ /**
2577
+ * Seeds the draft, only while the draft is still empty. Serialized
2578
+ * `@thread:<id>`, `@project:<id>`, and `@section:<id>` tokens become mention
2579
+ * pills with host-resolved titles/names. Missing projects/sections use their
2580
+ * IDs; unavailable generated thread IDs use "Unavailable thread" ("Thread"
2581
+ * if lookup fails). Other unknown thread IDs use the ID as their label.
2582
+ */
2532
2583
  initialPrompt?: string;
2533
2584
  placeholder?: string;
2534
2585
  /**
@@ -2663,7 +2714,8 @@ interface BbNavigate {
2663
2714
  }): void;
2664
2715
  /**
2665
2716
  * Navigate to the root compose surface (the new-thread screen). Pass
2666
- * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the
2717
+ * `initialPrompt` to seed the composer draft (serialized thread, project,
2718
+ * and section mention tokens become pills) and `focusPrompt` to focus the
2667
2719
  * composer on arrival — the pairing behind "Create via chat" style entry
2668
2720
  * points that drop the user into chat with a prefilled prompt.
2669
2721
  */
@@ -2879,4 +2931,4 @@ declare const experimental_useProviders: () => PluginProvidersState;
2879
2931
  declare const experimental_useCodeTheme: () => PluginCodeThemeState;
2880
2932
 
2881
2933
  export { Markdown, ThreadChat, UrlLink, definePluginApp, experimental_BranchPicker, experimental_Diff, experimental_FileLink, experimental_Icon, experimental_NewThreadComposer, experimental_PermissionModePicker, experimental_ProviderIcon, experimental_ProviderModelPicker, experimental_SourceCode, experimental_useAppPanel, experimental_useBranches, experimental_useCheckoutState, experimental_useCodeTheme, experimental_useFixedTabTarget, experimental_useProviders, experimental_useSidebarThreadActions, experimental_useSidebarThreadPullRequest, experimental_useSidebarThreadSplit, experimental_useSidebarThreads, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings };
2882
- export type { BbContext, BbNavigate, BranchPickerProps, BranchesState, CheckoutState, CodeOverflowMode, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, DiffProps, DiffViewMode, ExperimentalAppIcons, ExperimentalAppOverlayProps, ExperimentalAppOverlayRegistration, ExperimentalAppPanel, ExperimentalAppPanelSurface, ExperimentalComposerSubmitOptions, ExperimentalDiffFileContent, ExperimentalDiffFullFileContents, ExperimentalFileLinkProps, ExperimentalFileLocation, ExperimentalFileOpenOptions, ExperimentalFixedTabTargetContract, ExperimentalFixedTabTargetState, ExperimentalIconProps, ExperimentalIconRegistration, ExperimentalLiveFileTarget, ExperimentalOpenFixedTabOptions, ExperimentalPermissionModePickerProps, ExperimentalPluginBrowserToolbarActionProps, ExperimentalPluginBrowserToolbarActionRegistration, ExperimentalPluginFixedTabReference, ExperimentalProviderIconProps, ExperimentalProviderModelPickerProps, ExperimentalProviderModelPickerRouting, ExperimentalProviderModelPickerValue, ExperimentalSidebarFooter, ExperimentalSidebarFooterActionContext, ExperimentalSidebarFooterActionRegistration, ExperimentalSidebarFooterDisclosureController, ExperimentalSidebarFooterDisclosureProps, ExperimentalSidebarFooterDisclosureRegistration, ExperimentalSidebarFooterItemBase, ExperimentalSidebarFooterItemRegistration, ExperimentalSidebarNavigationAction, ExperimentalSidebarNavigationActivationOptions, ExperimentalSidebarNavigationIcon, ExperimentalSidebarNavigationItem, ExperimentalSidebarNavigationProps, ExperimentalSidebarNavigationRegistration, ExperimentalSidebarNavigationShortcut, JsonValue$1 as JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAppBuilder, PluginAppCommands, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginCodeThemeData, PluginCodeThemeState, PluginCodeThemeTokenRule, PluginCommandContext, PluginCommandPaletteActionContext, PluginCommandPaletteActionRegistration, PluginCommandRegistration, PluginCommandShortcut, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginDiffRendererProps, PluginDiffRendererRegistration, PluginEnvironmentProviderInputsChange, PluginEnvironmentProviderInputsProps, PluginEnvironmentProviderInputsRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginFixedTabDeclaration, PluginFixedTabRegistration, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMachineProviderInputsChange, PluginMachineProviderInputsProps, PluginMachineProviderInputsRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginNewThreadPanelActionContext, PluginNewThreadPanelActionRegistration, PluginNewThreadPanelProps, PluginPanelActionOpenOptions, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginProviderIconRegistration, PluginProvidersState, PluginRealtimeConnectionState, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSourceCodeRendererProps, PluginSourceCodeRendererRegistration, PluginTargetedPanelActionOpenOptions, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginTimelineRendererProps, PluginTimelineRendererRegistration, PluginTimelineRendererRow, PluginTimelineRowPresentation, PluginTimelineRowStatus, ReadonlyJsonValue, SourceCodeLineRange, SourceCodeProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps, UrlLinkProps, UseBranchesArgs, UseCheckoutStateArgs };
2934
+ export type { BbContext, BbNavigate, BranchPickerProps, BranchesState, CheckoutState, CodeOverflowMode, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, DiffProps, DiffViewMode, ExperimentalAppIcons, ExperimentalAppOverlayProps, ExperimentalAppOverlayRegistration, ExperimentalAppPanel, ExperimentalAppPanelSurface, ExperimentalComposerSubmitOptions, ExperimentalDiffFileContent, ExperimentalDiffFullFileContents, ExperimentalFileLinkProps, ExperimentalFileLocation, ExperimentalFileOpenOptions, ExperimentalFixedTabTargetContract, ExperimentalFixedTabTargetState, ExperimentalIconProps, ExperimentalIconRegistration, ExperimentalLiveFileTarget, ExperimentalOpenFixedTabOptions, ExperimentalPermissionModePickerProps, ExperimentalPluginBrowserPage, ExperimentalPluginBrowserPageEvaluateOptions, ExperimentalPluginBrowserPageWorld, ExperimentalPluginBrowserToolbarActionProps, ExperimentalPluginBrowserToolbarActionRegistration, ExperimentalPluginFixedTabReference, ExperimentalProviderIconProps, ExperimentalProviderModelPickerProps, ExperimentalProviderModelPickerRouting, ExperimentalProviderModelPickerValue, ExperimentalSidebarFooter, ExperimentalSidebarFooterActionContext, ExperimentalSidebarFooterActionRegistration, ExperimentalSidebarFooterDisclosureController, ExperimentalSidebarFooterDisclosureProps, ExperimentalSidebarFooterDisclosureRegistration, ExperimentalSidebarFooterItemBase, ExperimentalSidebarFooterItemRegistration, ExperimentalSidebarNavigationAction, ExperimentalSidebarNavigationActivationOptions, ExperimentalSidebarNavigationIcon, ExperimentalSidebarNavigationItem, ExperimentalSidebarNavigationProps, ExperimentalSidebarNavigationRegistration, ExperimentalSidebarNavigationShortcut, JsonValue$1 as JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAppBuilder, PluginAppCommands, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginCodeThemeData, PluginCodeThemeState, PluginCodeThemeTokenRule, PluginCommandContext, PluginCommandPaletteActionContext, PluginCommandPaletteActionRegistration, PluginCommandRegistration, PluginCommandShortcut, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginDiffRendererProps, PluginDiffRendererRegistration, PluginEnvironmentProviderInputsChange, PluginEnvironmentProviderInputsProps, PluginEnvironmentProviderInputsRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginFixedTabDeclaration, PluginFixedTabRegistration, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMachineProviderInputsChange, PluginMachineProviderInputsProps, PluginMachineProviderInputsRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginNewThreadPanelActionContext, PluginNewThreadPanelActionRegistration, PluginNewThreadPanelProps, PluginPanelActionOpenOptions, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginProviderIconRegistration, PluginProvidersState, PluginRealtimeConnectionState, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSourceCodeRendererProps, PluginSourceCodeRendererRegistration, PluginTargetedPanelActionOpenOptions, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginTimelineRendererProps, PluginTimelineRendererRegistration, PluginTimelineRendererRow, PluginTimelineRowPresentation, PluginTimelineRowStatus, ReadonlyJsonValue, SourceCodeLineRange, SourceCodeProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps, UrlLinkProps, UseBranchesArgs, UseCheckoutStateArgs };
@@ -143,6 +143,7 @@ declare const threadResponseSchema: z.ZodObject<{
143
143
  id: z.ZodString;
144
144
  lastReadAt: z.ZodNullable<z.ZodNumber>;
145
145
  latestAttentionAt: z.ZodNumber;
146
+ lifecycleOwnerThreadId: z.ZodNullable<z.ZodString>;
146
147
  originKind: z.ZodNullable<z.ZodEnum<{
147
148
  fork: "fork";
148
149
  }>>;
@@ -252,6 +252,7 @@ declare const promptInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
252
252
  }>;
253
253
  trigger: z.ZodEnum<{
254
254
  "/": "/";
255
+ $: "$";
255
256
  }>;
256
257
  }, z.core.$strip>, z.ZodObject<{
257
258
  icon: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -344,6 +345,7 @@ declare const threadQueuedMessageSchema: z.ZodObject<{
344
345
  }>;
345
346
  trigger: z.ZodEnum<{
346
347
  "/": "/";
348
+ $: "$";
347
349
  }>;
348
350
  }, z.core.$strip>, z.ZodObject<{
349
351
  icon: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -472,6 +474,7 @@ declare const threadResponseSchema: z.ZodObject<{
472
474
  id: z.ZodString;
473
475
  lastReadAt: z.ZodNullable<z.ZodNumber>;
474
476
  latestAttentionAt: z.ZodNumber;
477
+ lifecycleOwnerThreadId: z.ZodNullable<z.ZodString>;
475
478
  originKind: z.ZodNullable<z.ZodEnum<{
476
479
  fork: "fork";
477
480
  }>>;
@@ -695,7 +698,9 @@ interface PluginMachineProviderDefinition<S extends PluginMachineProviderInputsS
695
698
  report: PluginMachineProviderProgress;
696
699
  signal: AbortSignal;
697
700
  }): Promise<PluginMachineProviderRemoveResult>;
701
+ /** Idempotent: preserve saved state when compute is already stopped; save and stop any remaining compute, including during reconciliation of a suspended machine. */
698
702
  suspend?(context: PluginMachineProviderResourceLifecycleContext): Promise<PluginMachineProviderResourceResult>;
703
+ /** Idempotent: reuse existing running compute instead of allocating a duplicate. */
699
704
  resume?(context: PluginMachineProviderResourceLifecycleContext): Promise<PluginMachineProviderResourceResult>;
700
705
  remove(context: PluginMachineProviderRemoveContext): Promise<PluginMachineProviderRemoveResult>;
701
706
  }
@@ -1311,6 +1316,8 @@ interface PluginProviderOptionsContext {
1311
1316
  }
1312
1317
  /** See {@link PluginProviderDeclaration.models}. */
1313
1318
  type PluginProviderModelCatalogScope = "host" | "workspace";
1319
+ /** See {@link PluginProviderDeclaration.completedTurnDisplay}. */
1320
+ type PluginProviderCompletedTurnDisplay = "collapse" | "flat";
1314
1321
  /**
1315
1322
  * One cold-cache fallback model. The provider's live `model/list` result is
1316
1323
  * the only real model source; this list stands in only while no probe has
@@ -1417,6 +1424,16 @@ interface PluginProviderDeclaration {
1417
1424
  /** Composer actions this provider supports. No duplicates; may be empty
1418
1425
  * (the universal skills typeahead is implicit). */
1419
1426
  composerActions: readonly PluginProviderComposerAction[];
1427
+ /**
1428
+ * How the thread timeline shows this provider's turns once they finish.
1429
+ * `"collapse"` (the default) folds a finished turn's work into one
1430
+ * "Worked for" row and leaves the final answer visible. `"flat"` keeps
1431
+ * every row of a finished turn visible, as it was while the turn ran. This
1432
+ * is only the provider's default: the user can choose either display for
1433
+ * each provider in Settings → Providers or with
1434
+ * `bb settings completed-turns`, and that choice wins.
1435
+ */
1436
+ completedTurnDisplay?: PluginProviderCompletedTurnDisplay;
1420
1437
  /** Provider copy for core surfaces ({@link PluginProviderStrings}). */
1421
1438
  strings?: PluginProviderStrings;
1422
1439
  /** Service tiers this provider accepts, as picker options. Non-empty when
@@ -1705,6 +1722,7 @@ type NormalizedPluginProviderDeclaration = Omit<PluginProviderDeclaration, "expe
1705
1722
  readonly experimental_nativeSkillRoots?: ProviderNativeRoots;
1706
1723
  readonly experimental_nativeCommandRoots?: ProviderNativeRoots;
1707
1724
  readonly experimental_resolvesNativeRoots: boolean;
1725
+ readonly completedTurnDisplay: PluginProviderCompletedTurnDisplay;
1708
1726
  readonly maintenance: {
1709
1727
  readonly health: boolean;
1710
1728
  readonly usage: boolean;
@@ -76,7 +76,9 @@ interface PluginMachineProviderDefinition<S extends PluginMachineProviderInputsS
76
76
  report: PluginMachineProviderProgress;
77
77
  signal: AbortSignal;
78
78
  }): Promise<PluginMachineProviderRemoveResult>;
79
+ /** Idempotent: preserve saved state when compute is already stopped; save and stop any remaining compute, including during reconciliation of a suspended machine. */
79
80
  suspend?(context: PluginMachineProviderResourceLifecycleContext): Promise<PluginMachineProviderResourceResult>;
81
+ /** Idempotent: reuse existing running compute instead of allocating a duplicate. */
80
82
  resume?(context: PluginMachineProviderResourceLifecycleContext): Promise<PluginMachineProviderResourceResult>;
81
83
  remove(context: PluginMachineProviderRemoveContext): Promise<PluginMachineProviderRemoveResult>;
82
84
  }
@@ -3286,6 +3286,7 @@ declare const threadEventSchema: z.ZodPipe<z.ZodUnknown, z.ZodUnion<readonly [z.
3286
3286
  core: z.ZodEnum<{
3287
3287
  "machine-environment": "machine-environment";
3288
3288
  "machine-git": "machine-git";
3289
+ "project-environment": "project-environment";
3289
3290
  }>;
3290
3291
  }, z.core.$strict>]>;
3291
3292
  value: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
@@ -3445,6 +3446,7 @@ declare const threadEventSchema: z.ZodPipe<z.ZodUnknown, z.ZodUnion<readonly [z.
3445
3446
  }>;
3446
3447
  trigger: z.ZodEnum<{
3447
3448
  "/": "/";
3449
+ $: "$";
3448
3450
  }>;
3449
3451
  }, z.core.$strip>, z.ZodObject<{
3450
3452
  icon: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -3526,6 +3528,7 @@ declare const threadEventSchema: z.ZodPipe<z.ZodUnknown, z.ZodUnion<readonly [z.
3526
3528
  }>;
3527
3529
  trigger: z.ZodEnum<{
3528
3530
  "/": "/";
3531
+ $: "$";
3529
3532
  }>;
3530
3533
  }, z.core.$strip>, z.ZodObject<{
3531
3534
  icon: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -4065,6 +4068,7 @@ declare const promptInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
4065
4068
  }>;
4066
4069
  trigger: z.ZodEnum<{
4067
4070
  "/": "/";
4071
+ $: "$";
4068
4072
  }>;
4069
4073
  }, z.core.$strip>, z.ZodObject<{
4070
4074
  icon: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -1375,6 +1375,7 @@ declare const permissionEscalationSchema: z.ZodEnum<{
1375
1375
  type PermissionEscalation = z.infer<typeof permissionEscalationSchema>;
1376
1376
  declare const promptMentionCommandTriggerSchema: z.ZodEnum<{
1377
1377
  "/": "/";
1378
+ $: "$";
1378
1379
  }>;
1379
1380
  type PromptMentionCommandTrigger = z.infer<typeof promptMentionCommandTriggerSchema>;
1380
1381
  declare const promptInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -1421,6 +1422,7 @@ declare const promptInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1421
1422
  }>;
1422
1423
  trigger: z.ZodEnum<{
1423
1424
  "/": "/";
1425
+ $: "$";
1424
1426
  }>;
1425
1427
  }, z.core.$strip>, z.ZodObject<{
1426
1428
  icon: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -4538,6 +4540,7 @@ declare const threadStartParamsSchema: z.ZodObject<{
4538
4540
  }>;
4539
4541
  trigger: z.ZodEnum<{
4540
4542
  "/": "/";
4543
+ $: "$";
4541
4544
  }>;
4542
4545
  }, z.core.$strip>, z.ZodObject<{
4543
4546
  icon: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -4864,6 +4867,7 @@ declare const turnStartParamsSchema: z.ZodObject<{
4864
4867
  }>;
4865
4868
  trigger: z.ZodEnum<{
4866
4869
  "/": "/";
4870
+ $: "$";
4867
4871
  }>;
4868
4872
  }, z.core.$strip>, z.ZodObject<{
4869
4873
  icon: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -4993,6 +4997,7 @@ declare const turnSteerParamsSchema: z.ZodObject<{
4993
4997
  }>;
4994
4998
  trigger: z.ZodEnum<{
4995
4999
  "/": "/";
5000
+ $: "$";
4996
5001
  }>;
4997
5002
  }, z.core.$strip>, z.ZodObject<{
4998
5003
  icon: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -77,7 +77,9 @@ interface PluginMachineProviderDefinition<S extends PluginMachineProviderInputsS
77
77
  report: PluginMachineProviderProgress;
78
78
  signal: AbortSignal;
79
79
  }): Promise<PluginMachineProviderRemoveResult>;
80
+ /** Idempotent: preserve saved state when compute is already stopped; save and stop any remaining compute, including during reconciliation of a suspended machine. */
80
81
  suspend?(context: PluginMachineProviderResourceLifecycleContext): Promise<PluginMachineProviderResourceResult>;
82
+ /** Idempotent: reuse existing running compute instead of allocating a duplicate. */
81
83
  resume?(context: PluginMachineProviderResourceLifecycleContext): Promise<PluginMachineProviderResourceResult>;
82
84
  remove(context: PluginMachineProviderRemoveContext): Promise<PluginMachineProviderRemoveResult>;
83
85
  }
@@ -272,6 +274,7 @@ declare const threadResponseSchema: z.ZodObject<{
272
274
  id: z.ZodString;
273
275
  lastReadAt: z.ZodNullable<z.ZodNumber>;
274
276
  latestAttentionAt: z.ZodNumber;
277
+ lifecycleOwnerThreadId: z.ZodNullable<z.ZodString>;
275
278
  originKind: z.ZodNullable<z.ZodEnum<{
276
279
  fork: "fork";
277
280
  }>>;
@@ -701,6 +704,8 @@ interface PluginProviderOptionsContext {
701
704
  }
702
705
  /** See {@link PluginProviderDeclaration.models}. */
703
706
  type PluginProviderModelCatalogScope = "host" | "workspace";
707
+ /** See {@link PluginProviderDeclaration.completedTurnDisplay}. */
708
+ type PluginProviderCompletedTurnDisplay = "collapse" | "flat";
704
709
  /**
705
710
  * One cold-cache fallback model. The provider's live `model/list` result is
706
711
  * the only real model source; this list stands in only while no probe has
@@ -807,6 +812,16 @@ interface PluginProviderDeclaration {
807
812
  /** Composer actions this provider supports. No duplicates; may be empty
808
813
  * (the universal skills typeahead is implicit). */
809
814
  composerActions: readonly PluginProviderComposerAction[];
815
+ /**
816
+ * How the thread timeline shows this provider's turns once they finish.
817
+ * `"collapse"` (the default) folds a finished turn's work into one
818
+ * "Worked for" row and leaves the final answer visible. `"flat"` keeps
819
+ * every row of a finished turn visible, as it was while the turn ran. This
820
+ * is only the provider's default: the user can choose either display for
821
+ * each provider in Settings → Providers or with
822
+ * `bb settings completed-turns`, and that choice wins.
823
+ */
824
+ completedTurnDisplay?: PluginProviderCompletedTurnDisplay;
810
825
  /** Provider copy for core surfaces ({@link PluginProviderStrings}). */
811
826
  strings?: PluginProviderStrings;
812
827
  /** Service tiers this provider accepts, as picker options. Non-empty when
@@ -920,6 +935,7 @@ type NormalizedPluginProviderDeclaration = Omit<PluginProviderDeclaration, "expe
920
935
  readonly experimental_nativeSkillRoots?: ProviderNativeRoots;
921
936
  readonly experimental_nativeCommandRoots?: ProviderNativeRoots;
922
937
  readonly experimental_resolvesNativeRoots: boolean;
938
+ readonly completedTurnDisplay: PluginProviderCompletedTurnDisplay;
923
939
  readonly maintenance: {
924
940
  readonly health: boolean;
925
941
  readonly usage: boolean;